Dlaczego w rozwoju gier preferowane są radiany?

39

Przyglądałem się definicji radianów i odkryłem, że matematycy wolą je, ponieważ pochodzą od pi, a nie są całkowicie arbitralne jak stopnie.

Jednak nie znalazłem przekonującego powodu, aby używać ich w rozwoju gier, prawdopodobnie z powodu mojego całkowitego braku powiązanego zrozumienia matematycznego. Wiem, że większość funkcji sin / cos / tan w językach to radian, ale ktoś równie dobrze mógłby tworzyć funkcje biblioteczne w stopniach (i unikać nieodłącznych błędów zaokrąglania podczas używania pi).

Nie chcę, żeby to była ankieta, chciałbym usłyszeć od ludzi, którzy opracowali grę (i związane z nią badania matematyczne), w których radianie oferują lepsze doświadczenie niż stopnie naukowe, w przeciwieństwie do „Używamy radianów ponieważ zawsze ich używaliśmy ”, tylko po to, aby pomóc mi (i ewentualnie innym) zrozumieć, do czego są dobrzy.

Michael Stum
źródło
2
Jedna odpowiedź jest taka, że ​​są szybsze. Nie musisz ukrywać stopni w radianach przed użyciem ich w funkcjach takich jak grzech. Powinienem być bardziej szczegółowy i powiedzieć, że jedną z metod obliczania sin (x) jest użycie rozszerzenia Taylora - a „x” musi być w radianach dla rozszerzenia.
user3728501

Odpowiedzi:

49

Radianów używa się w matematyce, ponieważ

  1. Mierzą długość łuku na okręgu, tzn. Łuk kąta theta na okręgu o promieniu r jest po prostu r * theta (w przeciwieństwie do pi / 180 * r * theta).
  2. Kiedy funkcje trig zdefiniowane są w radianach, to stosują prostsze relacje między sobą, takie jak cosinus będący pochodną sinusa lub sin (x) ~ = x dla małego x. Jeśli zdefiniowana w stopniach, pochodną sinusa będzie pi / 180 * cosinus, a mielibyśmy sin (x) ~ = pi / 180 * x dla małych x.

To nie tak, że matematycy tak jak pi. Z powyższych powodów radiany są bardziej naturalnym wyborem miary kąta niż stopnie. Są to miary kąta, w których zanikają czynniki takie jak pi / 180.

IMO zatem nie brzmi „dlaczego korzystać z radianów”, ale „dlaczego nie używać radianów”. Innymi słowy, nie ma powodu, aby używać radianów; są domyślnym wyborem miary kąta. Potrzebny jest powód, aby używać stopni. Na przykład można wybrać wyświetlanie kątów w stopniach w interfejsie aplikacji, ponieważ są one bardziej znane wielu osobom (zwłaszcza artystom). Jednak osobiście przyzwyczaiłem się do myślenia o kątach raczej w radianach niż stopniach.

Nie mam żadnych konkretnych przykładów gamedev, które mogę podać, ponieważ nie jest to tak naprawdę problem gamedev, ale matematyczny i byłby taki sam w każdej dziedzinie wykorzystującej matematykę.

(Nawiasem mówiąc, nie ma więcej „nieodłącznych błędów zaokrąglania podczas używania pi” niż przy użyciu stopni ... kąty powinny zawsze być liczbami rzeczywistymi, a nie liczbami całkowitymi, w przeciwnym razie jak reprezentujesz kąt pół stopnia? :) )

