Самый простой (и очень обобщенный) способ решить эту проблему - сказать, что
L1 + x*(L2 - L1) = (P1 + y*(P2 - P1)) + (P1 + z*(P3 - P1))
, что дает вам 3 уравнения в 3 переменных.Решите для x, y и z, а затем подставьте обратно в любое из исходных уравнений, чтобы получить ответ.Это может быть обобщено, чтобы делать сложные вещи, такие как поиск точки, которая является пересечением двух плоскостей в 4 измерениях.вектор, который находится под прямым углом к плоскости.Это означает, что плоскость может быть определена как набор точек P
, так что скалярное произведение P
и N
является скалярным произведением P1
и N
.Решение для x
такое, что (L1 + x*(L2 - L1)) dot N
является этой константой, дает вам одно уравнение в одной переменной, которое легко решить.Если вы собираетесь пересекать много линий с этой плоскостью, этот подход определенно стоит.
В явном виде это дает:
N = cross(P2-P1, P3 - P1)
Answer = L1 + (dot(N, P1 - L1) / dot(N, L2 - L1)) * (L2 - L1)
где
cross([x, y, z], [u, v, w]) = x*u + y*w + z*u - x*w - y*u - z*v
dot([x, y, z], [u, v, w]) = x*u + y*v + z*w
Обратите внимание, что этот трюк с перекрестным произведением только работает в 3-х измерениях и только для вашей конкретной задачи о плоскости и линии.