|
Плоскость задана тремя точками, прямая( или отрезок) начальной и конечными точками.
Очевидно, эта задача, как и многие подобные ей, может быть решена путем составления системы. Хотелось бы предложить более геометричный метод, который гораздо удобней в большинстве случаев.
Будем обозначать A,B,C - точки плоскости, X,Y - точки прямой(концы отрезка), SP - скалярное произведение, VP - векторное произведение. O - искомое множество точек пересечения
N = VP ( B - A, C - A )
N = N / | N | - нормаль к плоскости // в принципе это можно и не делать
V = A - X
// расстояние до плоскости по нормали
d = SP ( N, V )
W = Y - X
// приближение к плоскости по нормали при прохождении отрезка
e = SP ( N, W )
if( e!=0 )
O = X + W * d/e; // одна точка
else if( d==0)
O =X + W * (anything) // прямая принадлежит плоскости
else
O = empty; // прямая параллельна плоскости
Если хочешь быть уверен, что плоскость пересекает не только прямая, но и отрезок, можно проверить условие SP ( X - O, Y - O ) <=0
|