Su objetivo es determinar si un determinado punto 2D X se encuentra dentro del área del triángulo con vértices dados A, B, C.
Escriba una función que tome las coordenadas del punto de prueba X y los tres vértices del triángulo (de modo que sea un total de 8 coordenadas) y devuelva Verdadero si el punto se encuentra dentro de ese triángulo y Falso si se encuentra afuera.
No te preocupes por los casos extremos. Si el punto se encuentra en el límite del triángulo (borde o vértice) o el triángulo es en realidad un segmento de línea, su código puede hacer lo que sea, incluido el bloqueo. Tampoco se preocupe por la estabilidad numérica o la precisión de punto flotante.
Su código debe ser una función con nombre. No se aceptarán fragmentos de código.
Pocos personajes ganan.
Entrada:
Ocho números reales que representan coordenadas. Los números estarán en el rango (-1,1)
.
El formato de entrada exacto es flexible. Podría, por ejemplo, tomar ocho números, una lista de ocho números, una lista de cuatro puntos, cada uno dado por una tupla, una matriz 2 * 4, cuatro números complejos, dos listas de las coordenadas x y coordenadas y, y así.
La entrada debe ser solo los números en algún contenedor, sin datos adicionales. No puede usar la entrada para hacer ningún preprocesamiento, ni puede requerir restricciones en la entrada, como exigir que los puntos se den en coordenada y ascendente. Su entrada debe permitir ocho coordenadas (aunque su código puede comportarse arbitrariamente en los casos límite mencionados anteriormente).
Por favor, indique su formato de entrada.
Salida:
El booleano True
/ correspondiente False
, el número correspondiente 1
/ 0
o los análogos en su idioma.
Casos de prueba
Las entradas reciben una lista [X,A,B,C]
de cuatro tuplas, primero el punto de prueba y luego los tres vértices triangulares. Los he agrupado en aquellos cuyos resultados deberían ser True
y aquellos que deberían ser False
.
True
instancias:
[(-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
instancias:
[(-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)]