Знаковый угол в трехмерных векторах

Я считаю, что это чисто математический вопрос.

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

Я хочу рассчитать угол камеры по отношению к вектору на север. Есть ли простой способ вычислить окончательный знак угла? Я знаю, что angle = acos (dir dot north), но когда я его использую, угол фиксируется до [0,180] градусов. Есть ли способ узнать, смотрит ли камера на восток или нет?


person Andrei Krotkov    schedule 25.07.2009    source источник


Ответы (5)


Итак, N - северный вектор, F - прямой вектор, V - вектор от середины сферы к текущему местоположению камеры.

N крест V должен дать вам вектор, указывающий на восток (E). Затем, я думаю, вы просто хотите спроецировать (просто поставить точку, поскольку нас интересует только знак) F на E и проверить знак. Положительное означает, что он указывает на восток, ноль означает, что он указывает на север или юг, отрицательный означает, что он указывает на запад.

В зависимости от того, какой именно вопрос вы задаете к данным, вы можете возиться с ними, но знание того, как получить вектор, который означает «к востоку от того места, где я», должно помочь.

Это звучит правильно? Я немного заржавел с этим.

person CHaskell2    schedule 25.07.2009

Есть ли способ узнать, смотрит ли камера на восток или нет?

Да все просто. Просто отметьте соответствующий векторный компонент камеры. Например, в системе координат RH, когда Z находится вверху, если cameraVector.X> 0, он указывает на восток.

person Reed Copsey    schedule 25.07.2009
comment
Я бы хотел, чтобы все было так просто. Это произвольная система координат неспроста. Камера ориентирована на гигантскую сферу, и все, что я могу предположить, это то, что и направление, и северный вектор являются единичными векторами. - person Andrei Krotkov; 25.07.2009
comment
(Вектор вверх тоже произвольный) - person Andrei Krotkov; 25.07.2009
comment
Но - ваша система координат должна иметь какой-то тип мировой системы координат - все, что вам нужно сделать, это проверить вектор вашей камеры по отношению к мировой системе координат. Если вы знаете север и тип системы координат, вы также должны знать, в каком направлении находится восток ... - person Reed Copsey; 25.07.2009
comment
Но его может не интересовать внешняя система координат. Так же, как нас на Земле часто не интересует, как мы движемся через солнечную систему или относительно галактического центра. Похоже, что у него есть планета на севере на его сфере. Я почти уверен, что ответ сводится к паре перекрестных и точечных произведений, но без некоторых выборочных данных для проверки его системы отсчета это просто предположение. - person Nosredna; 25.07.2009

Когда вы изначально создаете сферу, почему бы не установить переменную, указывающую на север, чтобы вы могли сравнить направление рассматриваемого вектора с опорным вектором, который всегда указывает на север. Таким образом, если вы перемещаете камеру, может потребоваться корректировка вашего эталона, но это известная величина, и у вас все еще есть эталон для определения направления.

person James Black    schedule 25.07.2009

К сожалению, не использую вычисление выше. Один из способов - сделать проекцию вектора камеры на поверхность D-1, касательную к сфере, а затем изучить полученный вектор, чтобы увидеть, в какую сторону он указывает.

person caskey    schedule 25.07.2009

Не могли бы вы немного уточнить? Я думаю, вам просто нужно пересечь свой северный вектор с вашим прямым вектором и проверить z-компонент результирующего вектора. Но я допускаю, что могу неправильно понять вашу ситуацию.


В ПОРЯДКЕ. Просто перечитал все (все вопросы, ответы, комментарии) еще раз.

Я думаю, вы хотите пересечь вперед и на север, а затем расставить точки вектором, идущим от центра сферы к месту расположения камеры. Или что-то.

Как насчет некоторых примерных значений?

person Nosredna    schedule 25.07.2009