1 votos

Dividir un cuadrilátero en dos triángulos si tiene un vértice con un ángulo interior mayor de 180º

Estoy intentando escribir una aplicación en la que necesito comprobar si un cuadrilátero 3D tiene algún ángulo igual o mayor a 180 grados, es decir, es un cuadrilátero degenerado o cóncavo. Si esto es cierto, tengo que dividirlo en dos triángulos. No tengo ningún problema en dividir el cuadrilátero en dos, pero no sé cómo resolver la condición de prueba.

Gracias de antemano por su ayuda.

Editar:
Sólo conozco las coordenadas de los vértices

1voto

Nominal Animal Puntos 23

Supongamos que tienes un cuadrilátero en 3D, definido por cuatro vértices $$\begin{array}{l} \vec{v}_1 = ( x_1 , y_1 , z_1 ) \\ \vec{v}_2 = ( x_2 , y_2 , z_2 ) \\ \vec{v}_3 = ( x_3 , y_3 , z_3 ) \\ \vec{v}_4 = ( x_4 , y_4 , z_4 ) \end{array}$$

Si uno de los vértices no está en el mismo plano que los otros tres, el cuadrilátero es no plano, o cuadrilátero inclinado. Normalmente hay más de una forma de interpretar la superficie -o mejor dicho, qué vértice es el que no está en el mismo plano que los otros tres, ya que tres cualesquiera (que no sean colineales) pueden definir un plano-, por lo que necesitamos más información que las coordenadas de los vértices para tomar la decisión en estos casos.

Por ello, supondré que el cuadrilátero es plano, y que el vector normal unitario de la superficie del cuadrilátero es $\hat{n}$ .

Si calculamos cuatro productos vectoriales cruzados entre cada par de vectores de borde consecutivos, $$\begin{array}{l} \vec{c}_1 = \left ( \vec{v}_4 - \vec{v}_1 \right ) \times \left ( \vec{v}_2 - \vec{v}_1 \right ) \\ \vec{c}_2 = \left ( \vec{v}_1 - \vec{v}_2 \right ) \times \left ( \vec{v}_3 - \vec{v}_2 \right ) \\ \vec{c}_3 = \left ( \vec{v}_2 - \vec{v}_3 \right ) \times \left ( \vec{v}_4 - \vec{v}_3 \right ) \\ \vec{c}_4 = \left ( \vec{v}_3 - \vec{v}_4 \right ) \times \left ( \vec{v}_1 - \vec{v}_4 \right ) \end{array}$$ y el cuadrilátero es convexo, entonces todos los vectores del producto cruzado están en el mismo semiespacio que el vector normal de la superficie: $$\begin{cases} \vec{v}_1 \cdot \hat{n} \ge 0 \\ \vec{v}_2 \cdot \hat{n} \ge 0 \\ \vec{v}_3 \cdot \hat{n} \ge 0 \\ \vec{v}_4 \cdot \hat{n} \ge 0 \end{cases}$$

El caso de igualdad en lo anterior ocurre sólo cuando los vectores de aristas consecutivos son paralelos, por ejemplo si $\vec{v}_3 = \lambda \vec{v}_2$ , $\lambda \in \mathbb{R}$ .

De hecho, todos los productos cruzados deben ser paralelos a la normal unitaria de la superficie, e incluso se puede utilizar lo anterior para calcular la normal de la superficie: $$\hat{n} = \frac{\vec{v}_1}{\lVert\vec{v}_1\rVert} = \frac{\vec{v}_2}{\lVert\vec{v}_2\rVert} = \frac{\vec{v}_3}{\lVert\vec{v}_3\rVert} = \frac{\vec{v}_4}{\lVert\vec{v}_4\rVert}$$ En la práctica, es posible que desee utilizar el más largo para la estabilidad numérica.

Si encuentras que, por ejemplo, $$\vec{v}_2 \cdot \hat{n} \lt 0$$ significa el ángulo interior en el vértice $\vec{v}_2$ es superior a 180°.

0voto

En primer lugar, dado que no has aportado ninguna información sobre los datos que ya posees, voy a suponerlo:

  1. Conoce los valores de los otros 3 ángulos. En este caso, la condición de prueba es fácil de resolver: $$ \text{Consider a quadrilateral ABCD, whose 4 angles are } \angle A, \angle B, \angle C \text{ and } \angle D. \\\text{If }\angle A+\angle B+\angle C=180^\circ,\text{then } \angle D=180^\circ $$
  2. Conoce las coordenadas de los 4 vértices. En este caso, la condición de prueba se satisface si: $$ \text{Consider a quadrilateral ABCD, with the coordinates of its 4 points as }\\A(x_a,y_a,z_a), B(x_b,y_b,z_b), C(x_c,y_c,z_c), \text{and } D(x_d,y_d,z_d). \\\text{Use the distance formula to calculate AB, BC, CA, AD, diagonals AC and BD.}\\\text{Now, if any two sides add up to a diagonal, you have the angle between those 2 sides as }180^\circ\\ \text{For your information, the distance formula is}\\\bbox[5px,border:2px solid red] {D(P_1,P_2)=\sqrt {(x_2-x_1)^2+(y_2-y_1)^2+(z_2-z_1)^2},}\\\text{where } P_1=(x_1,y_1,z_1), \text{and }P_2=(x_2,y_2,z_2) $$

Espero que esto responda a su pregunta, y le sugiero que si no ha respondido a su pregunta, diga claramente qué datos se le facilitan.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X