Three.js Как получить плоскость из вектора и константы?

В three.js конструктор для Math Plane принимает 2 входа:

normal -- (Vector3) вектор нормали, определяющий плоскость, указывающую на начало координат

константа -- (плавающая) отрицательное расстояние от начала координат до плоскости вдоль вектора нормали

Может ли кто-нибудь предоставить иллюстрацию или объяснить, как это работает? Я могу понять, учитывая точку и нормаль, как построить плоскость или 3 копланарные точки, но не могу понять, как можно использовать вектор нормали и константу.


person 21217070AB14    schedule 29.07.2016    source источник


Ответы (1)


TL:DR?
Математика и линейная алгебра

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

Его также можно определить перпендикулярным (нормальным) вектором и константой того, насколько далеко от начала координат находится плоскость.

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

Объяснение математического расчета: если у нас есть вектор A и B, которые ортогональны (перпендикулярны), то их скалярное произведение равно 0. Таким образом, если мы используем этот принцип, мы можем фактически взять известный вектор X и найти 2 ортогональных вектора Y и Z, которые будут копланарными (из-за свойств ортогональности) путем обратного решения X (точка) Y = 0 и X (точка) Z = 0. Теперь у нас есть 2 копланарных вектора, чтобы сделать нашу плоскость, которую мы устанавливаем на расстоянии константы от источник

(подумайте, как у векторов есть начало и конец. Если копланарные векторы имеют общее начало, то у нас есть 3 точки: 2 конца и 1 начало, то есть 3 точки для создания плоскости.)

Математическая теория. Объяснение того, почему это работает:
Я не умею хорошо рисовать (без ручки и бумаги), но в основном думаю о векторе в трехмерном пространстве. Теперь подумай обо всех векторах, которые могут быть к нему перпендикулярны. По сути, это создает бесконечное количество перпендикулярных векторов, вращающихся по кругу перпендикулярно оригиналу, и если мы будем соединять их бесконечно, мы создадим плоскость.

Если у вас когда-нибудь будет возможность пройти курс линейной алгебры, я очень рекомендую это сделать. Это чрезвычайно интересно, очень связано с компьютерной графикой и объясняет много математики 3D-пространства, которую использует THREEjs.

person Rush2112    schedule 29.07.2016
comment
Это уже очень полезно, спасибо. Таким образом, константа - это расстояние от начала координат, но в направлении заданного вектора, перпендикулярного вычисляемой плоскости? - person 21217070AB14; 01.08.2016
comment
Я полагаю, что в документации указано отрицательное расстояние, но это простая проверка, просто имея нормальный вектор в +y (0,1,0), а затем имея константу 5. Также добавьте что-нибудь к началу @ (0,0,0 ), чтобы увидеть, заканчивается ли плоскость выше или ниже - person Rush2112; 01.08.2016