Первый концептуальный шаг, который будет полезен, - это иметь способ определить, лежит ли точка на той же плоскости, что и три точки из вашего многоугольника, которые описывают плоскость.Один из подходов к этому - вычислить нормальный вектор для плоскости - назовите его 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 ):
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.