Su intuición de la configuración de las dos ecuaciones iguales es correcto y que es la forma de resolver para la intersección. Voy a ofrecer una explicación completa, con ejemplos de código.
Una forma común de representar un avión $\mathbf{P}$ es en punto-forma normal, $\mathbf{\vec{n}} \cdot (X-Y)=0$ donde $\mathbf{\vec{n}}$ es la normal del plano y tanto $X$ $Y$ son puntos que se encuentran en el plano. Esto puede ser reescrita en la constante de forma normal mediante la distribución del producto escalar y reordenando términos para obtener: $\mathbf{\vec{n}} \cdot X = d$ donde $d = \mathbf{\vec{n}} \cdot Y$ que es igual a la distancia desde el origen al $\mathbf{\vec{n}}$ es la unidad de longitud. A continuación es una simple estructura de datos que puede utilizar para representar un plano, y la firma de un constructor que se compute el plano de tres puntos en $\mathbb{R^3}$. La aplicación se deja como ejercicio para el lector ;).
struct Plane {
Vector3 n; // normal
float d; // distance from origin
Plane(); // default constructor
Plane(Vector3 a, Vector3 b, Vector3 c); // plane from 3 points
Vector3 intersectLine(Vector3 a, Vector3 b); // we'll get to this later
};
Dados dos puntos, $A$$B$, una línea puede ser representado en forma paramétrica mediante la adición de un punto en el vector formado por los dos puntos, escalado por un parámetro de $t$. En símbolos, $L(t) = A + t(B-A)$. El uso de su intuición, podemos insertar esta ecuación (cuya salida es un punto), en $X$ en la constante de la normal del plano de la representación: $\mathbf{\vec{n}} \cdot [A + t(B-A)] = d$. Queremos saber el número de copias de $(B-A)$ tenemos que añadir a $A$ para llegar a un punto que se encuentra dentro del avión, en otras palabras, queremos resolver para $t$. Haciendo algunas de fantasía álgebra, obtenemos: $t = \frac{d-\mathbf{\vec{n}} \cdot A}{\mathbf{\vec{n}} \cdot (B-A)}$. Podemos (finalmente) el palo de esta expresión para $t$ nuevo en la ecuación para nuestra línea para obtener: $I = A+\frac{d - (\mathbf{\vec{n}} \cdot A)}{\mathbf{\vec{n}} \cdot (B-A)}(B-A).$
Armados con esta ecuación, podemos ahora aplicar una buena función que le dirá lo que queremos saber:
Vector3 Plane::intersectLine(Vector3 a, Vector3 b) {
Vector3 ba = b-a;
float nDotA = Vector3::dotProduct(n, a);
float nDotBA = Vector3::dotProduct(n, ba);
return a + (((d - nDotA)/nDotBA) * ba);
}
Esperemos que esto funciona para usted, y espero que no me fudge cualquiera de los detalles! Si usted planea hacer un montón de este tipo de computación geométrica vale la pena recoger Christer Ericson del tiempo Real de la Detección de Colisiones, que es una excelente fuente de referencia para este tipo de cosas. Alternativamente, usted puede engancharse algunos ya construidos clases de algo como OGRE3D, si no está particularmente interesado en la creación de su propio.