Редкий случай: пересечение отрезков и точек на плоскости c # - PullRequest
0 голосов
/ 05 февраля 2012

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

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

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

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 = ???

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

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

Спасибо.

1 Ответ

1 голос
/ 24 февраля 2012

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

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

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

...