Lo resolví de una forma tan sencilla que me asombré yo mismo:
-Usando la arcotangente averiguamos el ángulo respecto del primer punto del segundo y del tercero.
-Por el mismo método, hayamos el ángulo del punto desconocido respecto al primer punto, y comprobamos si está entre los dos anteriores.
-Repetimos el proceso, pero tomando como referencia el segundo punto (hayamos los ángulos del primero y tercero respecto del segundo, y el del punto desconocido, y comprobamos si el punto desconocido está entre los ángulos).
De esta forma, si el punto desconocido está entre dos de los ángulos, está en el triángulo que forman
No se puede usar un único ángulo, porque no sabemos si está demasiado lejos y, por tanto, fuera de mismo, ni usar una constante de distancia porque no es un radio.
Lo divertido es que se puede usar el mismo método para cualquier figura de 4 lados, usando ángulos opuestos
Aun no me he puesto a pensar cómo sería en 3D.
Fíjate como son las cosas, lo mismo estoy en la misma situación y hago lo mismo. Pero me he dado cuenta de que no te hace falta para nada averiguar el ángulo. Simplemente con ver que:
- dy/dx de la recta p1-P debe ser un valor comprendido entre dy/dx de las rectas p1-p2 y p1-p3.
- Y dy/dx p2-P entre los valores dy/dx de las rectas p2-p1 y p2-p3.
Me parece que con esto es suficiente. Un saludo.
Maldita sea, por escribir rápido he cometido un error tonto y ya he tenido que editar. :@
Agarrate que vienen curvas. Del mensaje de hackzjuan me he tirado un rato resolviendo este sistema de ecuaciones:
Suponiendo que T, U y V son alfa, beta y gamma respectivamente.
Px = T*p1x + U*p2x + V*p3x
Py = T*p1y + U*p2y + V*p3y
1 = T + U + V
Obtengo que:
T = (Px*(p2y-p3y) -Py*(p2x-p3x) +p2x*p3y +p3x*(p2y- 2*p3y) ) / ( p1x*(p2y-p3y) -p2x*(p1y-p3y) -p3x(p2y-p1y))
U = (Py -T*(p1y-p3y) +p3y) / (p2y -p3y)
V = 1 -T -U
Siguiendo una ecuación trás otra se hayan alfa, beta y gamma, comprobando después de cada una que T, U, y V estén entre los valores de 0 y 1. Si alguna se sale de ese intervalo el punto no pertenece al triángulo.
Hago un llamamiento XD, por favor que alguien compruebe que esto es verdad para guardarlo y tenerlo para la posteridad.
Llamamiento 2 XD: y si es posible, reducir estas ecuaciones para que sean más sencillas (la ecuación para T se las trae XD).
Un saludo.