Редкий случай: пересечение сегментов и точечных плоскостей c #

Я искал уже день и не мог найти помощи в том, что мне нужно.

Есть много предложений и решений относительно -lines- и -planes-, но немного о -segments- и -planes- В частности, ничего не говорится о плоскостях, определенных через нормаль и точку. общая точка отсчета для плоскости проходит через нормаль и расстояние, в то время как моя плоскость - это трехмерная точка и нормаль.

По сути, мне нужна помощь в понимании того, что мне нужно для определения пересечения на плоскости сегмента, образованного двумя точками.

Vector3 point1 = new Vector3 (-4,-5,-6);
Vector3 point2 = new Vector3 (5,3,2); 
                           //normal            //point
Plane plane1 = new plane ( new Vector3(0,0,1), new Vector3(4,2,1));

Vector3 intersection = ???

Определить, есть ли пересечение, относительно легко благодаря скалярному произведению и точечным расстояниям, но, несмотря на мои усилия, формула пересечения ускользает от меня, поскольку для определения плоскости «нормальное расстояние» и определения «нормальной, точечной» плоскости, как один, который у меня есть, учитывая, что результаты, которые я получаю, находятся не «на плоскости», а значительно впереди и позади нее.

Любая помощь приветствуется.

Спасибо.


person roamcel    schedule 04.02.2012    source источник


Ответы (1)


Вы можете преобразовать точку + нормаль в нормаль + расстояние

Пусть N - нормаль (нормированная на единицу длины). Расстояние d = -n.p (скалярное произведение на точку, которая у вас есть). См. Здесь http://mathworld.wolfram.com/Plane.html

Сегмент не сильно отличается от линии. Вы можете сделать простую вещь для уравнения пересечения линии и плоскости, а затем попытаться определить, принадлежит ли точка или набор точек пересечения плоскости также вашему сегменту. Возможно, есть более эффективный способ сделать это, но самый простой способ - просто добавить проверку, чтобы увидеть, содержит ли результат пересечения, который вы получаете с общей линией, сегмент.

person bendervader    schedule 24.02.2012
comment
Большое спасибо, я провел рефакторинг с момента появления вопроса, но преобразование точки в расстояние - полезная вещь, которую нужно знать :) - person roamcel; 24.02.2012