He aquí un enfoque basado en la aritmética vectorial que no requiere que averiguar cómo rotar el rectángulo paralelo a los ejes de coordenadas.
Este enfoque hace requieren que identifiques dos vértices que estén en diagonal opuestos entre sí. Si los vértices se dieran en el sentido de las agujas del en el sentido de las agujas del reloj, esto es fácil: $A$ y $C$ son diagonalmente opuestas. Para lo que sigue supondré que los vértices están etiquetados de modo que efectivamente $C$ es diagonalmente opuesto a $A$ .
Sea \begin{align} u_1 &= X_2 - X_1, \\ v_1 &= Y_2 - Y_1, \\ u_2 &= X_4 - X_1, \\ v_2 &= Y_4 - Y_1. \end{align}
Calcula ahora las cuatro cantidades siguientes: \begin{align} a_1 &= X_1 u_1 + Y_1 v_1 , \\ b_1 &= X_2 u_1 + Y_2 v_1 , \\ a_2 &= X_1 u_2 + Y_1 v_2 , \\ b_2 &= X_4 u_2 + Y_4 v_2 . \end{align}
Ahora a saber si algún punto $(x_k, y_k)$ está en el rectángulo, calcula \begin{align} p_1 &= x_k u_1 + y_k v_1 , \\ p_2 &= x_k u_2 + y_k v_2 . \end{align} El punto $(x_k, y_k)$ está dentro del rectángulo si y sólo si $a_1 < p_1 < b_1$ y $a_2 < p_2 < b_2$ .
Si consideras que los puntos del perímetro del rectángulo están "dentro". basta con escribir $\leq$ en lugar de $<$ en las desigualdades anteriores.
Nota: Esto sólo funciona para rectángulos, no para otros tipos de cuadriláteros.
Para quien se pregunte por qué esto funciona:
Este método funciona utilizando las propiedades del producto vectorial interno ("producto punto") y aprovechando el hecho de que los lados del rectángulo son perpendiculares a sus lados adyacentes.
Tratados como vectores, $(u_1,v_1)$ es $B - A$ que es un vector perpendicular al lado $AD$ y $(u_2,v_2)$ es $D - A$ , que es un vector perpendicular al lado $AB$ . Para un punto $P$ en coordenadas $(x,y)$ visto como un vector desde el origen, $$ x u_1 + y v_1 = P \cdot (B - A). $$ Para distintas opciones de $P$ el producto $P \cdot (B - A)$ es proporcional a la distancia a $P$ de una línea $\ell$ a través del origen perpendicular a $B - A$ medido en la dirección desde $A$ a $B$ . Ahora invocamos el hecho de que $ABCD$ es un rectángulo: puesto que $\ell$ y la línea $AD$ son perpendiculares a $AB$ son paralelos entre sí, por lo que todos los puntos de la recta $AB$ están en el mismo lado de $\ell$ y todos están a la misma distancia de $\ell$ . Si $P \cdot (B - A) = A \cdot (B - A)$ entonces $P$ está en el mismo lado de $\ell$ como $A$ y a la misma distancia, por lo tanto $P$ está en juego $AD$ . Pero si $P \cdot (B - A) > A \cdot (B - A)$ entonces $P$ está en el mismo lado de $AD$ como $B$ es. Del mismo modo, si $P \cdot (B - A) = B \cdot (B - A)$ entonces $P$ está en el mismo lado de $\ell$ como $B$ y a la misma distancia, por lo tanto $P$ está en juego $BC$ pero si $P \cdot (B - A) < B \cdot (B - A)$ entonces $P$ está en el mismo lado de $BC$ como $A$ es.
Para comprobar si $P=(x_k,y_k)$ está dentro del rectángulo, por lo tanto podemos calcular los productos internos como en la primera parte de esta respuesta, y luego probar las cuatro desigualdades $a_1 < p_1$ , $p_1 < b_1$ , $a_2 < p_2$ y $p_2 < b_2$ . Si las cuatro desigualdades son ciertas, esto confirma que $P$ está en el mismo lado de $AD$ como $B$ es, en el mismo lado de $BC$ como $A$ es, en el mismo lado de $AB$ como $D$ es, y en el mismo lado de $CD$ como $A$ en cuyo caso $P$ está dentro del rectángulo. Si alguna de las desigualdades es falsa, entonces $P$ está en uno de los lados o en el lado "equivocado" de una de las líneas que se encuentran a lo largo de los lados y está fuera del rectángulo.
1 votos
Basta con comprobar si los vértices del triángulo pertenecen al rectángulo.
1 votos
Utiliza una rotación para que los lados de $ABCD$ paralela al eje de coordenadas. Entonces es fácil comprobar si un vértice se encuentra en el rectángulo.