Perché i radianti sono preferiti rispetto ai gradi nello sviluppo del gioco?


39

Ho cercato la definizione di radianti e ho scoperto che i matematici li preferiscono perché derivano da pi anziché essere completamente arbitrari come i gradi.

Tuttavia, non ho trovato un motivo convincente per usarli nello sviluppo del gioco, probabilmente a causa della mia completa mancanza di comprensione matematica correlata. So che la maggior parte delle funzioni sin / cos / tan nelle lingue sono radianti, ma qualcuno potrebbe anche creare funzioni di libreria in gradi (ed evitare gli errori di arrotondamento intrinseci quando si usa pi).

Non voglio che questo sia un sondaggio supponente, vorrei solo sentire da persone che hanno svolto lo sviluppo del gioco (e la ricerca matematica associata) in cui i radianti offrono un'esperienza superiore su gradi, al contrario di "Stiamo usando i radianti perché li abbiamo sempre usati ", solo per aiutare me (e forse altri) a capire a cosa servono.


2
Una risposta è che sono più veloci. Non devi convertire i gradi in radianti prima di usarli in funzioni come il peccato. Dovrei essere più specifico e dire che un metodo per calcolare sin (x) sta usando un'espansione di Taylor - e "x" deve essere in radianti per l'espansione.
user3728501

Risposte:


49

I radianti sono usati in matematica perché

  1. Misurano la lunghezza dell'arco sul cerchio, cioè un arco di angolo theta su un cerchio di raggio r è solo r * theta (al contrario di pi / 180 * r * theta).
  2. Quando le funzioni di innesco sono definite in termini di radianti, obbediscono a relazioni più semplici tra loro, come ad esempio il coseno come derivato del seno o sin (x) ~ = x per la piccola x. Se definito in termini di gradi, la derivata del seno sarebbe pi / 180 * coseno e avremmo sin (x) ~ = pi / 180 * x per la piccola x.

Non è che i matematici proprio come il pi. I radianti sono in realtà una scelta più naturale della misura dell'angolo rispetto ai gradi, per i motivi sopra indicati. Sono la misura dell'angolo in cui scompaiono fattori come pi / 180.

Quindi, IMO, la domanda non è "perché usare i radianti", ma "perché non usare i radianti". In altre parole, non è necessario un motivo per usare i radianti; sono la scelta predefinita della misura dell'angolo. Uno ha bisogno di un motivo per usare i gradi. Ad esempio, si potrebbe scegliere di mostrare gli angoli in gradi nell'interfaccia utente di un'app, perché sono più familiari a molte persone (specialmente agli artisti). Tuttavia, personalmente mi sono abituato a pensare agli angoli in termini di radianti piuttosto che di gradi.

Non ho esempi specifici di gamedev da darti perché questo non è davvero un problema di gamedev, ma di matematica, e sarebbe lo stesso in qualsiasi campo che usi la matematica.

(A proposito, non ci sono più "errori di arrotondamento intrinseci quando si usa pi" rispetto a quando si usano i gradi ... gli angoli dovrebbero sempre essere numeri reali, non numeri interi, altrimenti come si intende rappresentare un angolo di mezzo grado? :) )


4
Concordato con quanto sopra. Aggiungerò che una volta ho visto una libreria di giochi che utilizzava il suo standard, basato su 256 ° di un cerchio. La ragione sembrava essere che le loro funzioni di trigge usassero una tabella di ricerca con 256 voci e si interpellassero tra loro. Se non lo stai facendo, ma calcolando sin / cos / tan dalle loro espansioni in serie, o usando le istruzioni FSIN / FCOS su una FPU (più tipica), entrambi si aspetteranno un input in radianti, quindi risparmi una conversione mantenendo in radianti dappertutto.
DMGregory

11
"perché non usare i radianti" - Sono disposto a scommettere che l'unica buona risposta ci sia "perché i compiti di 4 ° grado sarebbero un incubo con i radianti", che è probabilmente l'unica ragione per cui nessuno di noi abbia mai sentito parlare di gradi. :)
Sean Middleditch il

5
@SeanMiddleditch Le classi di quarta elementare devono migrare a Tau . Tau è la versione radiante di 360. Semplifica la matematica e anche i professionisti devono iniziare ad adottarla.
Val

2
256 ° di un cerchio o 16384 ° di un cerchio significa che è possibile utilizzare rispettivamente byte senza segno o numeri a 16 bit e gli overflow / underflow dell'aggiunta / sottrazione fanno la cosa giusta. Con i radianti, probabilmente finisci per usare la virgola mobile, il che significa che ottieni maggiore precisione quanto più l'angolo è vicino a zero e meno si allontana, il che è quasi inutile / sciocco la maggior parte del tempo.
rjmunro,

2
@Val: Tau non risolve gli stessi problemi dei gradi. I gradi rendono facile misurare angoli relativamente piccoli con numeri interi. Questo è importante quando si cerca di insegnare la geometria iniziale quando gli studenti stanno ancora facendo tutto a mano e non si sentono molto a proprio agio con le frazioni. Considera i soliti problemi di "angolo della lancetta dell'orologio" che vengono dati agli studenti e in che modo questi mappano in modo pulito a gradi ma non a radianti Pi / Tau. Questo è simile al motivo per cui i gradi erano ad un certo punto popolari nei giochi: usare una tabella di ricerca dei gradi era più facile / veloce (allora) e dava una risoluzione "abbastanza buona" per le loro esigenze.
Sean Middleditch il

