Votre objectif est de déterminer si un point 2D donné X se situe dans la zone du triangle avec les sommets A, B, C donnés.
Ecrivez une fonction qui prend les coordonnées du point de test X et des trois sommets du triangle (donc 8 coordonnées au total) et renvoie Vrai si le point se trouve à l'intérieur de ce triangle et Faux s'il se trouve à l'extérieur.
Ne vous inquiétez pas des cas de bord. Si le point se trouve sur la limite du triangle (arête ou sommet) ou si le triangle est en fait un segment de ligne, votre code peut faire n'importe quoi, y compris un crash. Ne vous inquiétez pas non plus de la stabilité numérique ou de la précision en virgule flottante.
Votre code doit être une fonction nommée. Les extraits de code ne seront pas acceptés.
Le moins de personnages gagne.
Contribution:
Huit nombres réels représentant des coordonnées. Les chiffres vont se situer dans la plage (-1,1)
.
Le format d'entrée exact est flexible. Vous pouvez, par exemple, prendre huit chiffres, une liste de huit chiffres, une liste de quatre points chacun donnée par un tuple, une matrice 2 * 4, quatre nombres complexes, deux listes de coordonnées x et y, etc.
L'entrée doit simplement correspondre aux numéros d'un conteneur, sans données supplémentaires. Vous ne pouvez pas utiliser l'entrée pour effectuer un prétraitement, ni imposer de contrainte à l'entrée, telle que demander que les points soient donnés en coordonnée y ascendante. Votre entrée doit autoriser huit coordonnées (bien que votre code puisse se comporter de manière arbitraire dans les cas extrêmes mentionnés précédemment).
Veuillez indiquer votre format d'entrée.
Sortie:
Soit le booléen True
/ False
, le numéro 1
/ 0
, ou les analogues de votre langue.
Cas de test
Les entrées reçoivent une liste [X,A,B,C]
de quatre tuples, le point de test en premier, puis les trois sommets du triangle. Je les ai regroupés dans ceux dont les résultats devraient être True
et ceux qui devraient être False
.
True
instances:
[(-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
instances:
[(-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)]