Por que os radianos são preferidos a graus no desenvolvimento de jogos?

39

Estive pesquisando a definição de radianos e descobri que os matemáticos os preferem porque são derivados de pi em vez de serem completamente arbitrários como graus.

No entanto, não encontrei um motivo convincente para usá-los no desenvolvimento de jogos, possivelmente devido à minha completa falta de compreensão matemática relacionada. Eu sei que a maioria das funções sin / cos / tan em idiomas é o que radianos, mas alguém também pode criar funções de biblioteca em graus (e evitar os erros de arredondamento inerentes ao usar pi).

Não quero que esta seja uma pesquisa de opinião. Gostaria apenas de ouvir de pessoas que fizeram desenvolvimento de jogos (e a pesquisa matemática associada) em que radianos oferecem uma experiência superior em graus, em oposição a "Estamos usando radianos porque sempre os usamos ", apenas para me ajudar (e possivelmente outros) a entender para que servem.

Michael Stum
fonte
2
Uma resposta é que eles são mais rápidos. Você não precisa encobrir graus em radianos antes de usá-los em funções como o pecado. Eu deveria ser mais específico e dizer que um método de calcular o pecado (x) está usando uma expansão de Taylor - e "x" precisa estar em radianos para a expansão.
user3728501

Respostas:

49

Radianos são usados ​​em matemática porque

  1. Eles medem o comprimento do arco no círculo, ou seja, um arco de ângulo teta em um círculo de raio r é apenas r * teta (em oposição a pi / 180 * r * teta).
  2. Quando as funções trigonométricas são definidas em termos de radianos, elas obedecem a relacionamentos mais simples entre si, como o cosseno sendo a derivada do seno ou sin (x) ~ = x para x pequeno. Se definido em termos de graus, a derivada de seno seria pi / 180 * cosseno, e teríamos sin (x) ~ = pi / 180 * x para x pequeno.

Não são os matemáticos como pi. Os radianos são na verdade uma escolha mais natural da medida do ângulo do que graus, pelas razões acima. Eles são a medida do ângulo em que fatores como pi / 180 desaparecem.

Portanto, na IMO, a questão não é "por que usar radianos", mas "por que não usar radianos". Em outras palavras, não é necessário um motivo para usar radianos; eles são a escolha padrão da medida do ângulo. É preciso um motivo para usar graus. Por exemplo, pode-se optar por mostrar ângulos em graus na interface do usuário de um aplicativo, porque eles são mais familiares para muitas pessoas (especialmente artistas). No entanto, pessoalmente, eu me acostumei a pensar em ângulos em termos de radianos, em vez de graus.

Não tenho exemplos específicos de gamedev para você, porque esse não é realmente um problema de gamedev, mas sim matemático e seria o mesmo em qualquer campo que use matemática.

(A propósito, não existem mais "erros de arredondamento inerentes ao usar pi" do que ao usar graus ... os ângulos devem sempre ser números reais, não números inteiros; caso contrário, como você representará um ângulo de meio grau? :) )

Nathan Reed
fonte
4
Concordou com o acima. Acrescentarei que vi uma biblioteca de jogos que usava seu próprio padrão, com base em 256º de um círculo. O motivo parecia ser que suas funções trigonométricas usavam uma tabela de pesquisa com 256 entradas e interpolavam entre elas. Se você não estiver fazendo isso, mas calculando sin / cos / tan a partir das expansões em série ou usando as instruções FSIN / FCOS em uma FPU (mais comum), ambas esperam uma entrada em radianos - para que você salve a conversão mantendo em radianos por toda parte.
DMGregory
11
"por que não usar radianos" - estou disposto a apostar que a única resposta boa é "porque a lição de casa da 4ª série seria um pesadelo com radianos", provavelmente a única razão pela qual alguns de nós já ouviram falar em graus. :)
Sean Middleditch
5
As turmas da 4ª série do @SeanMiddleditch devem migrar para a Tau . Tau é a versão radiana do 360. Simplifica a matemática e os profissionais também devem começar a adotá-la.
Val
2
256º de um círculo ou 16384º de um círculo significa que você pode usar bytes não assinados ou números de 16 bits, respectivamente, e os estouros / subfluxos de adição / subtração fazem a coisa certa. Com os radianos, você provavelmente acaba usando ponto flutuante, o que significa que você obtém mais precisão quanto mais próximo o ângulo estiver do zero e menos à medida que se afasta, o que é meio inútil / bobo na maioria das vezes.
Rjmunro
2
@ Val: Tau não resolve os mesmos problemas que os graus. Os graus facilitam a medição de ângulos relativamente pequenos com números inteiros. Isso é importante ao tentar ensinar geometria precoce, quando os alunos ainda estão fazendo tudo manualmente e não se sentem muito à vontade com frações. Considere os problemas comuns de "ângulo do ponteiro do relógio" que os alunos recebem e como eles são mapeados de maneira limpa em graus, mas não em radianos de Pi / Tau. Isso é semelhante ao motivo pelo qual os graus eram populares em jogos: usar uma tabela de pesquisa de graus era mais fácil / rápido (naquela época) e dava uma resolução "suficientemente boa" para suas necessidades.
Sean Middleditch
4

