Что является и есть быстрый способ проверить, где в плоскости будет пересекаться моя линия, если я знаю, что плоскость всегда находится на одной оси z (поэтому ее нельзя повернуть), а также ее ширина / высота бесконечно? Кроме того, моя «линия» на самом деле не линия, а трехмерный вектор, поэтому «линия» может идти на бесконечное расстояние.
Вот код, который опирается на два пункта:
(p1 и p2 - начальная и конечная точки линии. plane_z = где находится плоскость)
k1 = -p2.z/(p1.z-p2.z-plane_z);
k2 = 1.0f-k1;
ix = k1*p1.x + k2*p2.x;
iy = k1*p1.y + k2*p2.y;
iz = plane_z; // where my plane lays
Другое решение, которое работает с вектором (я заставил его использовать две точки, как и в первом примере, «p2.x-p1.x» и т. Д. - векторное вычисление):
a = (plane_z-p1.z)/(p2.z-p1.z);
ix = p1.x + a*(p2.x-p1.x);
iy = p1.y + a*(p2.y-p1.y);
iz = plane_z;
Edit3: добавлено решение Орблинга, которое немного быстрее и не обязательно опирается на две точки.