2 votos

Encontrar el punto de intersección de 2 triángulos en 3d

Necesito saber cuándo se cruzan dos triángulos en un entorno 3D, dados los 3 puntos. Cualquier ayuda se agradece he estado atascado en esto durante mucho tiempo, ive se dice "Primer paso. Obtener las ecuaciones de los planos que contienen los triángulos. Segundo paso. Calcular la línea de intersección de estos planos. Tercer paso. Encuentra los puntos de intersección de esta recta con cada uno de estos triángulos. Si alguno de los dos falla ya has terminado, ya que los triángulos no pueden solaparse. Paso 4. Estos puntos de intersección definen un par de intervalos (uno para cada triángulo). Si los intervalos se solapan, los triángulos se solapan a lo largo de este intervalo de solapamiento. En caso contrario, no se solapan".

Puedo hacer el paso uno, y la mitad del paso dos y tres, tomé el producto cruzado de las normales para obtener la dirección de la línea de intersección pero no sé cómo encontrar otro punto en ella.

1voto

chaiwalla Puntos 1132

$\DeclareMathOperator{\ht}{ht}$ Aquí hay un algoritmo y fórmulas asociadas, bajo los supuestos de que los dos triángulos tienen un interior no vacío, es decir, vértices no colineales; ningún vértice de ninguno de los dos triángulos se encuentra en el plano del otro, en particular, los triángulos no son coplanares; y los triángulos son disjuntos o sus interiores se cruzan . Las notas entre paréntesis que aparecen a continuación indican cómo afectan estas suposiciones a la lógica del algoritmo.

Si $p = (p_{x}, p_{y}, p_{z})$ y $q = (q_{x}, q_{y}, q_{z})$ son vectores, sus productos punto y cruz vienen dados por las fórmulas $$ p \cdot q = p_{x} q_{x} + p_{y} q_{y} + p_{z} q_{z},\qquad p \times q = (p_{y} q_{z} - p_{z} q_{y}, p_{z} q_{x} - p_{x} q_{z}, p_{x} q_{y} - p_{y} q_{x}). $$

Denotemos los triángulos por $P$ y $Q$ sus respectivos vértices por $p_{1}$ , $p_{2}$ , $p_{3}$ y $q_{1}$ , $q_{2}$ , $q_{3}$ y que $$ n_{P} = (p_{2} - p_{1}) \times (p_{3} - p_{1}),\qquad n_{Q} = (q_{2} - q_{1}) \times (q_{3} - q_{1}) $$ sean los respectivos vectores normales a los planos que contienen los triángulos.

(Nota: Estamos asumiendo que estos vectores son distintos de cero, es decir, que ninguno de los triángulos tiene vértices colineales).

Calcular las "alturas" $$ \ht(p_{1}) = n_{Q} \cdot (p_{1} - q_{1}),\qquad \ht(p_{2}) = n_{Q} \cdot (p_{2} - q_{1}),\qquad \ht(p_{3}) = n_{Q} \cdot (p_{3} - q_{1}) $$ de los vértices $p_{i}$ con respecto al plano que contiene el $q_{i}$ . Si estos tres números son todos positivos o todos negativos, los triángulos no se cruzan (porque $P$ no cruza el plano que contiene $Q$ ). Si al menos uno es positivo y otro negativo, calcula las "alturas" $$ \ht(q_{1}) = n_{P} \cdot (q_{1} - p_{1}),\qquad \ht(q_{2}) = n_{P} \cdot (q_{2} - p_{1}),\qquad \ht(q_{3}) = n_{P} \cdot (q_{3} - p_{1}) $$ de los vértices $q_{i}$ con respecto al plano que contiene el $p_{i}$ . Si estos tres números son todos positivos o todos negativos, los triángulos no se cruzan (porque $Q$ no cruza el plano que contiene $P$ ).

(Notas: Si la "altura" de un vértice es cero, ese vértice se encuentra en el plano del otro triángulo. Si los tres si los vértices de un triángulo tienen altura cero, los triángulos son coplanares; si exactamente dos vértices tienen "altura" cero, ese triángulo tiene una arista situada en el plano del otro triángulo; si exactamente un vértice tiene altura cero, ese triángulo toca el plano del otro triángulo en un punto, o bien cruza el plano del otro triángulo. En cada caso, se requiere una prueba de intersección por separado).

Supongamos a partir de ahora que cada triángulo atraviesa el plano que contiene al otro, es decir, que dos de los números $\ht(p_{1})$ , $\ht(p_{2})$ , $\ht(p_{3})$ tienen el mismo signo y el tercero tiene signo contrario, y de forma similar para $\ht(q_{1})$ , $\ht(q_{2})$ , $\ht(q_{3})$ . Supongamos por definición que $\ht(p_{1})$ tiene signo contrario a $\ht(p_{2})$ y $\ht(p_{3})$ y que $\ht(q_{1})$ tiene signo contrario a $\ht(q_{2})$ y $\ht(q_{3})$ .

Los planos de los triángulos se cruzan en una línea $\ell$ (porque estamos suponiendo triángulos no coplanares), y los cuatro puntos $$ p_{1j} = p_{1} + \frac{\ht(p_{1})}{\ht(p_{1}) - \ht(p_{j})}(p_{j} - p_{1}),\qquad q_{1j} = q_{1} + \frac{\ht(q_{1})}{\ht(q_{1}) - \ht(q_{j})}(q_{j} - q_{1})\quad j = 2, 3, $$ mentir $\ell$ . Desde $\ell$ tiene un vector de dirección unitario $$ v = \frac{n_{P} \times n_{Q}}{\|n_{P} \times n_{Q}\|}, $$ cada punto $x$ de $\ell$ puede escribirse de forma única como $x = p_{12} + (tx)v$ con el escalar $tx$ definido por $$ tx = (x - p_{12}) \cdot v. $$ Claramente $tp_{12} = 0$ ; calcular los escalares $$ tp_{13} = (p_{13} - p_{12}) \cdot v,\qquad tq_{12} = (q_{12} - p_{12}) \cdot v,\qquad tq_{13} = (q_{13} - p_{12}) \cdot v, $$ y forman los intervalos reales $$ I_{P} = [pa, pb] = \bigl[\min(0, tp_{13}), \max(0, tp_{13})\bigr],\qquad I_{Q} = [qa, qb] = \bigl[\min(tq_{12}, tq_{13}), \max(tq_{12}, tq_{13})\bigr]. $$

Los triángulos $P$ y $Q$ se cruzan si y sólo si los intervalos $I_{P}$ y $I_{Q}$ se cruzan, si y sólo si $\max(pa, qa) < \min(pb, qb)$ en cuyo caso la intersección es el intervalo $$ [a, b] = \bigl[\max(pa, qa), \min(pb, qb)\bigr], $$ y los propios triángulos se intersecan en el intervalo con puntos extremos $$ p_{12} + av,\qquad p_{12} + bv. $$

0voto

David Quinn Puntos 7591

Si tienes las ecuaciones de los planos en forma cartesiana, para encontrar la línea de intersección tienes que resolverlas simultáneamente. Primero elimina una de las letras $x$ , $y$ o $z$ . Luego, de la única ecuación que queda, separa las letras de los lados opuestos de la ecuación y haz que ambos lados sean iguales a un parámetro, $\lambda$ digamos. Ahora todo lo que tienes que hacer es conseguir cada uno de $x$ , $y$ y $z$ en términos de $\lambda$ con lo que se tiene la ecuación de la línea de intersección de los planos.

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