2016-06-26 5 views
1

Учитывая множество точек на поверхности полусферы, определенной плоскостью XZ в левше системы координат: enter image description hereПоворот вектора на основе нормальной

И дал вектор нормали к плоскости, которая определяет другую произвольную полусферу : enter image description here

Как определить матрицу вращения, которая позволяет мне преобразовать каждую точку (вектор) из первой полусферы в соответствующую точку во второй полусфере?

Если возможно, было бы полезно иметь матрицу вращения, которая использует сферические координаты N в качестве углов поворота, причем $ \ theta $ является полярным углом, который переходит от $ 0 $ в $ \ pi $ (интуитивно от Y до -Y) и $ \ phi $ являются азимутальным углом от $ 0 $ до $ 2 \ pi $ (от X обратно до X, проходящего через + Z, -X, -Z).

+0

Знаете ли вы, что существует бесконечное количество решений? – galop1n

+0

вам понадобится вектор касательной для уникального решения. если вы находитесь на сетке, возможно, вы можете выровнять касательную и бинагентную с направлениями u и v. –

+0

Что делать, если мне не нужно определенное решение, но одно правильное решение, независимо от того, какой? – Geoffrey91

ответ

0

Первым шагом для построения матрицы вращения является определение последовательности (3) вращения вокруг одной оси. В вашем случае с 2 углами будет достаточно 2 вращений (с phi и тета).

Я всегда отношусь к this structure from wikipedia Для использования фи и теты я могу ошибаться (по отношению к вашей конвенции), но я стараюсь быть ясно, как я могу могу быть

Моей личной последовательности: первым поворот вокруг оси Y угла phi в [0,2pi], который выровняет «старые» оси X и Z с «новыми», предполагая, что N параллелен Y. Затем поворот угла theta вокруг " new = уже повернутый "Z-ось для приведения" новой "оси Y вдоль N.

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

R_y = [cos(phi) 0 sin(phi); 0 1 0; -sin(phi) 0 cos(phi)] 
R_z = [cos(phi) -sin(phi) 0; sin(phi) cos(phi) 0; 0 0 1] 

Полный поворот от старой системы к новой является произведением двух матриц, запоминание которых один АМСВО первый

R = R_z*R_y 

на самом деле мы хотим превратить набор 3D координаты а в старой системе, так что:

b = R*a = R_z*R_y*a = R_z*(R_y*a) 

и вы получите новые координаты б

 Смежные вопросы

  • Нет связанных вопросов^_^