2012-02-04 4 views
0

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

Есть много предложений и решений относительно -lines- и -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 = ??? 

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

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

Спасибо.

ответ

1

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

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

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

+0

Большое спасибо, я реорганизовал с вопроса, но смысл преобразования расстояния - полезная вещь, чтобы знать :) – roamcel