Чому в розробці гри віддають перевагу радіанам над градусами?


39

Я шукав визначення радіанів і з'ясував, що математики віддають перевагу їм, оскільки вони походять від pi, а не зовсім довільні, як градуси.

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

Я не хочу, щоб це опитування було впевненим, я просто хотів би почути від людей, які займалися розробкою ігор (і пов'язаними з ними математичними дослідженнями), коли радіани пропонують чудовий досвід на градуси, на відміну від "Ми використовуємо радіани тому що ми завжди їх використовували ", просто заради того, щоб допомогти мені (і, можливо, іншим) зрозуміти, для чого вони хороші.


2
Одна відповідь - вони швидші. Вам не доведеться приховувати градуси до радіанів, перш ніж використовувати їх у таких функціях, як гріх. Я повинен бути більш конкретним і сказати, що в одному методі обчислення sin (x) використовується розширення Тейлора - і "x" має бути в радіанах для розширення.
користувач3728501

Відповіді:


49

Радіани використовуються в математиці, оскільки

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

Справа не в тому, що математики люблять пі. Радіани насправді є більш природним вибором міри кута, ніж градуси, з вищезазначених причин. Вони є мірою кута, при якій такі фактори, як pi / 180, зникають.

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

У мене немає якихось конкретних прикладів gamedev, щоб навести вас, тому що це насправді не проблема gamedev, а математична, і це було б те саме в будь-якій галузі, яка використовує математику.

(До речі, немає більше "притаманних помилок округлення при використанні pi", ніж при використанні градусів ... кути завжди повинні бути дійсними числами, а не цілими числами, інакше як ви збираєтесь представляти кут у пів градуса? :) )


4
Згоден з вищесказаним. Додам, що колись я бачив ігрову бібліотеку, яка використовувала власний стандарт, заснований на 256-й окружності кола. Причиною здавалося, що їх триггерні функції використовували таблицю пошуку з 256 записами та інтерполяцію між ними. Якщо ви цього не робите, але обчислюєте sin / cos / tan з розширення їх серії або використовуєте інструкції FSIN / FCOS на FPU (найбільш типово), вони обоє очікують введення в радіанах - тому ви економите перетворення, зберігаючи він у радіанах на всьому протязі.
DMGregory

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

5
@SeanMiddleditch 4-х класів повинні перейти до Тау . Тау - радіанна версія 360. Це впорядковує математику, і професіонали також повинні почати її приймати.
Валь

2
256th кола або 16384ths кола означає, що ви можете використовувати непідписані байти або 16-бітні числа відповідно, а переповнення / підтоки додавання / віднімання роблять правильно. З радіанами ви, ймовірно, використовуєте плаваючу крапку, а це означає, що ви отримуєте більш точну, чим ближче ваш кут до нуля, і менше, оскільки він віддаляється, що є марним / нерозумним більшу частину часу.
rjmunro

2
@Val: Тау не вирішує тих самих проблем, що й градуси. Градуси дозволяють легко виміряти відносно невеликі кути з цілими числами. Це важливо при спробі навчити ранню геометрію, коли учні все ще роблять вручну і не дуже зручні з дробами. Розглянемо звичайні проблеми "кута руки з годинником", які задаються студентам, і як вони чітко відображають градуси, але не радіани Pi / Tau. Це схоже на те, що в одній точці популярність в іграх була ступенями: використання таблиці пошуку ступенів було простіше / швидше (тоді) і дало "достатньо хороший" дозвіл для своїх потреб.
Шон Міддлічч

4

Відповідь Натана дуже конкретна. Я хотів би надати більш загальний вигляд:

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

Через цю основу в реальних числах і довжинах практично також можна моделювати кути за допомогою реальних чисел. довжини. Радіанс - довжина дуги одиничного кола із заданим кутом. Таким чином, це модель кута, найбільш сумісна з усіма цими іншими одиницями на основі реальних чисел, відповідно. довжини. Наприклад, наближення sin x ~ x для малих значень x - це наближення координати y точки на одиничному колі дугою від осі x до цієї точки.

Не слід забувати, що кут - це не довжина. Це одна з 4 частин площини, створених двома прямими, що перетинаються. Його кількість обмежена симетрією площин у ℝ³ та евклідовою метрикою.

Більш природним є моделювання кута за допомогою напіврозкритого інтервалу [0,1) (або (0,1]), склеєного в його кінцевих точках, враховуючи значення кута як частини повного витка. 360 повного обороту (BTW: Число теоретично, це кращий вибір, ніж десяткова система, що використовується для реальних чисел.)


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 Саме це я мав на увазі під "властивою помилкою округлення з Pi". Інший варіант - не використовувати сингли / парні, але спосіб представити числа як коефіцієнти (таким чином, представляючи 2 * pi / 360 не як результат обчислення, а як цю формулу), а обчислювати результат лише за потреби. Я не знаю, чи роблять якісь "реальні" програми, але такі речі, як Mathematica, завжди можуть представляти "1/3" як "1/3" замість "0,333333 .....". Але переглянувши цифри, я думаю, ви праві, помилка округлення є, але незначна
Michael Stum

2
Кут в 1 градус може бути простіше зобразити в градусах, ніж у радіанах, обертання предмета не є точним і в будь-якому випадку, оскільки це вимагає тригонометричних функцій. cos 1 ° є стільки ж помилкою округлення, як і pi / 180 .
Маркс Томас

-3

Погодьмося, що краще вибрати будь-який і дотримуватися його, ніж використовувати два визначення і трохи відгадати, яке з них необхідне для поточної функції. Тоді використання довжини дуги є більш природним для здійснення гріха і cos, що може бути причиною для cmath, щоб реалізувати її таким чином. Оскільки ігри часто пишуться на C ++ або C і вже існує гріх і cos, тому є сенс дотримуватися цього визначення.

[Накрутіть спадщину opengl]


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