$\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. $$