Редкий случай: пересечение отрезков и точек на плоскости C#
Я искал один день, и не мог найти помощь по тому, что мне нужно.
Есть много предложений и решений относительно линий и плоскостей, но мало о сегментах и плоскостях. В частности, нет ничего относительно плоскостей, определенных через нормали и точки. общий ориентир для плоскости - через нормаль и расстояние, в то время как моя плоскость - это 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 ответ
Вы можете конвертировать точку + нормаль в нормальное + расстояние
Пусть N будет нормалью (нормализованной к единице длины). Расстояние d = -np (точка произведения с точкой у вас есть). Смотрите здесь http://mathworld.wolfram.com/Plane.html
Сегмент не сильно отличается от линии. Вы можете сделать основную вещь для уравнения пересечения линии и плоскости, а затем попытаться, если точка или набор точек, плоскости пересечения принадлежат также вашему сегменту. Возможно, существует более эффективный способ сделать это, но самый простой способ - просто добавить проверку, чтобы увидеть, содержит ли результат пересечения, который вы получаете с общей линией, сегмент.