Почему OpenGL использует градусы вместо радианов?
Вопрос
Разработчики OpenGL никогда не боялись математики, а знание линейной алгебры необходимо для всех приложений OpenGL, кроме самых простых.Я думаю, можно с уверенностью предположить, что программисты OpenGL знакомы с углами в радианах.
Математически радианы во всех отношениях более элегантны, чем градусы.Они также имеют практические преимущества:
- Стандартная библиотека C использует радианы.
- Практически любая другая библиотека также использует радианы.
- Радианы более удобны в некоторых вычислениях, например.длина дуги окружности.
Почему же тогда разработчики OpenGL решили указать такие функции, как glRotatef
и gluPerspective
использовать градусы?
(Я знаю, что это не имеет практического значения и в любом случае не изменится.Мне просто любопытно, и я не смог найти ответ на OpenGL.org.)
Решение
Поскольку обычные люди больше привыкли к вычислению степеней, OpenGL предназначен для простого использования.Обратите внимание, что все функции, работающие со степенями, являются функциями «высокого уровня».
Для самого OpenGL нет разницы, получает ли он радианы или градусы — они в любом случае внутренне преобразуются в матрицы преобразования, поэтому использование того или другого не дает никакой вычислительной выгоды.
Так зачем же усложнять жизнь людям, если можно позволить им использовать ученые степени?Любой, кто серьезно занимается кодированием в OpenGL, в любом случае предоставит свои собственные матрицы, рассчитанные из кватернионов.
В том же духе мы могли бы спросить, почему glRotatef
и gluPerspective
в любом случае, поскольку матрицы более элегантны во всех отношениях и обеспечивают более высокий уровень контроля.
По пунктам:
- Элегантность – матрицы более элегантны во всех аспектах
- Библиотека C. Библиотека C использует их по вычислительным причинам, функции GL, принимающие углы, не предназначены для использования для тяжелых вычислительных задач (непосредственное использование матриц), и, вероятно, в любом случае реализация имеет таблицу поиска для градусов.
- любая другая библиотека - следующая библиотека C по тем же причинам, что и Clib - также это неверно - многие библиотеки C++ допускают выбор, некоторые используют последнюю
- Удобство вычислений - не имеет значения - внутреннее представление - это матрицы, вычисления, вероятно, выполняются с использованием справочных таблиц, если это необходимо для эффективности - прямых операций с углами нет, поэтому представление не имеет значения.
Также обратите внимание:все функции, использующие степени, в текущем стандарте (3.2) устарели. glRotatef
это только функция, принимающая градусы, или, по сути, угол вообще. клей это служебная библиотека, не предназначенная для интенсивного развертывания, поэтому она ориентирована на удобочитаемость и gluPerspective(... 60.0f..)
гораздо более читаем и «стандартен» с точки зрения обеспечения поля зрения, чем gluPerspective( ... M_PI / 3.0f ... )
было бы.
Заключительные замечания:
Другие советы
Я бы сказал, что, поскольку OpenGL был разработан с учетом потребностей конечного пользователя, градусы использовались, потому что можно указать важные углы (90
, 180
, 270
...) только с целыми числами, поэтому нет необходимости в плавающей запятой GL_PI
постоянный.
Я думаю, это потому, что вы должны иметь возможность получить точную матрицу вращения для определенных углов, например 90 или 180 градусов.Как уже указывали другие люди, если вы используете число Пи/2 вместо 90 градусов, ошибки округления могут привести к матрице преобразования, которая почти осуществляет поворот на 90 градусов.
Код легче читать, он упрощает обучение новичкам и позволяет быстро взломать.
Как уже говорилось - степени ИМЕЮТ преимущество - люди лучше привыкли к степеням, сравните:0.78539816339744830961566084581988...до 45 градусов например :/.
Для более продвинутого использования OpenGL вы в любом случае предоставляете свои собственные матрицы.
Что ж, в большинстве случаев вы используете математическую библиотеку для преобразования радиан в градусы и обратно в радианы.Я согласен с большей частью того, что было сказано предыдущими замечательными постерами.
Это более читабельно для человека.