2014-11-13 6 views
0

У меня есть следующая проблема, которую я не могу решить, даже после долгого поиска в Интернете.Рэй - пересечение плоскости

Как рассчитывается пересечение плоскости в луче?

Плоскость описывается четырьмя точками:

A (ax, ay, 0) 
B (bx, by, 0) 
C (cx, cy, 0) 
D (dx, dy, 0) 

Ray есть:

Vector3f origin; 
Vector3f direction; 

А теперь я хочу написать метод для проверки ГИТ. Может ли кто-нибудь показать мне решение?

public Boolean checkHit(Ray myRay){ 
. 
. 
.  
} 

Благодарит

+0

Вы можете найти ответ на свой вопрос здесь: Http: // stackoverflow.com/questions/5666222/3d-line-plane-intersection – SlySherZ

+0

@SlySherZ Спасибо за ваш ответ (ссылка, которую я видел), но я этого не понимаю, и я не могу обратиться к моей проблеме. – stoudrae

+0

Вы знаете, что три точки определяют плоскость, а не четыре. – ja72

ответ

0

Плоскости может быть определены с помощью блока вектора нормали (nx,ny,nz) и скалярного расстояния от начала координат d таким образом, что уравнение плоскости nx*x+ny*y+nz*z=d. Вы должны получить самолет от 3 баллов до этого формата, чтобы продолжить. Если вы не знаете, как вы можете найти найти самолет из трех пунктов.

Теперь линия может быть задана в направлении единичного вектора (ex,ey,ez) и некоторой точке вдоль линии (rx,ry,rz)

  1. Найти изделие s=(nx*ex+ny*ey+nz*ez). Если он равен нулю, то нет никакого пересечения
  2. Найти расстояние от пересечения до точки на линии t=(d-(nx*rx+ny*ry+nz*rz))/s
  3. Точка пересечения находится на c=(rx+ex*t, ry+ey*t, rz+ez*t)