Почему радианы предпочтительнее градусов в разработке игр?


39

Я искал определение радианов и обнаружил, что математики предпочитают их, потому что они получены из числа пи вместо того, чтобы быть совершенно произвольными, как градусы.

Однако я не нашел убедительной причины использовать их при разработке игр, возможно, из-за моего полного отсутствия математического понимания. Я знаю, что большинство функций sin / cos / tan в языках являются радианами, но кто-то также может создавать библиотечные функции в градусах (и избегать ошибок округления при использовании pi).

Я не хочу, чтобы это был самоуверенный опрос, я просто хотел бы услышать от людей, которые занимались разработкой игр (и связанными с ними математическими исследованиями), где радианы предлагают превосходный опыт над градусами, в отличие от «Мы используем радианы потому что мы всегда использовали их ", просто чтобы помочь мне (и, возможно, другим) понять, для чего они хороши.


2
Один ответ заключается в том, что они быстрее. Вам не нужно переводить градусы в радианы, прежде чем использовать их в таких функциях, как грех. Я должен быть более конкретным и сказать, что одним из методов вычисления sin (x) является использование разложения Тейлора, и для расширения необходимо использовать «x» в радианах.
user3728501 24.12.13

Ответы:


49

Радианы используются в математике, потому что

  1. Они измеряют длину дуги на окружности, то есть дуга угла тета на окружности радиуса r является просто r * theta (в отличие от pi / 180 * r * theta).
  2. Когда тригонометрические функции определены в радианах, они подчиняются более простым отношениям между собой, например, косинус является производной от синуса или sin (x) ~ = x для малых x Если определить это в градусах, производная синуса будет равна pi / 180 * косинус, и мы получим sin (x) ~ = pi / 180 * x для малого x.

Дело не в том, что математики просто как пи. Радианы на самом деле являются более естественным выбором угловых измерений, чем градусов, по вышеуказанным причинам. Это угловая мера, в которой исчезают такие факторы, как пи / 180.

Итак, ИМО, вопрос не в том, «зачем использовать радианы», а «почему бы не использовать радианы». Другими словами, нет необходимости использовать радианы; они являются выбором угла по умолчанию . Нужна причина использовать градусы. Например, можно выбрать отображение углов в градусах в пользовательском интерфейсе приложения, поскольку они более знакомы многим людям (особенно художникам). Однако лично я привык думать об углах с точки зрения радианов, а не градусов.

У меня нет конкретных примеров gamedev, чтобы дать вам, потому что это на самом деле не проблема gamedev, а математическая, и она будет такой же в любой области, где используется математика.

(Между прочим, при использовании числа pi больше нет «ошибок округления», чем при использовании градусов ... углы всегда должны быть действительными числами, а не целыми числами, иначе как вы будете представлять угол в полградуса? :) )


4
Согласен с вышесказанным. Добавлю, что однажды я увидел библиотеку игр, в которой использовался собственный стандарт, основанный на 256-х кругах. Казалось, причина в том, что их триггерные функции использовали таблицу поиска с 256 записями и интерполировали между ними. Если вы не делаете этого, но вычисляете sin / cos / tan по их расширениям серий или используете инструкции FSIN / FCOS для FPU (наиболее типично), то оба будут ожидать ввода в радианах - поэтому вы сохраняете преобразование, сохраняя это в радианах по всему.
DMGregory

11
«почему бы не использовать радианы» - я готов поспорить, что единственный хороший ответ - «потому что домашняя работа 4-го класса будет кошмаром с радианами», что, вероятно, единственная причина, по которой любой из нас когда-либо слышал о градусах. :)
Шон Миддледич

5
@SeanMiddleditch Классы 4-го класса должны мигрировать в Тау . Тау - это радиальная версия 360. Она упрощает математику, и профессионалы также должны начать ее применять.
Val

2
256-ые числа круга или 16384-ые числа круга означают, что вы можете использовать беззнаковые байты или 16-разрядные числа соответственно, а переполнения / недостаточные значения сложения / вычитания делают правильную вещь. С радианами вы, вероятно, в конечном итоге будете использовать плавающую точку, что означает, что вы получите больше точности, чем ближе ваш угол к нулю, и меньше, когда он уходит, что в большинстве случаев бесполезно / глупо.
2013 года

2
@Val: Тау не решает те же проблемы, что и дипломы. Степени облегчают измерение относительно небольших углов с целыми числами. Это важно, когда вы пытаетесь преподавать раннюю геометрию, когда ученики все еще делают все вручную и не очень удобны с дробями. Подумайте об обычных задачах, связанных с «углом стрелки часов», которые задают учащиеся, и о том, как они четко отображают градусы, но не радианы Пи / Тау. Это похоже на причину, по которой степени в какой-то момент были популярны в играх: использование справочной таблицы степеней было проще / быстрее (тогда) и давало «достаточно хорошее» разрешение для их нужд.
Шон Мидлдич

