ゲーム開発で度数よりもラジアンが好まれるのはなぜですか?


39

私はラジアンの定義を調べてきましたが、数学者はそれらが度のように完全にarbitrary意的である代わりにpiから派生するため、ラジアンを好むことがわかりました。

しかし、おそらく関連する数学的理解が完全に欠如しているため、ゲーム開発でそれらを使用する説得力のある理由を見つけていません。ほとんどのsin / cos / tan関数は言語のラジアンですが、だれかが度数でライブラリ関数を作成することもできます(piを使用する場合の固有の丸め誤差を回避できます)。

私はこれを世論化された世論調査にしたくありません。ゲーム開発(および関連する数学研究)を行った人々から聞いてみたいと思います。私たち(そしておそらく他の人たち)が彼らが何のために良いのかを理解するのを助けるためだけに。


2
1つの答えは、それらが高速であるということです。sinなどの関数でラジアンを使用する前に、度数をラジアンに変換する必要はありません。もっと具体的に言うと、sin(x)を計算する1つの方法はテイラー展開を使用することであり、「x」は展開のためにラジアン単位である必要があります。
user3728501

回答:


49

ラジアンは数学で使用されます

  1. それらは円の弧の長さを測定します。すなわち、半径rの円の角度thetaの弧はちょうどr * theta(pi / 180 * r * thetaとは対照的)です。
  2. 三角関数がラジアンで定義されている場合、正弦の微分であるコサインや小さなxの場合はsin(x)〜= xのように、相互間の単純な関係に従います。度数で定義した場合、サインの導関数はpi / 180 *コサインになり、小さなxに対してsin(x)〜= pi / 180 * xになります。

数学者が円周率を好むということではありません。上記の理由から、実際には角度よりもラジアンが角度測定の方が自然な選択です。それらは、pi / 180などの要因が消える角度測定です。

IMOの質問は、「ラジアンを使用する理由」ではなく、「ラジアンを使用しない理由」です。つまり、ラジアンを使用する理由は必要ありません。それらは角度測定のデフォルトの選択です。度を使用する理由が必要です。たとえば、多くの人々(特にアーティスト)に馴染みがあるため、アプリのユーザーインターフェイスで角度を度単位で表示することを選択できます。ただし、個人的には、角度については度ではなくラジアンで考えることに慣れています。

これは実際にはgamedevの問題ではなく、数学的な問題であり、数学を使用するどの分野でも同じであるため、具体的なgamedevの例はありません。

(ところで、度を使用する場合よりも、「piを使用する場合の固有の丸め誤差」はありません...角度は常に整数ではなく実数でなければなりません。 )


4
上記に同意しました。私はかつて、円の256分の1に基づいて独自の標準を使用したゲームライブラリを見たことがあると付け加えます。その理由は、それらのトリガー関数が256エントリのルックアップテーブルを使用し、それらの間で補間されているためと思われます。それをしていないが、シリーズ展開からsin / cos / tanを計算する場合、またはFPUでFSIN / FCOS命令を使用する場合(最も一般的)、これらは両方ともラジアン単位の入力を期待します。全体にわたってラジアン単位です。
DMGregory

11
「ラジアンを使用しない理由」-「4年生の宿題はラジアンの悪夢だから」という唯一の良い答えを賭けたいと思っています。:)
ショーン・ミドルディッチ

5
@SeanMiddleditch 4年生のクラスはTauに移行する必要があります。Tauは360のラジアンバージョンです。数学を合理化し、専門家もそれを採用し始める必要があります。
ヴァル

2
256円の円または16384円の円は、それぞれ符号なしバイトまたは16ビット数を使用でき、加算/減算のオーバーフロー/アンダーフローが正しいことを行うことを意味します。ラジアンでは、おそらく浮動小数点を使用することになります。つまり、角度がゼロに近づくほど精度が高くなり、離れるにつれて精度が低下します。これは、ほとんどの場合役に立たないか愚かなことです。
rjmunro

2
@Val:Tauは、学位と同じ問題を解決しません。度により、整数で比較的小さな角度を簡単に測定できます。これは、学生がまだすべてを手作業で行っており、分数にあまり慣れていないときに初期のジオメトリを教えようとする場合に重要です。学生に与えられる通常の「時計の針の角度」の問題と、Pi / Tauラジアンではなく度にきれいにマッピングする方法を検討してください。これは、ゲームで学位がかつて人気があった理由と似ています:学位のルックアップテーブルを使用する方が簡単/高速(当時)であり、ニーズに十分に合った解像度を提供しました。
ショーンミドルディッチ

