Ihr Ziel ist es zu bestimmen, ob ein gegebener 2D-Punkt X im Bereich des Dreiecks mit gegebenen Eckpunkten A, B, C liegt.
Schreiben Sie eine Funktion, die die Koordinaten des Testpunkts X und der drei Eckpunkte des Dreiecks (also insgesamt 8 Koordinaten) aufnimmt und True zurückgibt, wenn der Punkt in diesem Dreieck liegt, und False, wenn er außerhalb liegt.
Mach dir keine Sorgen über Edge Cases. Wenn der Punkt auf der Grenze des Dreiecks (Kante oder Scheitelpunkt) liegt oder das Dreieck tatsächlich ein Liniensegment ist, kann Ihr Code alles tun, einschließlich Abstürzen. Sorgen Sie sich auch nicht um numerische Stabilität oder Gleitkommapräzision.
Ihr Code muss eine benannte Funktion sein. Code-Schnipsel werden nicht akzeptiert.
Die wenigsten Charaktere gewinnen.
Eingang:
Acht reelle Zahlen, die Koordinaten darstellen. Die Zahlen liegen im Bereich (-1,1)
.
Das genaue Eingabeformat ist flexibel. Sie können beispielsweise acht Zahlen, eine Liste mit acht Zahlen, eine Liste mit vier Punkten, die jeweils durch ein Tupel gegeben sind, eine 2 * 4-Matrix, vier komplexe Zahlen, zwei Listen mit den x- und y-Koordinaten, und so weiter.
Die Eingabe muss lediglich aus den Zahlen in einem Container ohne zusätzliche Daten bestehen. Sie können die Eingabe weder für die Vorverarbeitung verwenden, noch benötigen Sie Einschränkungen für die Eingabe, z. B. die Angabe der Punkte in aufsteigender y-Koordinate. Ihre Eingabe muss acht beliebige Koordinaten zulassen (obwohl sich Ihr Code in den oben genannten Randfällen beliebig verhalten kann).
Bitte geben Sie Ihr Eingabeformat an.
Ausgabe:
Entweder das entsprechende Boolesche True
/ False
, die entsprechende Zahl 1
/ 0
oder die Analoga in Ihrer Sprache.
Testfälle
Die Eingaben erhalten eine Liste [X,A,B,C]
von vier Tupeln, zuerst den Testpunkt, dann die drei Dreieckscheitelpunkte. Ich habe sie in diejenigen gruppiert, deren Ausgaben sein sollten True
und diejenigen, die sein sollten False
.
True
Instanzen:
[(-0.31961, -0.12646), (0.38478, 0.37419), (-0.30613, -0.59754), (-0.85548, 0.6633)]
[(-0.87427, -0.00831), (0.78829, 0.60409), (-0.90904, -0.13856), (-0.80685, 0.48468)]
[(0.28997, -0.03668), (-0.28362, 0.42831), (0.39332, -0.07474), (-0.48694, -0.10497)]
[(-0.07783, 0.04415), (-0.34355, -0.07161), (0.59105, -0.93145), (0.29402, 0.90334)]
[(0.36107, 0.05389), (0.27103, 0.47754), (-0.00341, -0.79472), (0.82549, -0.29028)]
[(-0.01655, -0.20437), (-0.36194, -0.90281), (-0.26515, -0.4172), (0.36181, 0.51683)]
[(-0.12198, -0.45897), (-0.35128, -0.85405), (0.84566, 0.99364), (0.13767, 0.78618)]
[(-0.03847, -0.81531), (-0.18704, -0.33282), (-0.95717, -0.6337), (0.10976, -0.88374)]
[(0.07904, -0.06245), (0.95181, -0.84223), (-0.75583, -0.34406), (0.16785, 0.87519)]
[(-0.33485, 0.53875), (-0.25173, 0.51317), (-0.62441, -0.90698), (-0.47925, 0.74832)]
False
Instanzen:
[(-0.99103, 0.43842), (0.78128, -0.10985), (-0.84714, -0.20558), (-0.08925, -0.78608)]
[(0.15087, -0.56212), (-0.87374, -0.3787), (0.86403, 0.60374), (0.01392, 0.84362)]
[(0.1114, 0.66496), (-0.92633, 0.27408), (0.92439, 0.43692), (0.8298, -0.29647)]
[(0.87786, -0.8594), (-0.42283, -0.97999), (0.58659, -0.327), (-0.22656, 0.80896)]
[(0.43525, -0.8923), (0.86119, 0.78278), (-0.01348, 0.98093), (-0.56244, -0.75129)]
[(-0.73365, 0.28332), (0.63263, 0.17177), (-0.38398, -0.43497), (-0.31123, 0.73168)]
[(-0.57694, -0.87713), (-0.93622, 0.89397), (0.93117, 0.40775), (0.2323, -0.30718)]
[(0.91059, 0.75966), (0.60118, 0.73186), (0.32178, 0.88296), (-0.90087, -0.26367)]
[(0.3463, -0.89397), (0.99108, 0.13557), (0.50122, -0.8724), (0.43385, 0.00167)]
[(0.88121, 0.36469), (-0.29829, 0.21429), (0.31395, 0.2734), (0.43267, -0.78192)]