A resposta de Nathan é muito concreta. Eu gostaria de fornecer uma visão mais geral:

O conceito matemático mais complexo que é implementado nativamente na maioria das unidades de processamento são números de ponto flutuante como modelos para o campo de números reais ℝ. A geometria visual é baseada no espaço vetorial real tridimensional ℝ³. Coordenadas são números reais. As quantidades geométricas são baseadas no comprimento , que é um múltiplo real de uma unidade.

Devido a essa base em números e comprimentos reais, é prático também modelar ângulos por números reais resp. comprimentos. Radianos é o comprimento do arco de um círculo unitário com o ângulo especificado. Portanto, é o modelo de um ângulo mais compatível com todas essas outras unidades com base em números reais resp. comprimentos. Por exemplo, a aproximação sin x ~ x para valores pequenos de x é uma aproximação da coordenada y de um ponto no círculo unitário pelo arco do eixo x para esse ponto.

Não se deve esquecer que um ângulo não é um comprimento. É uma das 4 partes de um plano criado por duas linhas retas que se cruzam. Sua quantidade é limitada pela simetria dos planos em ³³ e pela métrica euclidiana.

É mais natural modelar um ângulo pelo intervalo de semi-abertura [0,1) (ou (0,1]) colado nos seus pontos finais, dado o valor de um ângulo como parte de uma volta completa. 360 de um turno completo. (BTW: Número teoricamente, essa é uma escolha melhor do que o sistema decimal usado para números reais.)

Toscho
fonte
0

Embora eu também use radianos, por todos os motivos especificados, há pelo menos um bom motivo pelo qual os graus são preferidos: precisão e acúmulo de erros. Girar um círculo completo 1 grau por vez é exato. Girar através de um círculo completo de 2PI / 360 radianos por vez não é. A realização de uma rotação de 90 graus 4 vezes em uma grade de pixels leva você de volta exatamente ao ponto em que começou. A realização de uma rotação de 2PI / 4 radianos em uma grade de pixels 4 vezes não.

ddyer
fonte
Testando isso empiricamente, após quatro rotações de 90 graus com um único incremento de precisão de flutuação em radianos, encontro um erro total de 1,75E-7 (menos de 1 parte em 5 milhões). Em uma grade de pixels, o raio do objeto / quadro rotativo precisaria estar na casa dos milhões de pixels antes de ocorrer um erro de 1 pixel na borda externa (um ponto a mais de 0,5 px linear de onde deveria estar). Em outras palavras, é improvável que a perda de precisão seja um problema na prática (especialmente se você usar duplos).
DMGregory
De uma perspectiva numérica, você está correto, mas, de uma perspectiva visual, se UM pixel de uma borda rígida aparecer com o valor errado, você está ferrado.
Ddyer
Veja a nota "milhões de pixels" acima. Para sprites de tamanhos típicos (digamos, da ordem de 2048 pixels de largura ou menos), o erro será substancialmente menor que meio pixel e, portanto, será apagado pelo arredondamento inerente da própria grade de pixels. Além disso, observe que girar 360/7 graus de cada vez acumulará os mesmos erros. Você pode eliminar erros de arredondamento nos dois sistemas aderindo a incrementos representáveis ​​como uma soma de potências de dois (com algum limite no intervalo do expoente), mas provavelmente é mais fácil mudar para um código que não acumula muitos pequenos incrementos.
DMGregory
@DMGregory Isso foi o que quis dizer com "erro de arredondamento inerente ao Pi". A outra opção é não usar singles / duplos, mas uma maneira de representar números como fatores (representando 2 * pi / 360 não como resultado do cálculo, mas como essa fórmula) e apenas calcular o resultado quando necessário. Não sei se algum programa "real" faz isso, mas coisas como o Mathematica sempre podem representar "1/3" como "1/3" em vez de "0,333333 .....". Mas, depois de analisar os números, acho que você está certo, o erro de arredondamento existe, mas é insignificante
Michael Stum
2
Um ângulo de 1 grau pode ser mais fácil de representar com precisão em graus do que em radianos, girar um objeto não é exato de qualquer maneira, pois requer funções trigonométricas. cos 1 ° está tão sujeito a erros de arredondamento quanto pi / 180 .
Marcks Thomas
-3

Vamos concordar que é melhor escolher um e cumpri-lo do que usar duas definições e adivinhar qual delas é necessária para a função atual. Então, usar o comprimento do arco é mais natural para a implementação do pecado e do cos, o que pode ser um motivo para o cmath implementá-lo dessa maneira. Como os jogos geralmente são escritos em C ++ ou C e já existe pecado e cos implementados, faz sentido manter essa definição.

[Dane-se seu legado opengl]

Arne
fonte
Isso realmente não está respondendo à pergunta. Você quis comentar outra resposta?
Josh