Предположим, вы хотите найти координаты любой точки на плоскости с точки зрения координат (u, v)...
Если точка [x0,y0,z0] лежит в плоскости, то мы знаем, что
dot([a,b,c],[x0,y0,z0]) = -d
Где точка — скалярное произведение двух векторов. Это просто переписывание уравнения плоскости.
Хитрость заключается в том, чтобы найти два вектора, которые охватывают плоское подпространство. Для этого выберем случайный вектор длины 3. Назовем его V0. Я назову вектор плоской нормали
N = [a,b,c]
Затем используйте векторное произведение вектора нормали N на V0.
V1 = cross(N,V0)
Этот вектор будет ортогонален вектору нормали, если только нам не очень повезло и N и V0 оказались коллинеарными. В этом случае просто выберите другой случайный вектор V0. Мы можем сказать, были ли два вектора коллинеарными, потому что тогда V1 будет вектором [0 0 0].
Итак, если V1 не является нулевым вектором, то разделите каждый элемент на норму V1. Норма вектора — это просто квадратный корень из суммы квадратов элементов.
V1 = V1/norm(V1)
Затем мы выбираем второй вектор V2, который ортогонален как N, так и V1. Опять же, векторное перекрестное произведение делает это тривиально. Нормализуйте этот вектор, чтобы он также имел единичную длину. (Поскольку теперь мы знаем, что V1 — вектор с единичной нормой, мы могли бы просто разделить на норму (N).)
V2 = cross(N,V1)
V2 = V2/norm(V2)
ЛЮБУЮ точку на плоскости теперь можно тривиально описать как функцию (u, v), как:
[x0,y0,z0] + u*V1 + v*V2
Например, когда (u,v) = (0,0), ясно, что мы получаем обратно [x0,y0,z0], поэтому мы можем думать об этой точке как о «начале» в координатах (u,v).
Точно так же мы можем делать такие вещи, как восстановление u и v из любой точки [x, y, z], которая, как известно, лежит на плоскости, или мы можем найти нормальную проекцию для точки, которая не находится на плоскости, спроецированной в эту плоскость. самолет.
person
Community
schedule
06.09.2013