Una técnica habitual en un programa informático es utilizar coordenadas baricéntricas.
Las coordenadas baricéntricas son mucho más fáciles de encontrar de lo que indican los recursos de la web, así que no las enlazo.
La forma más fácil de obtener las coordenadas baricéntricas de un punto P, dado un triángulo con vértices descritos por los vectores A, B, C es probablemente este método:
$ AreaABC = \frac{ \left| \overline{AB} \times \overline{AC} \right| }{ 2 } $
$ \alpha = \frac{ \left| \overline{PB} \times \overline{PC} \right| }{ 2AreaABC } $
$ \beta = \frac{ \left| \overline{PC} \times \overline{PA} \right| }{ 2AreaABC } $
$ \gamma = 1 - \alpha - \beta $
Aquí $\alpha$ es el cociente del área de un subtriángulo PBC sobre el área del triángulo entero ABC, como se muestra en esta imagen de El libro de Peter Shirley :
Si se cumplen TODAS las siguientes 4 restricciones:
- $ 0 \le \alpha \le 1 $
- $ 0 \le \beta \le 1 $
- $ 0 \le \gamma \le 1 $
- $\alpha + \beta + \gamma = 1$
entonces el punto P está dentro del triángulo.
Tenga en cuenta que si calcula $\gamma$ como lo hice anteriormente (usando $\gamma = 1 - \alpha - \beta$ ) entonces no tiene que comprobar $\alpha + \beta + \gamma = 1$ pero lo harías si encontraras $\gamma$ usando áreas (como se muestra en el diagrama).
Si cualquiera de $\alpha$ , $\beta$ , $\gamma$ están fuera de esos rangos, o si la suma de $ \alpha + \beta + \gamma \ne 1 $ entonces el punto P no está dentro del triángulo.
Tenga en cuenta también cuando uno de $\alpha$ , $\beta$ , $\gamma$ es 0, y las otras 2 coordenadas están entre 0 y 1, el punto P está en un borde del triángulo.
Cuando uno de $\alpha$ , $\beta$ , $\gamma$ es 1 y los otros dos son 0 , entonces el punto P está exactamente en un vértice del triángulo.
Por supuesto, estos cálculos suponen que P ya está en el plano del triángulo. Si P no está en el plano del triángulo, entonces hay que proyectarlo allí primero, antes de calcular las coordenadas baricéntricas.
0 votos
En $P$ tiene que estar dentro del triángulo definido por los tres puntos, o simplemente quiere comprobar que $P$ satisface la ecuación del plano?
0 votos
@J.M. Sí, tiene que ser así. Ver la pregunta actualizada.
0 votos
Una prueba de punto en polígono: ics.uci.edu/~eppstein/161/960307.html junto con la comprobación de determinantes proporcionada por Robin, debería ser adecuada para sus propósitos.
2 votos
Como pensaba, ya se preguntó en stackoverflow.com/questions/924171
0 votos
@Robin, he puesto como requisito que el punto esté dentro del triángulo definido por los tres puntos.
0 votos
@J.M., ¿existe un análogo en 3D para el algoritmo anterior? Odio la idea de convertir el plano 3D en uno 2D y realizar la comprobación.
0 votos
Ngu: Yo conocía eso dirías tú... ;) Tendré que rebuscar en la bibliografía de CG por si hay algo que no necesite proyección.
0 votos
Una sugerencia: tal vez cambiar el título por algo como "Comprobar si un punto está dentro de un triángulo 3D" o algo parecido.
1 votos
Si vas a implementar esto en un programa de ordenador, ten en cuenta que, debido al error de punto flotante, es casi seguro que tu punto P no estará exactamente en el plano definido por los otros tres puntos.
0 votos
Una vez que sabemos que P está en el plano, podemos desechar 1 coordenada y tratarlo como un problema bidimensional, siempre que el vector normal sea distinto de cero en esa coordenada.
0 votos
¿Cómo se puede tener un plano 3D, los planos son 2D?