整数についてはすでに良い答えがありますが、浮動小数点を排除すべきではないと感じています。彼の答えでは、Byte56はおそらくthis王星の最大軌道に行くオプションを取りました。おそらくこのエクセルシートから取られたので、私はそれに固執します。
これにより、太陽系の境界は次のようになります。
7,376,000,000 km = 7.376x10 ^ 9 km = 7.376x10 ^ 14 cm≈ cm≈7.4x10 ^ 14 cm
倍精度浮動小数点フォーマットは 15の重要小数の最大精度を提供します。幸運なことに、原点が太陽の中心にあり、Pl王星の周りの位置を使用している場合、すべてのセンチメートルを表すことができます。たとえば、C ++の場合:
printf("%.0Lf\n", 7.4e14);
printf("%.0Lf\n", 7.4e14 + 1.0);
printf("%.0Lf\n", 7.4e14 + 2.0);
Output:
-------
740000000000000
740000000000001
740000000000002
あなたのゲームをPl王星の軌道に制限できるなら、おめでとうございます!それを表すのに倍精度で十分な精度があります。
ただし、シミュレーションでそれを表すのに十分であることに注意してください。しかし、これを簡単レンダリング。32ビットの浮動小数点数に変換する必要があります。おそらく、原点を変更して、近いオブジェクトに十分な精度を得る必要があります。また、Zバッファーとカメラの錐台のトリックを使用して、これらすべてを適切にレンダリングする必要があります。
さて、宇宙飛行士にオールトクラウド内の遠く離れた彗星を訪れてもらいたいなら、それはもっと大きいです、それで終わりです。約10 ^ 16 cmで、精度が失われ始めます。
printf("%.0Lf\n", 1.0e16);
printf("%.0Lf\n", 1.0e16 + 1.0);
printf("%.0Lf\n", 1.0e16 + 2.0);
Output:
-------
10000000000000000
10000000000000000 <-- oops
10000000000000002
もちろん、さらに悪化します。
そのため、この場合は、さらに高度なソリューションを試してみてください。ゲームプログラミングジェム 4 のPeter Freezeの記事「2.3大きな世界座標での精度の問題の解決」をご覧になることをお勧めします。IIRC、彼はあなたのニーズに合ったシステムを提案します、それは確かにある種の複数の異なる座標空間です。
これはいくつかのヒントにすぎません。おそらく、これを実行するには、自分のレシピを使用する必要があります。そのようなものを既に実装している誰かがあなたをもっと助けるかもしれません。たとえば、Kerbal Space Programの背後にいる人にメールを送信してみませんか?
あなたのゲームで頑張ってください!