¿Por qué se prefieren los radianes a los grados en el desarrollo del juego?

39

He estado buscando la definición de radianes y descubrí que los matemáticos los prefieren porque se derivan de pi en lugar de ser completamente arbitrarios como los grados.

Sin embargo, no he encontrado una razón convincente para usarlos en el desarrollo del juego, posiblemente debido a mi completa falta de comprensión matemática relacionada. Sé que la mayoría de sin / cos / tan funciona en idiomas que radianes, pero alguien podría crear funciones de biblioteca en grados (y evitar los errores de redondeo inherentes al usar pi).

No quiero que esto sea una encuesta obvia, solo me gustaría saber de personas que han realizado el desarrollo del juego (y la investigación matemática asociada) donde los radianes ofrecen una experiencia superior en grados, en lugar de "Estamos usando radianes porque siempre los usamos ", solo por ayudarme a mí (y posiblemente a otros) a comprender para qué sirven.

Michael Stum
fuente
2
Una respuesta es que son más rápidos. No tiene que convertir grados a radianes antes de usarlos en funciones como el pecado. Debería ser más específico y decir que un método para calcular sin (x) es usar una expansión de Taylor, y "x" debe estar en radianes para la expansión.
user3728501

Respuestas:

49

Los radianes se usan en matemáticas porque

  1. Miden la longitud del arco en el círculo, es decir, un arco de ángulo theta en un círculo de radio r es solo r * theta (en oposición a pi / 180 * r * theta).
  2. Cuando las funciones trigonométricas se definen en términos de radianes, obedecen a relaciones más simples entre sí, como que el coseno es la derivada del seno, o sin (x) ~ = x para x pequeño. Si se define en términos de grados, la derivada del seno sería pi / 180 * coseno, y tendríamos sin (x) ~ = pi / 180 * x para x pequeño.

No es que los matemáticos sean como pi. Los radianes son en realidad una forma más natural. opción de medida de ángulo que grados, por las razones anteriores. Son la medida del ángulo en el que desaparecen factores como pi / 180.

Entonces, en mi opinión, la pregunta no es "por qué usar radianes", sino "por qué no usar radianes". En otras palabras, uno no necesita una razón para usar radianes; son la opción predeterminada de medida de ángulo. Uno necesita una razón para usar grados. Por ejemplo, uno podría elegir mostrar ángulos en grados en la interfaz de usuario de una aplicación, porque son más familiares para muchas personas (especialmente artistas). Sin embargo, personalmente me he acostumbrado a pensar en ángulos en términos de radianes en lugar de grados.

No tengo ningún ejemplo específico de gamedev para darte porque este no es realmente un problema de gamedev, sino matemático, y sería lo mismo en cualquier campo que use matemáticas.

(Por cierto, no hay más "errores de redondeo inherentes cuando se usa pi" que cuando se usan grados ... los ángulos siempre deben ser números reales, no enteros, de lo contrario, ¿cómo va a representar un ángulo de medio grado? :) )

Nathan Reed
fuente
44
De acuerdo con lo anterior. Agregaré que una vez vi una biblioteca de juegos que usaba su propio estándar, basado en 256º de círculo. La razón parecía ser que sus funciones trigonométricas usaban una tabla de búsqueda con 256 entradas e interpoladas entre ellas. Si no está haciendo eso, sino calculando sin / cos / tan a partir de sus expansiones en serie, o utilizando instrucciones FSIN / FCOS en una FPU (lo más típico), ambos esperarán una entrada en radianes, por lo que puede guardar una conversión manteniendo en radianes por todas partes.
DMGregory
11
"por qué no usar radianes": estoy dispuesto a apostar que la única buena respuesta es "porque la tarea de cuarto grado sería una pesadilla con radianes", que probablemente sea la única razón por la que alguno de nosotros haya oído hablar de títulos. :)
Sean Middleditch
55
@SeanMiddleditch Las clases de 4to grado deben migrar a Tau . Tau es la versión radian de 360. Racionaliza las matemáticas y los profesionales también deben comenzar a adoptarla.
Val
2
256 de un círculo o 16384 de un círculo significa que puede usar bytes sin signo o números de 16 bits respectivamente, y los desbordamientos / desbordamientos de sumar / restar hacen lo correcto. Con radianes, probablemente termines usando coma flotante, lo que significa que obtienes más precisión cuanto más cerca esté tu ángulo de cero, y menos a medida que se aleja, lo cual es un poco inútil / tonto la mayor parte del tiempo.
rjmunro
2
@Val: Tau no resuelve los mismos problemas que los grados. Los grados facilitan la medición de ángulos relativamente pequeños con números enteros. Esto es importante cuando se trata de enseñar geometría temprana cuando los estudiantes todavía hacen todo a mano y no se sienten muy cómodos con las fracciones. Considere los problemas habituales del "ángulo de la manecilla del reloj" que se les dan a los estudiantes y cómo esos mapas se asignan limpiamente a grados pero no a radianes Pi / Tau. Esto es similar a la razón por la cual los grados eran populares en algún momento en los juegos: usar una tabla de búsqueda de grados era más fácil / rápido (en aquel entonces) y daba una resolución "suficientemente buena" para sus necesidades.
Sean Middleditch
4