Nathan Reed
źródło
4
Zgadzam się z powyższym. Dodam, że kiedyś widziałem bibliotekę gier, która używała własnego standardu, opartego na 256 częściach koła. Wydawało się, że przyczyną było to, że ich funkcje wyzwalające korzystały z tabeli odnośników z 256 wpisami i interpolowały je. Jeśli tego nie robisz, ale obliczasz sin / cos / tan na podstawie ich rozszerzeń serii lub używasz instrukcji FSIN / FCOS na FPU (najbardziej typowe), obie będą oczekiwać wejścia w radianach - więc oszczędzasz konwersję, zachowując w radianach w całym tekście.
DMGregory
11
„dlaczego nie korzystać z radianów” - jestem gotów się założyć, że jedyną dobrą odpowiedzią jest „ponieważ praca domowa w czwartej klasie byłaby koszmarem z radianami”, co jest prawdopodobnie jedynym powodem, dla którego ktokolwiek z nas słyszał o stopniach. :)
Sean Middleditch,
5
@SeanMiddleditch Klasy czwartej klasy muszą migrować do Tau . Tau to radianowa wersja 360. Usprawnia matematykę, a profesjonaliści też muszą zacząć ją adoptować.
Val
2
256 części koła lub 16384 części koła oznaczają, że możesz używać odpowiednio niepodpisanych bajtów lub liczb 16-bitowych, a przepełnienia / niedopełnienia dodawania / odejmowania są słuszne. W przypadku radianów prawdopodobnie kończysz się na punkcie zmiennoprzecinkowym, co oznacza, że ​​otrzymujesz większą precyzję, im bliżej zera jest twój kąt, a mniej, gdy się odsuwa, co jest raczej bezużyteczne / głupie przez większość czasu.
rjmunro
2
@Val: Tau nie rozwiązuje tych samych problemów co stopnie. Stopnie ułatwiają pomiar stosunkowo małych kątów za pomocą liczb całkowitych. Jest to ważne, gdy próbuje się uczyć wczesnej geometrii, gdy uczniowie wciąż robią wszystko ręcznie i nie są zbytnio zadowoleni z ułamków. Zastanów się nad typowymi problemami „kąta wskazówek zegara”, jakie napotykają uczniowie, oraz o tym, jak ci mapują czysto do stopni, ale nie radianów Pi / Tau. Jest to podobne do tego, dlaczego stopnie były w pewnym momencie popularne w grach: używanie tabeli stopni było łatwiejsze / szybsze (wtedy) i dawało „wystarczająco dobrą” rozdzielczość dla ich potrzeb.
Sean Middleditch,
4

Odpowiedź Nathana jest bardzo konkretna. Chciałbym przedstawić bardziej ogólny widok:

Najbardziej złożoną koncepcją matematyczną, która jest natywnie wdrażana w większości jednostek przetwarzających, są liczby zmiennoprzecinkowe jako modele dla pola liczb rzeczywistych ℝ. Geometria wizualna oparta jest na trójwymiarowej przestrzeni wektora rzeczywistego ℝ³. Współrzędne są liczbami rzeczywistymi. Wielkości geometryczne oparte są na długości , która jest rzeczywistą wielokrotnością jednostki.

Ze względu na tę bazę w liczbach rzeczywistych i długościach praktyczne jest również modelowanie kątów według liczb rzeczywistych lub. długości. Radian jest długością łuku koła jednostkowego o danym kącie. Jest to zatem model kąta najbardziej kompatybilny ze wszystkimi innymi jednostkami na podstawie liczb rzeczywistych lub. długości. Na przykład sin przybliżenia sin x ~ x dla małych wartości x jest przybliżeniem współrzędnej y punktu na okręgu jednostkowym przez łuk od osi x do tego punktu.

Nie należy zapominać, że kąt jest nie długość. Jest to jedna z 4 części płaszczyzny utworzonej przez dwie przecinające się linie proste. Jego ilość jest ograniczona przez symetrię płaszczyzn w ℝ³ i metrykę euklidesową.

Bardziej naturalne jest modelowanie kąta za pomocą przedziału półotwartego [0,1) (lub (0,1]) sklejonego razem w jego punktach końcowych, biorąc pod uwagę wartość kąta jako część pełnego obrotu. Stopnie są tylko 1 / 360 pełnego obrotu. (BTW: Teoretycznie liczba, jest to lepszy wybór niż system dziesiętny używany dla liczb rzeczywistych).

Toscho
źródło
0