4

ネイサンの答えは非常に具体的です。より一般的な見解を提供したい:

ほとんどの処理ユニットにネイティブに実装されている最も複雑な数学的概念は、実数fieldのモデルとしての浮動小数点数です。視覚幾何学は、3次元の実ベクトル空間ℝ³に基づいています。座標は実数です。幾何学的数量は、長さ(単位の実数)に基づいています。

実数と長さのこのベースのために、実数またはそれぞれの角度をモデル化することも実用的です。長さ。ラジアンは、指定された角度の単位円の弧の長さです。したがって、それは実数に基づいてこれらの他のすべてのユニットと最も互換性のある角度のモデルです。長さ。たとえば、xの値が小さい場合のsin x〜xの近似は、x軸からその点までの円弧による単位円上の点のy座標の近似です。

角度長さでないことを忘れないでください。交差する2本の直線によって作成される平面の4つの部分の1つです。その量は、ℝ³の平面の対称性とユークリッドメトリックによって制限されます。

フルターンの一部として角度の値が与えられた場合、端点で接着されたセミオープン間隔[0,1)(または(0,1))で角度をモデル化する方が自然です。 360のフルターン(ところで:理論的には、これは実数に使用される10進法よりも良い選択です。)


0

私もラジアンを使用しますが、指定されたすべての理由から、学位が望ましい理由は少なくとも1つあります。それは、精度とエラーの累積です。一度に1度完全な円を回転することは正確です。一度に2PI / 360ラジアンの完全な円を回転させることはできません。ピクセルグリッドで90度回転を4回実行すると、開始した場所に正確に戻ります。ピクセルグリッドで2PI / 4ラジアン回転を4回実行することはしません。


これを実験的にテストすると、ラジアン単位の単精度浮動小数点増分で4回90度回転した後、合計で1.75E-7(500万分の1未満)のエラーが見つかりました。ピクセルグリッドでは、回転するオブジェクト/フレームの半径は、外縁で1ピクセルのエラー(本来の位置から0.5リニアpxを超えるポイント)が発生する前に、数百万ピクセルである必要があります。言い換えれば、精度の低下は実際には問題になりそうにありません(特にdoubleを使用する場合)。
DMGregory

数値的な観点からは正しいのですが、視覚的な観点からは、ハードエッジの1つのピクセルが間違った値にポップすると、ねじ込まれます。
ddyer

上記の「数百万ピクセル」の注意を参照してください。通常のサイズのスプライト(幅が2048ピクセル以下のオーダー)の場合、エラーはピクセルの半分よりも大幅に小さくなり、ピクセルグリッド自体の固有の丸めによって消去されます。また、一度に360/7度回転させると、同じエラーが累積することに注意してください。2の累乗の合計として表現可能な増分(指数範囲にある程度の制限がある)に固執することで、両方のシステムで丸め誤差を排除できますが、多くの小さな増分を蓄積しないコードに変更する方が簡単です。
DMGregory

@DMGregoryこれは、「Piの固有の丸め誤差」で意味したものでした。もう1つのオプションは、singles / doublesを使用せず、数値を係数として表現する方法(したがって、計算の結果としてではなく、その式として2 * pi / 360を表す)と必要な場合にのみ結果を計算する方法です。「実際の」プログラムがそれを行うかどうかはわかりませんが、Mathematicaのようなものは常に「1/3」を「0.333333 .....」ではなく「1/3」として表すことができます。しかし、私はあなたにしている権利を推測数字を経た後、丸めエラーがあるが、軽微
マイケルStum

2
1度の角度は、ラジアン単位よりも度単位で正確に表現しやすい場合があります。オブジェクトを回転させることは、三角関数を必要とするため、どちらの方法でも正確ではありません。cos 1°は、π/ 180と同じくらい丸め誤差の影響を受けます。
マルクストーマス

-3

2つの定義を使用し、現在の関数にどちらが必要かを少し推測するよりも、anyを選択してそれに固執する方がよいことに同意しましょう。それから、cmathがそれをそのように実装する理由であるかもしれないsinとcosの実装のためにアーク長を使用することはより自然です。ゲームは多くの場合C ++またはCで記述されており、すでに実装されている罪とcosが存在するため、その定義に固執することは理にかなっています。

[レガシーopenglをネジ止め]


これは本当に質問に答えているわけではありません。代わりに別の答えにコメントするつもりでしたか?
ジョシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.