Uno de los algoritmos más simples de la geometría del plano coordenado es un método de "¿Está el vector $\vec{w}$ en sentido horario o antihorario desde el vector $\vec{v}$?"
El algoritmo consiste en calcular el producto cruzado $\vec{v} \times \vec{w}$. Si el signo es positivo, entonces $\vec{w}$ está en sentido antihorario desde $\vec{v}$. Si es negativo, está en sentido horario.
Este método proporciona un algoritmo para responder a la pregunta "¿En qué lado de una línea se encuentra un punto?"
Por ejemplo, considera la línea izquierda de tu cuadro, línea $da$, dirigida de $d$ a $a$. El punto $p=(x, y)$ está en el lado derecho de esta línea si y solo si el vector $dp$ está en sentido horario desde $da$. Por lo tanto, simplemente podemos calcular el producto cruzado para saber si $p$ está en el lado correcto de $da$ o no.
Haz esto con las cuatro líneas y tendrás tu prueba.
Si estás usando los mismos cuatro puntos muchas veces, podemos ahorrar trabajo a la mitad. Podemos usar el producto punto para calcular "¿Qué tan largo es un vector en la dirección en la que apunta otro?"
Podemos calcular el producto punto de $da$ con $dp$. Si este número es mayor que el producto punto de $da$ consigo mismo, entonces tu punto está demasiado arriba para estar en el cuadro. Si este número es negativo, el punto está demasiado abajo para estar en el cuadro.
Debido a que esto verifica dos límites a la vez, solo tenemos que hacer esto dos veces: una vez con $da$ para obtener la ubicación arriba-abajo, y una vez con $dc$ para obtener la ubicación izquierda-derecha.
EDICIÓN: Una de las ideas generales en juego es tratar de aprovechar al máximo el producto punto y el producto cruzado, ya que son formas computacionalmente eficientes de calcular información geométrica relacionada con cosas como longitud, ángulo y área.
Entonces, una estrategia común para un problema de geometría computacional es tratar de plantear el problema en términos de cosas que se pueden responder con productos punto y cruz. Si eso no es inmediatamente obvio, plantéalo en términos de longitudes (dirigidas), ángulos y áreas, y trata de reformular esas en términos de productos punto y cruz.
Mi enfoque para la pregunta fue expresar "¿en qué lado de una línea?" como un ángulo dirigido, permitiendo el uso del producto cruzado.
Además, usé el producto punto para calcular la distancia a lo largo de una dirección paralela a uno de los lados del rectángulo. Podrías calcular lo mismo como "distancia perpendicular" desde un lado adyacente, lo que te permitiría usar el producto cruzado.
Algunas de las otras respuestas expresan las cosas en términos de las áreas de triángulos, las cuales se calculan naturalmente con productos cruzados. Una respuesta sumó sus magnitudes y las comparó con el área del rectángulo. Otra miró la dirección de las áreas en su lugar (es decir, si los triángulos estaban orientados positivamente).
0 votos
Lo siento, no puedo encontrar las etiquetas adecuadas para esta pregunta, por favor ayúdame a mejorarla
4 votos
Similar a stackoverflow.com/questions/2752725/…
3 votos
Acabo de leer algunas de las respuestas y he creado algunas imágenes y código Python para ello: martin-thoma.com/how-to-check-if-a-point-is-inside-a-rectangle