4

La risposta di Nathan è molto concreta. Vorrei fornire una visione più generale:

Il concetto matematico più complesso che viene implementato nativamente nella maggior parte delle unità di elaborazione sono i numeri in virgola mobile come modelli per il campo dei numeri reali ℝ. La geometria visiva si basa sullo spazio vettoriale reale tridimensionale ℝ³. Le coordinate sono numeri reali. Le quantità geometriche si basano sulla lunghezza , che è un vero multiplo di un'unità.

A causa di questa base in numeri e lunghezze reali, è pratico anche modellare gli angoli in base a numeri reali o resp. lunghezze. I radianti è la lunghezza dell'arco di un cerchio unitario con l'angolo dato. Quindi è il modello di un angolo più compatibile con tutte queste altre unità basato su numeri reali o resp. lunghezze. Ad esempio, l'approssimazione sin x ~ x per piccoli valori di x è un'approssimazione della coordinata y di un punto sul cerchio unitario dall'arco dall'asse x a quel punto.

Non bisogna dimenticare che un angolo non è una lunghezza. È una delle 4 parti di un piano creata da due linee rette che si intersecano. La sua quantità è limitata dalla simmetria dei piani in and³ e dalla metrica euclidea.

È più naturale modellare un angolo in base all'intervallo semiopen [0,1) (o (0,1]) incollato insieme ai suoi punti finali, dato il valore di un angolo come parte di un giro completo. I gradi sono solo 1 / 360 di un giro completo. (BTW: numericamente, questa è una scelta migliore rispetto al sistema decimale utilizzato per i numeri reali.)


0

Anche se uso i radianti, per tutte le ragioni specificate, c'è almeno una buona ragione per cui i gradi sono preferiti: precisione e accumulo di errori. La rotazione di un grado alla volta di un cerchio completo è esatta. La rotazione attraverso un cerchio completo di 2PI / 360 radianti alla volta non lo è. Eseguire una rotazione di 90 gradi 4 volte su una griglia di pixel ti riporta esattamente al punto di partenza. L'esecuzione di una rotazione radiante di 2PI / 4 su una griglia di pixel per 4 volte no.


Testando questo empiricamente, dopo quattro rotazioni di 90 gradi con un singolo incremento del galleggiante di precisione in radianti, trovo un errore totale di 1,75 E-7 (meno di 1 parte su 5 milioni). Su una griglia di pixel, il raggio dell'oggetto / fotogramma rotante dovrebbe trovarsi in milioni di pixel prima che si verifichino 1 pixel di errore sul bordo esterno (un punto a più di 0,5 px lineari da dove dovrebbe essere). In altre parole, è improbabile che la perdita di precisione sia un problema nella pratica (specialmente se si usano i doppi).
DMGregory

Da una prospettiva numerica sei corretto, ma da una prospettiva visiva se UN pixel da un bordo duro si apre al valore sbagliato, sei fregato.
Ddyer

Vedi la nota "milioni di pixel" sopra. Per gli sprite di dimensioni tipiche (diciamo, nell'ordine di 2048 pixel di larghezza o più piccoli) l'errore sarà sostanzialmente inferiore a mezzo pixel, e quindi verrà cancellato dall'arrotondamento intrinseco della griglia di pixel stessa. Inoltre, si noti che ruotando di 360/7 gradi alla volta si accumuleranno gli stessi errori. È possibile eliminare gli errori di arrotondamento con entrambi i sistemi attenendosi agli incrementi che sono rappresentabili come una somma di potenze di due (con un certo limite sulla gamma di esponenti), ma è probabilmente più semplice passare al codice che non accumula molti piccoli incrementi.
DMGregory

@DMGregory Questo era ciò che intendevo con "errore di arrotondamento intrinseco con Pi". L'altra opzione è quella di non usare singoli / doppi ma un modo per rappresentare i numeri come fattori (quindi rappresentare 2 * pi / 360 non come risultato del calcolo ma come quella formula) e calcolare il risultato solo quando necessario. Non so se qualche programma "reale" lo faccia, ma cose come Mathematica possono sempre rappresentare "1/3" come "1/3" invece di "0.333333 .....". Ma dopo aver
esaminato

2
Un angolo di 1 grado può essere più facile da rappresentare con precisione in gradi rispetto ai radianti, la rotazione di un oggetto non è esatta in entrambi i casi, poiché richiede funzioni trigonometriche. cos 1 ° è soggetto a errori di arrotondamento quanto pi / 180 .
Marcks Thomas,

-3

Concordiamo sul fatto che è meglio scegliere uno qualsiasi e attenersi ad esso piuttosto che usare due definizioni e un po 'di indovinare quale di esse è necessaria per la funzione corrente. Quindi usare la lunghezza dell'arco è più naturale per l'implementazione di sin e cos che potrebbe essere una ragione per cmath per implementarla in quel modo. Poiché i giochi sono spesso scritti in C ++ o C e c'è già peccato e cos implementati, ha senso attenersi a tale definizione.

[Fottiti legacy opengl]


Questo non risponde davvero alla domanda. Intendi invece commentare un'altra risposta?
Josh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.