Преобразовать углы Эйлера в полряные координаты и обратно

117
05 июня 2021, 23:10

Есть задача рисовать объекты на земной поверности с помощью Qt5 и OpenGL. При этом систему координат, в которой находятся эти объекты можно описать так:

  • плоскость OXY совпадает с плоскостью земной поверхности;
  • ось OZ направлена вверх от земной поверхности;
  • направление оси OY совпадает с направлением на "север".

Направление линии визирования объекта задаётся углом азимута θ∈(0,360°) и углом места ψ∈(0,90°). Угол азимута отсчитывается от оси OY против часовой стрелки, если смотреть вдоль положительного направления оси OZ. Угол места отсчитывается от плоскости OXY. Логика самой программы работает в углах Эйлера и кватернионах, однако пользователю надо всё показывать в углах как описано выше. Таким образом, углы Эйлера перевожу в полярные координаты:

QVector2D CoordinateSystemGround::toPolar(const QVector3D& euler) const {
    float z = euler.z();
    if(z < 0.0f)
        z += 360.0f;
    return QVector2D(z, 90.0f - euler.x());
}

С этим кодом вроде проблем нет. А вот с переводом из полярных координат в углы Эйлера ничего не получается:

QVector3D CoordinateSystemGround::fromPolar(const QVector2D& polar) const {
    float x = qDegreesToRadians(90.0f - polar.y());
    float z = qDegreesToRadians(polar.x());
    float y = qAtan(qTan(x) * qSin(z));
    y = qRadiansToDegrees(y);
    return QVector3D(90.0f - polar.y(), y, polar.x());
} 

Вроде вращение начинается вокруг оси Z, но потом куда-то уходит в бок. Подскажите, куда копать?

READ ALSO
Что такое recv vs recvfrom и send vs sendto?

Что такое recv vs recvfrom и send vs sendto?

send, sendto, и sendmsg используются для пересылки сообщений в другой сокетsend можно использовать, только если сокет находится в состоянии соединения,...

100
Сортировка в Jquery по условию

Сортировка в Jquery по условию

Есть выпадающий список, в некоторых данных списка есть на конце слова (не действует в 2019)

129
Ошибка при подключении к базе Postgress

Ошибка при подключении к базе Postgress

В моем проекте мне нужно использовать Postgres базу, до этого момента небыло опыта работы с такой базой, настроил субд на компе все работаетПробую...

90
Unity c#, массив со скриптами

Unity c#, массив со скриптами

Всем приветУ меня есть, допустим, 5 скриптов (все кроме одного отключены) и мне нужно, чтобы на колесико мыши отключался рабочий скрипт и включался...

172