Warum wird bei der Spieleentwicklung das Bogenmaß dem Grad vorgezogen?


39

Ich habe die Definition von Radiant nachgeschlagen und festgestellt, dass Mathematiker sie bevorzugen, weil sie von pi abgeleitet sind, anstatt wie Grade völlig willkürlich zu sein.

Ich habe jedoch keinen zwingenden Grund gefunden, sie in der Spieleentwicklung einzusetzen, möglicherweise aufgrund meines völligen Mangels an entsprechenden mathematischen Kenntnissen. Ich weiß, dass die meisten sin / cos / tan-Funktionen in Sprachen das Bogenmaß haben, aber jemand könnte genauso gut Bibliotheksfunktionen in Grad erstellen (und die inhärenten Rundungsfehler bei der Verwendung von pi vermeiden).

Ich möchte nicht, dass dies eine Meinungsumfrage ist, sondern ich möchte nur von Leuten hören, die Spieleentwicklungen (und die damit verbundene mathematische Forschung) durchgeführt haben, bei denen Radiant eine bessere Erfahrung als Grad bietet als "Wir verwenden Radiant" weil wir sie immer benutzt haben ", nur um mir (und möglicherweise auch anderen) zu helfen, zu verstehen, wofür sie gut sind.


2
Eine Antwort ist, dass sie schneller sind. Sie müssen Grad nicht in Bogenmaß umrechnen, bevor Sie sie in Funktionen wie Sünde verwenden. Ich sollte genauer sein und sagen, dass eine Methode zur Berechnung von sin (x) eine Taylor-Erweiterung verwendet - und "x" muss für die Erweiterung im Bogenmaß angegeben werden.
user3728501

Antworten:


49

Radiant werden in der Mathematik verwendet, weil

  1. Sie messen die Bogenlänge auf dem Kreis, dh ein Winkelbogen Theta auf einem Kreis mit dem Radius r ist nur r * Theta (im Gegensatz zu pi / 180 * r * Theta).
  2. Wenn Triggerfunktionen als Bogenmaß definiert werden, befolgen sie einfachere Beziehungen untereinander, z. B. Cosinus als Ableitung von Sinus oder sin (x) ~ = x für kleines x. In Grad ausgedrückt wäre die Ableitung von Sinus pi / 180 * Cosinus, und wir hätten sin (x) ~ = pi / 180 * x für kleines x.

Es ist nicht so, dass Mathematiker nur Pi mögen. Aus den oben genannten Gründen ist der Bogenmaßwert eine natürlichere Wahl des Winkelmaßes als der Grad. Sie sind das Winkelmaß, in dem Faktoren wie pi / 180 verschwinden.

IMO lautet die Frage also nicht "Warum Radiant verwenden", sondern "Warum Radiant nicht verwenden". Mit anderen Worten, man braucht keinen Grund, Bogenmaß zu verwenden. Sie sind die Standardauswahl für das Winkelmaß. Man braucht einen Grund, um Abschlüsse zu verwenden. Beispielsweise kann man in der Benutzeroberfläche einer App festlegen, dass Winkel in Grad angezeigt werden, da sie vielen Personen (insbesondere Künstlern) besser bekannt sind. Ich persönlich habe mich jedoch daran gewöhnt, Winkel eher in Bogenmaß als in Grad zu sehen.

Ich habe keine speziellen Gamedev-Beispiele, da es sich nicht wirklich um ein Gamedev-Problem handelt, sondern um ein mathematisches Problem, das in allen Bereichen, in denen Mathematik verwendet wird, gleich ist.

(Übrigens gibt es bei der Verwendung von pi nicht mehr "inhärente Rundungsfehler" als bei der Verwendung von Grad ... Winkel sollten immer reelle Zahlen sein, keine ganzen Zahlen, sonst wie soll man einen Winkel von einem halben Grad darstellen? :) )


4
Mit dem oben genannten einverstanden. Ich werde hinzufügen, dass ich einmal eine Spielbibliothek gesehen habe, die ihren eigenen Standard verwendet hat, basierend auf 256stel eines Kreises. Der Grund schien zu sein, dass ihre Triggerfunktionen eine Nachschlagetabelle mit 256 Einträgen verwendeten und zwischen ihnen interpolierten. Wenn Sie dies nicht tun, sondern sin / cos / tan aus ihren Reihenerweiterungen berechnen oder FSIN / FCOS-Anweisungen auf einer FPU (am typischsten) verwenden, erwarten beide eine Eingabe im Bogenmaß. Sie sparen also eine Konvertierung, indem Sie sie beibehalten es im Bogenmaß durchgehend.
DMGregory

