Oyun geliştirmede radyanlar neden derecelerde tercih edilir?


39

Radyanların tanımını araştırıyordum ve matematikçilerin onları tercih ettiklerini öğrendim çünkü tamamen rasgele derecelerde olmak yerine pi'den türetiliyorlar.

Bununla birlikte, muhtemelen oyunla ilgili matematiksel anlayış eksikliğimden dolayı bunları oyun geliştirmede kullanmak için zorlayıcı bir sebep bulamadım. Çoğu günah / cos / tan'ın ne yaydığı dillerde işlediğini biliyorum, ancak birisi kütüphane işlevlerini derece derecesinde yaratabilir (ve pi kullanırken doğal yuvarlama hatalarından kaçının).

Bunun tartışmalı bir anket olmasını istemiyorum, sadece radyanların derece üzerinde üstün bir deneyim sundukları oyun geliştirmeyi (ve ilgili matematik araştırmasını) yapan insanlardan duymak istiyorum. çünkü onları her zaman kullandık ", sadece bana (ve muhtemelen başkalarına) neye iyi geldiklerini anlamalarında yardım etme uğruna.


2
Bir cevap, daha hızlı olmaları. Günah gibi işlevlerde kullanmadan önce dereceleri radyanlara gizlemeniz gerekmez. Daha spesifik olmalıyım ve günah (x) hesaplama yönteminin Taylor genişlemesi kullandığını ve "x" değerinin genişleme için radyan olması gerektiğini söylemeliyim.
user3728501

Yanıtlar:


49