4

Ответ Натана очень конкретный. Я хотел бы предоставить более общий вид:

Наиболее сложная математическая концепция, которая изначально реализована в большинстве модулей обработки, - это числа с плавающей запятой в качестве моделей для поля действительных чисел ℝ. Визуальная геометрия основана на трехмерном реальном векторном пространстве ℝ³. Координаты являются действительными числами. Геометрические величины основаны на длине , которая является реальным кратным единице.

Из-за этой базы в действительных числах и длинах практично также моделировать углы действительными числами соответственно. длины. Радианы - это длина дуги единичного круга с заданным углом. Таким образом, это модель угла, наиболее совместимая со всеми этими другими единицами, основанная на действительных числах, соответственно. длины. Например, приближение sin x ~ x для малых значений x - это приближение y-координаты точки на единичной окружности дугой от оси x к этой точке.

Не следует забывать, что угол - это не длина. Это одна из 4 частей плоскости, созданной двумя пересекающимися прямыми. Его количество ограничено симметрией плоскостей в ℝ³ и евклидовой метрикой.

Более естественно моделировать угол с помощью полуоткрытого интервала [0,1) (или (0,1]), склеенного вместе в его конечных точках, учитывая значение угла как часть полного поворота. 360 оборота. (Кстати, теоретически, это лучший выбор, чем десятичная система, используемая для действительных чисел.)


0

Хотя я также использую радианы, по всем указанным причинам есть хотя бы одна веская причина, по которой предпочтительны градусы: точность и накопление ошибок. Поворот на полный круг 1 градус за раз является точным. Вращаться по полному кругу 2PI / 360 радиан за раз нет. Выполнение поворота на 90 градусов 4 раза на пиксельной сетке вернет вас туда, откуда вы начали. Выполнение вращения 2PI / 4 радиан на пиксельной сетке 4 раза не выполняется.


Проверяя это опытным путем, после четырех поворотов на 90 градусов с одинарным приращением с плавающей точкой в ​​радианах, я обнаружил, что общая ошибка составляет 1,75E-7 (менее 1 части на 5 миллионов). В пиксельной сетке радиус вращающегося объекта / рамки должен быть в миллионах пикселей, прежде чем вы почувствуете 1 пиксель ошибки на внешнем крае (точка более 0,5 линейных пикселей от того места, где он должен быть). Другими словами, потеря точности вряд ли будет проблемой на практике (особенно если вы используете удвоения).
DMGregory

С числовой точки зрения вы правы, но с визуальной точки зрения, если ОДИН пиксель от жесткого края доходит до неправильного значения, вы облажались.
ddyer

См. Примечание «миллионы пикселей» выше. Для спрайтов типичных размеров (скажем, порядка 2048 пикселей в ширину или меньше) ошибка будет существенно меньше, чем половина пикселя, и поэтому будет стерта внутренним округлением самой сетки пикселей. Кроме того, обратите внимание, что вращение на 360/7 градусов одновременно накапливает те же самые ошибки. Вы можете устранить ошибки округления в обеих системах, придерживаясь приращений, которые представляются в виде суммы степеней двух (с некоторым ограничением диапазона экспонент), но, вероятно, проще перейти на код, который не накапливает много маленьких приращений.
DMGregory

@DMGregory Это было то, что я имел в виду с "свойственной ошибкой округления с Пи". Другой вариант состоит в том, чтобы не использовать одинарные / двойные числа, а представлять числа как факторы (т.е. представлять 2 * pi / 360 не как результат вычисления, а как эту формулу) и вычислять результат только при необходимости. Я не знаю, делают ли это какие-либо «настоящие» программы, но такие вещи, как Mathematica, всегда могут представлять «1/3» как «1/3» вместо «0.333333 .....». Но после просмотра чисел, я думаю, вы правы, ошибка округления есть, но незначительная
Майкл Стум

2
Угол в 1 градус может быть легче точно представлен в градусах, чем в радианах, вращение объекта в любом случае не является точным, поскольку требует тригонометрических функций. cos 1 ° подвержен ошибкам округления так же, как pi / 180 .
отмечает Томас

-3

Давайте согласимся, что лучше выбрать любое и придерживаться его, чем использовать два определения и немного угадать, какое из них необходимо для текущей функции. Тогда использование длины дуги более естественно для реализации sin и cos, что может быть причиной того, что cmath реализует это таким образом. Так как игры часто пишутся на C ++ или C, а уже реализованы функции sin и cos, имеет смысл придерживаться этого определения.

[Винт вы наследие OpenGL]


Это не совсем ответ на вопрос. Вы хотели прокомментировать другой ответ?
Джош
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.