11
"Warum nicht Radiant verwenden?" - Ich wette, die einzig gute Antwort lautet: "Hausaufgaben der 4. Klasse wären ein Albtraum mit Radiant." Dies ist wahrscheinlich der einzige Grund, warum jeder von uns überhaupt jemals von Abschlüssen gehört hat. :)
Sean Middleditch

5
@ SeanMiddleditch Klassen der 4. Klasse müssen nach Tau migrieren . Tau ist die Radian-Version von 360. Sie vereinfacht die Mathematik, und Fachleute müssen ebenfalls damit beginnen, sie zu übernehmen.
Val

2
256stel eines Kreises oder 16384stel eines Kreises bedeutet, dass Sie vorzeichenlose Bytes oder 16-Bit-Zahlen verwenden können und die Über- / Unterläufe beim Addieren / Subtrahieren das Richtige tun. Bei Bogenmaß verwenden Sie wahrscheinlich Gleitkommazahlen, was bedeutet, dass Sie umso präziser werden, je näher Ihr Winkel an Null ist und je weniger er sich entfernt, was die meiste Zeit nutzlos / albern ist.
rjmunro

2
@Val: Tau löst nicht die gleichen Probleme, die Grad machen. Grad machen es einfach, relativ kleine Winkel mit ganzzahligen Zahlen zu messen. Dies ist wichtig, wenn Sie versuchen, frühe Geometrie zu unterrichten, während die Schüler noch alles von Hand erledigen und sich mit Brüchen nicht sehr wohl fühlen. Berücksichtigen Sie die üblichen "Uhrzeigerwinkel" -Probleme, die die Schüler haben, und wie diese sauber auf Grad, aber nicht auf Pi / Tau-Bogenmaß abgebildet werden. Dies ist vergleichbar mit dem Grund, warum Abschlüsse in Spielen zu einem bestimmten Zeitpunkt beliebt waren: Die Verwendung einer Nachschlagetabelle für Abschlüsse war (damals) einfacher / schneller und ergab eine für ihre Bedürfnisse "ausreichend gute" Auflösung.
Sean Middleditch

4

Nathans Antwort ist sehr konkret. Ich möchte einen allgemeineren Überblick geben:

Das komplexeste mathematische Konzept, das in den meisten Verarbeitungseinheiten nativ implementiert ist, sind Gleitkommazahlen als Modelle für das Feld der reellen Zahlen ℝ. Die visuelle Geometrie basiert auf dem dreidimensionalen reellen Vektorraum ℝ³. Koordinaten sind reelle Zahlen. Geometrische Größen basieren auf der Länge , die ein reales Vielfaches einer Einheit ist.

Aufgrund dieser Basis in reellen Zahlen und Längen ist es praktisch, Winkel auch durch reelle Zahlen bzw. Winkel zu modellieren. Längen. Bogenmaß ist die Länge des Bogens eines Einheitskreises mit dem angegebenen Winkel. Somit ist es das Modell eines Winkels, das am besten mit all diesen anderen Einheiten basierend auf reellen Zahlen bzw. Werten kompatibel ist. Längen. Beispielsweise ist die Approximation sin x ~ x für kleine Werte von x eine Approximation der y-Koordinate eines Punktes auf dem Einheitskreis durch den Bogen von der x-Achse zu diesem Punkt.

Man sollte nicht vergessen, dass ein Winkel ist nicht eine Länge. Es ist einer der 4 Teile einer Ebene, die durch zwei sich schneidende gerade Linien erzeugt wird. Ihre Menge ist durch die Symmetrie der Ebenen in ℝ³ und die euklidische Metrik begrenzt.

Es ist natürlicher, einen Winkel anhand des halboffenen Intervalls [0,1] (oder (0,1]) zu modellieren, das an seinen Endpunkten zusammengeklebt ist, wenn der Wert eines Winkels als Teil einer vollen Umdrehung angegeben wird. 360 einer vollen Umdrehung. (Übrigens: Zahlentheoretisch ist dies eine bessere Wahl als das für reelle Zahlen verwendete Dezimalsystem.)


