Проецирование точки на ту же плоскость, что и полигон - PullRequest
3 голосов
/ 17 января 2012

Мне трудно понять, как это сделать. У меня есть многоугольник, определяемый тремя точками. У меня тоже есть точка где-то в космосе. Я хочу переместить точку где-нибудь в пространстве, чтобы быть в той же плоскости, что и многоугольник. Из того, что я понимаю, хорошо известно, как это сделать. Тем не менее, я не очень хорошо знаю.

Я не могу найти никаких простых алгоритмов или убедительных объяснений того, как это делается.

Я смотрю на это: http://www.odeion.org/pythagoras/pythag3d.html

Но это даст мне расстояния, а не точки вершин. Я вижу, как это было бы полезно, если бы полигон был ограничен 2d, но в моем случае он может иметь любую ориентацию.

К сожалению, моя математика довольно слаба, но я более чем готов учиться.

1 Ответ

10 голосов
/ 17 января 2012

Первый концептуальный шаг, который будет полезен, - это иметь способ определить, лежит ли точка на той же плоскости, что и три точки из вашего многоугольника, которые описывают плоскость.Один из подходов к этому - вычислить нормальный вектор для плоскости - назовите его n - и определите плоскость, используя n и одну из трех точек (назовите эту точку r 0 ).

Вычисление вектора нормали для плоскости можно выполнить несколькими способами (см. здесь ).В этой ситуации наиболее удобным подходом является получение перекрестного произведения между двумя векторами на плоскости (найдите два вектора, используя точки из определяющего многоугольника).

Как только вы узнаете n Затем вы можете проверить, лежит ли точка r в плоскости с точечным произведением между n и вектором ( r 0 -* +1025 * г ).См. здесь для более подробного объяснения.

Затем можно использовать ортогональную проекцию на любую точку, чтобы получить новую точку на плоскости.

Пример

Допустим, у меня есть три очка:

  • p 1 : [1, 1, 1]
  • p 2 : [1,5, 6, 3]
  • p 3 : [2, -1, 5].

Давайте сначала создадим вектор, нормальный к плоскости, созданной этими точками.Пусть

  • v 1 = p 1 - p 2 = [-0,5, -5, -2]
  • v 2 = p 1 - p 3 = [-1, 2, -4].

Тогда нормальный вектор этих двух равен

  • n = v 1 x v 2 = [24, 0, -6].

Для удобства давайте нормализуем n , поэтому теперь n = [0,9701425, 0, -0,24253563].

Сейчасмы определяем плоскость как n и пусть r 0 = p 1 .

Давайте введем новую точку, r , которая не находится на плоскости (вы можете проверить, взяв точечное произведение n и ( r 0 - r ):

  • r = [4, 4, 4]

One way to "передвиньте « r к плоскости», чтобы «сдвинуть» ее вниз по нормальному вектору доэто на плоскости (это ортогональная проекция).Это делается путем определения, сколько из n находится в векторе v 3 = ( r 0 - r ) (называется скалярная проекция ).Скалярная проекция в этом случае дает новый вектор v 3m = [-0,88235294, -3, -3,52941176].Это вычисляется как v 3 - n * точка ( n , v 3 ).Вы можете проверить, что это в плоскости, потому что это ортогонально n .

Теперь мы можем восстановить точку:

  • r m = r 0 - v 3m = [1.88235294, 4, 4.52941176].

Вы можете убедиться, что эта точка действительно находится на плоскости:

  • точка ( r 0 - r м, n ) = 0.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...