La respuesta de Nathan es muy concreta. Me gustaría proporcionar una visión más general:

El concepto matemático más complejo que se implementa de forma nativa en la mayoría de las unidades de procesamiento son los números de coma flotante como modelos para el campo de los números reales ℝ. La geometría visual se basa en el espacio vectorial tridimensional real ℝ³. Las coordenadas son números reales. Las cantidades geométricas se basan en la longitud , que es un múltiplo real de una unidad.

Debido a esta base en números reales y longitudes, es práctico modelar también ángulos por números reales resp. longitudes Radianes es la longitud del arco de un círculo unitario con el ángulo dado. Por lo tanto, es el modelo de un ángulo más compatible con todas estas otras unidades basado en números reales resp. longitudes Por ejemplo, la aproximación sen x ~ x para valores pequeños de x es una aproximación de la coordenada y de un punto en el círculo unitario por el arco desde el eje x hasta ese punto.

No hay que olvidar que un ángulo no es una longitud. Es una de las 4 partes de un plano creado por dos líneas rectas que se cruzan. Su cantidad está limitada por la simetría de los planos en ℝ³ y la métrica euclidiana.

Es más natural modelar un ángulo por el intervalo semiabierto [0,1) (o (0,1]) pegado en sus puntos finales, dado el valor de un ángulo como parte de un giro completo. Los grados son solo 1 / 360 de un giro completo. (Por cierto: número teóricamente, esta es una mejor opción que el sistema decimal utilizado para números reales).

Toscho
fuente
0

Si bien también uso radianes, por todas las razones especificadas, hay al menos una buena razón por la que se prefieren los grados: precisión y acumulación de errores. Rotar a través de un círculo completo 1 grado a la vez es exacto. Girar a través de un círculo completo 2PI / 360 radianes a la vez no lo es. Realizar una rotación de 90 grados 4 veces en una cuadrícula de píxeles lo lleva de vuelta exactamente a donde comenzó. Realizar una rotación de 2PI / 4 radianes en una cuadrícula de píxeles 4 veces no lo hace.

ddyer
fuente
Al probar esto empíricamente, después de cuatro rotaciones de 90 grados con un solo incremento de flotación de precisión en radianes, encuentro un error total de 1.75E-7 (menos de 1 parte en 5 millones). En una cuadrícula de píxeles, el radio del objeto / marco giratorio debería estar en millones de píxeles antes de que experimente 1 píxel de error en el borde exterior (un punto a más de 0.5 px lineales de donde debería estar). En otras palabras, es poco probable que la pérdida de precisión sea un problema en la práctica (especialmente si usa dobles).
DMGregory
Desde una perspectiva numérica estás en lo correcto, pero desde una perspectiva visual si UN píxel de un borde duro aparece en el valor incorrecto, estás jodido.
ddyer
Vea la nota de "millones de píxeles" arriba. Para sprites de tamaños típicos (por ejemplo, del orden de 2048 píxeles de ancho o más pequeños), el error será sustancialmente menor que medio píxel y, por lo tanto, se borrará por el redondeo inherente de la propia cuadrícula de píxeles. Además, tenga en cuenta que girar 360/7 grados a la vez acumulará los mismos errores. Puede eliminar los errores de redondeo con ambos sistemas si se adhiere a incrementos que son representables como una suma de potencias de dos (con algún límite en el rango de exponente), pero probablemente sea más fácil cambiar a un código que no acumule muchos pequeños incrementos.
DMGregory
@DMGregory A eso me refería con "error de redondeo inherente con Pi". La otra opción es no usar singles / dobles, sino una forma de representar números como factores (representando 2 * pi / 360 no como resultado del cálculo sino como esa fórmula) y solo calcular el resultado cuando sea necesario. No sé si algún programa "real" hace eso, pero cosas como Mathematica siempre pueden representar "1/3" como "1/3" en lugar de "0.333333 .....". Pero después de pasar por los números, supongo que tienes razón, el error de redondeo está ahí pero es insignificante
Michael Stum
2
Un ángulo de 1 grado puede ser más fácil de representar con precisión en grados que en radianes, ya que girar un objeto no es exacto, ya que requiere funciones trigonométricas. cos 1 ° está tan sujeto a errores de redondeo como pi / 180 .
Marca Thomas el
-3

Acordemos que es mejor elegir cualquiera y apegarse a él que usar dos definiciones y adivinar cuál de ellas es necesaria para la función actual. Luego, usar la longitud del arco es más natural para la implementación de sin y cos, lo que podría ser una razón para que cmath lo implemente de esa manera. Dado que los juegos a menudo se escriben en C ++ o C y ya hay pecado y cos implementados, tiene sentido apegarse a esa definición.

[Al diablo tu legado opengl]

Arne
fuente
Esto realmente no responde la pregunta. ¿Querías comentar otra respuesta?
Josh