Solución general para intersección de líneas 3D

He estado tratando de obtener el punto de intersección de 2 líneas 3D (en general, para poder codificar un algoritmo) usando las siguientes ecuaciones:

(1) X 0 + k 0 a 0 = X 1 + k 1 a 1

(2) y 0 + k 0 b 0 = y 1 + k 1 b 1

(3) z 0 + k 0 C 0 = z 1 + k 1 C 1

dónde X , y , z son coordenadas de puntos y a , b , C coordenadas vectoriales direccionales.

Creo que la idea es conseguir k 0 o k 1 para que pueda obtener el punto de la línea ( yo 0 si uso k 0 , yo 1 de lo contrario) usando su ecuación paramétrica.

He hecho algunas pruebas y si uso ecuaciones ( 1 ) y ( 2 ) Obtengo diferentes resultados que si uso ( 2 ) y ( 3 ) , así que creo que estoy haciendo algo mal...

De ( 1 ) :

(4) k 0 = X 1 X 0 + k 1 a 1 a 0

de ( 2 ) :

(5) k 1 = y 0 y 1 + k 0 b 0 b 1

de ( 4 ) & ( 5 ) :

(6) k 1 = a 0 ( y 0 y 1 ) + b 0 ( X 1 X 0 ) a 0 b 1 b 0 a 1

Y de ( 1 ) & ( 3 ) :

(7) k 1 = a 0 ( z 0 z 1 ) + C 0 ( X 1 X 0 ) a 0 C 1 C 0 a 1

no sé por qué, pero ( 6 ) & ( 7 ) obtener diferentes resultados para k 1 ...

No estoy controlando divisiones por cero porque C# devuelve NaN ( 0 / 0 ), -Infinidad ( X / 0 ), +Infinito ( X / 0 ) cuando sea necesario, así que asumo que si no hay intersección habrá alguna división por cero o algo así, ¿no?

¿Alguna idea de lo que está mal?

¡¡Muchas gracias!!

Respuestas (1)

El problema es simplemente que si tomas 2 líneas en un espacio 3D, por lo general no se cruzan (¡piensa en ello!). Así que es perfectamente normal obtener resultados diferentes para k 1 : simplemente significa que sus líneas no son coplanares (solo obtendrá un error de división por cero si son paralelas).

¡Eso lo explica todo! Pero eso me hace preguntarme cómo compruebo si son coplanares o no...