Chociaż używam także radianów, z wszystkich wymienionych powodów, istnieje co najmniej jeden dobry powód, dla którego preferowane są stopnie: Precyzja i kumulacja błędów. Obracanie o pełny okrąg o 1 stopień na raz jest dokładne. Obracanie przez pełny okrąg radianów 2PI / 360 jednocześnie nie jest. 4-krotne obrócenie o 90 stopni na siatce pikseli powoduje powrót do dokładnie tego, co zacząłeś. Wykonanie obrotu radianem 2PI / 4 na siatce pikseli 4 razy nie.

ddyer
źródło
Testując to empirycznie, po czterech obrotach 90 stopni z pojedynczym precyzyjnym przyrostem pływaka w radianach, znajduję całkowity błąd 1,75E-7 (mniej niż 1 część na 5 milionów). Na siatce pikseli promień obracającego się obiektu / ramki musiałby być w milionach pikseli, zanim wystąpiłby 1 piksel błędu na zewnętrznej krawędzi (punkt większy niż 0,5 liniowego piksela od miejsca, w którym powinien być). Innymi słowy, utrata precyzji raczej nie będzie problemem w praktyce (szczególnie jeśli używasz podwójnych).
DMGregory
Z liczbowego punktu widzenia masz rację, ale z wizualnego punktu widzenia, jeśli JEDEN piksel z twardej krawędzi wyskoczy do niewłaściwej wartości, to jesteś przykuty.
ddyer
Zobacz notatkę „miliony pikseli” powyżej. W przypadku duszków o typowych rozmiarach (powiedzmy, rzędu 2048 pikseli szerokości lub mniejszych) błąd będzie znacznie mniejszy niż pół piksela, a zatem zostanie usunięty przez nieodłączne zaokrąglenie samej siatki pikseli. Pamiętaj również, że obrót o 360/7 stopni naraz spowoduje nagromadzenie tych samych błędów. Możesz wyeliminować błędy zaokrąglania w obu systemach, trzymając się przyrostów reprezentatywnych jako suma potęg dwóch (z pewnym ograniczeniem zakresu wykładniczego), ale prawdopodobnie łatwiej jest zmienić kod, który nie gromadzi wielu małych przyrostów.
DMGregory
@DMGregory To właśnie miałem na myśli z „nieodłącznym błędem zaokrąglenia przy Pi”. Inną opcją jest nie używanie liczby pojedynczej / podwójnej, ale sposób reprezentowania liczb jako czynników (czyli reprezentujących 2 * pi / 360 nie jako wynik obliczeń, ale jako wzór) i obliczania wyniku tylko w razie potrzeby. Nie wiem, czy robią to „prawdziwe” programy, ale rzeczy takie jak Mathematica zawsze mogą reprezentować „1/3” jako „1/3” zamiast „0.333333 .....”. Ale po przejrzeniu liczb wydaje mi się, że masz rację, błąd zaokrąglania jest niewielki
Michael Stum
2
Kąt 1 stopnia może być łatwiejszy do dokładnego przedstawienia w stopniach niż w radianach, obracanie obiektu nie jest dokładne w obu kierunkach, ponieważ wymaga funkcji trygonometrycznych. cos 1 ° podlega tak samo błędom zaokrąglania jak pi / 180 .
Marcks Thomas,
-3

Zgódźmy się, że lepiej wybrać dowolną i trzymać się jej, niż używać dwóch definicji i nieco zgadywać, która z nich jest niezbędna dla bieżącej funkcji. Wtedy użycie długości łuku jest bardziej naturalne dla realizacji grzechu i cos, co może być powodem, dla którego cmath zastosuje go w ten sposób. Ponieważ gry są często pisane w C ++ lub C, a zaimplementowano już sin i cos, warto trzymać się tej definicji.

[Pieprz się starsze opengl]

Arne
źródło
To tak naprawdę nie odpowiada na pytanie. Czy zamiast tego chciałeś skomentować inną odpowiedź?
Josh