0

Obwohl ich auch Bogenmaß benutze, gibt es aus allen genannten Gründen mindestens einen guten Grund, warum Grad bevorzugt wird: Präzision und Häufung von Fehlern. Es ist genau, um jeweils 1 Grad um einen vollen Kreis zu drehen. Das gleichzeitige Drehen durch einen vollen Kreis im 2PI / 360-Bogenmaß ist nicht der Fall. Durch viermaliges Drehen um 90 Grad in einem Pixelraster kehren Sie genau zu Ihrem Ausgangspunkt zurück. Eine 4-malige Drehung im 2PI / 4-Bogenmaß auf einem Pixelgitter ist nicht möglich.


Wenn ich dies empirisch teste, stelle ich nach vier Umdrehungen von 90 Grad mit einem einzigen Präzisions-Float-Inkrement im Bogenmaß einen Gesamtfehler von 1,75E-7 fest (weniger als 1 Teil von 5 Millionen). In einem Pixelraster muss der Radius des rotierenden Objekts / Frames in Millionen von Pixeln liegen, bevor am äußeren Rand ein Fehlerpixel auftritt (ein Punkt, der mehr als 0,5 Pixel linear von der Position entfernt ist, an der er sein sollte). Mit anderen Worten, es ist unwahrscheinlich, dass ein Präzisionsverlust in der Praxis ein Problem darstellt (insbesondere, wenn Sie Double verwenden).
DMGregory

Aus numerischer Sicht sind Sie richtig, aber aus visueller Sicht sind Sie geschraubt, wenn EIN Pixel von einer harten Kante auf den falschen Wert springt.
Ddyer

Siehe den Hinweis "Millionen Pixel" oben. Bei Sprites mit typischen Größen (z. B. in der Größenordnung von 2048 Pixel oder weniger) ist der Fehler wesentlich kleiner als ein halbes Pixel und wird daher durch die inhärente Rundung des Pixelrasters selbst gelöscht. Beachten Sie außerdem, dass durch gleichzeitiges Drehen um 360/7 Grad dieselben Fehler auftreten. Sie können Rundungsfehler mit beiden Systemen vermeiden, indem Sie sich an Inkremente halten, die als Summe von Zweierpotenzen darstellbar sind (mit einer gewissen Begrenzung des Exponentenbereichs). Es ist jedoch wahrscheinlich einfacher, auf Code zu wechseln, der nicht viele kleine Inkremente ansammelt.
DMGregory

@DMGregory Das habe ich mit "inhärenter Rundungsfehler mit Pi" gemeint. Die andere Möglichkeit besteht darin, keine Einzel- / Doppelwerte zu verwenden, sondern Zahlen als Faktoren darzustellen (also 2 * pi / 360 nicht als Ergebnis der Berechnung, sondern als diese Formel darzustellen) und das Ergebnis nur bei Bedarf zu berechnen. Ich weiß nicht, ob "echte" Programme das tun, aber Sachen wie Mathematica können immer "1/3" als "1/3" anstelle von "0.333333 ....." darstellen. Aber nachdem Sie die Zahlen
durchgegangen

2
Ein Winkel von 1 Grad ist möglicherweise einfacher in Grad genau darzustellen als im Bogenmaß. Das Drehen eines Objekts ist in keiner Weise exakt, da es trigonometrische Funktionen erfordert. cos 1 ° unterliegt Rundungsfehlern wie pi / 180 .
Marcks Thomas

-3

Lassen Sie uns zustimmen, dass es besser ist, eine auszuwählen und dabei zu bleiben, als zwei Definitionen zu verwenden und ein wenig zu raten, welche davon für die aktuelle Funktion erforderlich ist. Dann ist die Verwendung der Bogenlänge für die Implementierung von sin und cos natürlicher, was ein Grund sein könnte, warum cmath dies so implementiert. Da Spiele oft in C ++ oder C geschrieben werden und bereits sin and cos implementiert ist, ist es sinnvoll, sich an diese Definition zu halten.

[Screw you Legacy opengl]


Dies beantwortet die Frage nicht wirklich. Wollten Sie stattdessen eine andere Antwort kommentieren?
Josh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.