Radyan matematikte kullanılır çünkü

  1. Dairede yay uzunluğunu ölçerler, yani r yarıçapı dairesinde bir açı açısı yayı sadece r * tetadır (pi / 180 * r * teta'nın aksine).
  2. Trig fonksiyonlar radyan cinsinden tanımlandığında, sinüs türevi olan kosinüs veya küçük x için sin (x) ~ = x gibi aralarında daha basit ilişkilere uyarlar. Dereceler cinsinden tanımlanırsa sinüsün türevi pi / 180 * kosinüs olur ve küçük x için günah (x) ~ = pi / 180 * x olur.

Bu sadece matematikçiler gibi pi gibi değil. Radyanlar , yukarıdaki nedenlerden dolayı , aslında , derecelerden daha doğal bir açı ölçüsüdür. Pi / 180 gibi faktörlerin kaybolduğu açı ölçüsüdür.

Yani IMO, soru "neden radyan kullanıyorsun" değil, "neden radyan kullanıyorsun" değil . Başka bir deyişle, radyan kullanmak için bir nedene gerek yoktur; bunlar varsayılan açı ölçüsü seçimidir. Bir derece kullanmak için bir nedene ihtiyacı var. Örneğin, bir uygulamanın kullanıcı arayüzünde açıları derece cinsinden göstermeyi seçebilirsiniz, çünkü birçok insana (özellikle sanatçılar) daha aşinadırlar. Ancak ben şahsen derecelerden ziyade açılar hakkında düşünmeye oldukça alıştım.

Size verilecek belirli bir gamedev örneğim yok çünkü bu gerçekten bir gamedev sorunu değil, matematiksel ve matematik kullanan herhangi bir alanda aynı olacaktır.

(Bu arada, "pi kullanırken," yuvarlama hataları "dır." Derecelerden ziyade "açılar her zaman gerçek sayılar olmalıdır, tam sayılar değil, başka yarım derecelik bir açıyı nasıl göstereceksiniz? :) )


4
Yukarıdakilerle anlaşmaya varıldı. Bir keresinde, bir dairenin 256'sına dayanan kendi standardını kullanan bir oyun kütüphanesi gördüğümü ekleyeceğim. Sebep, trig fonksiyonlarının 256 girişli bir arama tablosu kullanması ve aralarında enterpolasyon yapmasıydı. Bunu yapmıyorsanız, ancak sin / cos / tan'ı seri açılımlarından hesaplamak ya da bir FPU'da FSIN / FCOS komutlarını kullanarak kullanmak (en tipik), bunlar radyan olarak bir girdi bekler - bu nedenle bir dönüşüm kaydederek boyunca radyan olarak.
DMGregory

11
"neden radyan kullanmıyorsun" - İddiaya girerim ki, "4. sınıf ödevinin radyan ile kabusu olacağı için" olan tek iyi cevaba bahse girmeye razıyım. :)
Sean Middleditch

5
@SeanMiddleditch 4. sınıf sınıfları geçmeleri gerekmektedir Tau . Tau 360'ın radyan versiyonudur. Matematiği kolaylaştırır ve profesyoneller de benimsemeye başlamalıdır.
Val

2
Bir dairenin 256'sı veya bir dairenin 16384'ü, işaretsiz baytları veya 16bit sayılarını kullanabileceğiniz anlamına gelir ve taşma / toplama / çıkarma işlemleri doğru olanı yapar. Radyanlarla, muhtemelen kayan nokta kullanarak son bulursunuz; bu, açınızın sıfıra yaklaştıkça daha fazla hassasiyet kazandığınız ve uzaklaştıkça daha az hassas olduğunuz anlamına gelir; bu da çoğu zaman işe yaramaz / aptaldır.
rjmunro

2
@ Val: Tau, derecelerde olduğu gibi aynı problemleri çözmez. Derece, integral sayıları ile nispeten küçük açıları ölçmeyi kolaylaştırır. Bu, öğrenciler hala her şeyi elle yaparken ve kesirlerde çok rahat olmadıklarında, erken geometriyi öğretmeye çalışırken önemlidir. Alışılmış "saat el açısı" problemlerini öğrencilere verin ve bunların Pi / Tau radyanlarını değil derecelerle nasıl temiz bir şekilde haritaladıklarını düşünün. Bu, oyunların popülerlik derecelerinin bir noktada popüler olmasının nedenine benzer: derece arama tablosunu kullanmak daha kolay / daha hızlıydı (o zamanlar) ve ihtiyaçları için "yeterince iyi" bir çözünürlük verdi.
Sean Middleditch

4

Nathan'ın cevabı çok somut. Daha genel bir görüş vermek istiyorum:

Birçok işlem biriminde doğal olarak uygulanan en karmaşık matematiksel kavram, gerçek sayılar models için model olarak kayan nokta sayılarıdır. Görsel geometri, üç boyutlu gerçek vektör uzayını ℝ³ temel alır. Koordinatlar gerçek sayılardır. Geometrik büyüklükler, birimin gerçek bir katı olan uzunluğa dayanır .

Gerçek sayı ve uzunluklardaki bu taban nedeniyle, açıların gerçek sayılara göre modellenmesi de pratiktir. uzunlukları. Radyan bir birim dairenin yayının verilen açı ile uzunluğu. Bu nedenle, gerçek sayılara dayanarak tüm bu diğer birimlerle en uyumlu açının modelidir. uzunlukları. Örneğin, küçük x değerleri için sin x ~ x yaklaşımı, birim daire üzerindeki bir noktanın y-koordinatının yay tarafından x ekseninden o noktaya olan yaklaşık değeridir.

Bir açı olduğunu, unutmamak gerekir olduğunu değil bir uzunluğu. Kesişen iki düz çizginin oluşturduğu düzlemin 4 bölümünden biridir. Miktarı in cinsinden düzlemlerin simetrisi ve öklid metriği ile sınırlıdır.

Bir açının tam bir dönüşün parçası olarak verilen değeri ile birlikte, uç noktalarına yapıştırılmış semiopen aralığı [0,1) (veya (0,1)) ile bir açının modellenmesi daha doğaldır. Tam turda 360 (BTW: Teorik olarak sayı, bu gerçek sayılar için kullanılan ondalık sistemden daha iyi bir seçimdir.)


0

Ben de radyan kullanırken, belirtilen tüm nedenlerden dolayı, derecelerin tercih edilmesinin en az bir nedeni var: Hataların kesinliği ve birikimi. Bir seferde tam bir daire boyunca 1 derece döndürmek kesindir. Tam bir dairede 2PI / 360 radyan döndürerek bir seferde değil. Bir piksel ızgarasında 4 kez 90 derece döndürme yapmak, tam olarak başladığınız yere geri dönmenizi sağlar. 4 kez bir piksel ızgarası üzerinde 2PI / 4 radyan döndürme gerçekleştirmez.


Bunu deneysel olarak test ederek, radyanlarda tek bir hassas şamandıra artışına sahip dört 90 derecelik rotasyondan sonra, toplamda 1.75E-7 hatası buluyorum (5 milyonda 1 kısımdan az). Bir piksel ızgarasında, dönen nesnenin / çerçevenin yarıçapının, dış kenarda 1 piksel hatayla karşılaşmadan önce (olması gerektiği yerden 0,5 doğrusal noktadan daha büyük bir nokta) önce milyonlarca pikselde olması gerekir. Başka bir deyişle, hassas kaybın pratikte bir sorun olması muhtemel değildir (özellikle çift kullanıyorsanız).
DMGregory

Sayısal bir perspektiften doğru söylüyorsunuz, ancak görsel açıdan, eğer bir sert kenardaki ONE piksel yanlış değerde belirirse, berbatsınız.
boyacı

Yukarıdaki "milyonlarca piksel" notuna bakın. Tipik büyüklükteki sprite için (örneğin, 2048 piksel genişliğinde veya daha küçük bir sırada) hata, büyük ölçüde yarım pikselden daha küçük olacaktır ve bu nedenle piksel ızgarasının kendisinin doğal yuvarlanması ile silinecektir. Ayrıca, bir kerede 360/7 derece döndürmenin de aynı hataları biriktireceğini unutmayın. Her iki sistemde de yuvarlama hatalarını, iki gücün toplamı olarak gösterilebilen artışlara yapılarak (üs alanı aralığında bir miktar sınırlama ile) yapışmasını ortadan kaldırabilirsiniz, ancak çok sayıda küçük artışlar biriktirmeyen kodu değiştirmek muhtemelen daha kolaydır.
DMGregory

@DMGregory "Pi ile içsel yuvarlama hatası" ile kastettiğim buydu. Diğer seçenek ise single / double'ları kullanmak değil, sayıları faktör olarak temsil etmenin bir yolunu kullanmaktır (bu nedenle hesaplama sonucu değil, o formül olarak 2 * pi / 360'ı temsil eder) ve sadece gerektiğinde sonucu hesaplayın. Herhangi bir "gerçek" programın bunu yapıp yapmadığını bilmiyorum, ama Mathematica gibi şeyler "0.333333 ....." yerine her zaman "1/3" ü "1/3" olarak gösterebilir. Ama sayıları geçtikten sonra haklısın sanırım, yuvarlama hatası var ama önemsiz
Michael Stum

2
1 derecelik bir açı, radyanlardan ziyade derece cinsinden doğru bir şekilde temsil edilmesi daha kolay olabilir, bir nesneyi döndürmek, trigonometrik işlevler gerektirdiğinden her iki şekilde de kesin değildir. cos 1 ° , pi / 180 kadar yuvarlama hatalarına tabidir .
Marcks Thomas

-3

Diyelim ki, herhangi birini seçmek ve ona bağlı kalmak, iki tanım kullanmaktan ve mevcut işlev için bunlardan hangisinin gerekli olduğunu tahmin etmekten daha iyidir. Ardından, ark uzunluğunu kullanmak günahın uygulanması için daha doğaldır, çünkü bu şekilde uygulanması için bir neden olabilir. Oyunlar genellikle C ++ veya C dilinde yazıldığından ve zaten günah ve uygulama olduğundan, bu tanımlamaya bağlı kalmak mantıklıdır.

[Eski mi kalkarsın]


Bu soruya gerçekten cevap vermiyor. Bunun yerine başka bir cevapla ilgili yorum yapmak mı istediniz?
Josh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.