Да, есть ... Вам нужно описать свой самолет его нормалью n
и любой точкой q
, принадлежащей плоскости. Нормаль легко сделать, просто преобразовав ваше уравнение в:
dot( n , (x,y,z) ) = D
, где n
- нормаль плоскости. q
необходимо вычислить, установив 2 координаты для чего угодно и вычислив 3-ю, однако, если ваша плоскость параллельна плоскости xy
, yz
или zx
, вам нужно выбрать координаты, которые меняются ... Итак выберите 2 абс. наименьших координаты в нормальном режиме, и все должно быть в порядке. для q
. Для простоты пусть x=z=0
...
У вас уже есть линия в векторной форме:
p(t) = p0 + t*dp
где p0
- начальная точка вашей строки, dp
- end_point-start_point
и t
- скалярный параметр в диапазоне t=<0.0,1.0>
, из которого вы можете использовать векторную математику, чтобы получить точку пересечения p
...
t = dot( q-p0 , dp )
p = p0 + t*dp
Однако вам нужно проверьте, находится ли точка внутри линии, поэтому:
t >= 0.0 AND t <= 1.0
Однако, если плоскость и линия параллельны (можно использовать любой из этих двух):
| dot( n , dp ) - |n|*|dp| | <= 1e-6
| cross( n , dp ) | <= 1e-6
Вы должны проверить результирующая точка действительно находится внутри плоскости, просто проверив
| dot ( n , q ) - D | <= 1e-6
и все ...