問題タブ [orbital-mechanics]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 球体を周回するオブジェクトの制御
ユーザーが静的な球体の表面上を移動するオブジェクトを制御できるようにしたいと考えています。2 つのボタンを使用してオブジェクトの方向を時計回りと反時計回りに回転させ、小惑星のように常に前進します。
シーン キットには、SCNNode の 3 つの異なる方向プロパティがあり、どこから始めればよいかわかりません。球の周りの回転以外のすべてを実行する方法を理解しています。
c# - サイズと質量の問題で現実的なn体太陽系シミュレーションを行うことは可能ですか?
重要な注意: この質問は、コンピュータ ゲームの物理システムである "PhysX" とはまったく関係ありません (ボール ゲームなどのアーケード ゲームの物理に役立ちます)。PhysX は、Unity3D やその他のゲーム エンジンに組み込まれているシステムです。ここでは、PhysX はまったく関係ありません。
//////////////////// UPDATE (一番下を先に読む) /////////////////////
私は値をログに記録し、正確な問題がどこにあるかを検索してきましたが、見つけたと思います。コードにこのようなものがあります
加速度は 0,0000000000000009.. のようなものです。コードが流れると、フロートに問題はなく、本来の速度で増加します。しかし、最初は、地球の初期位置は (0,0,23500f) です。これは、最後に示したチャートで確認できます。
さて、スピード * タイムデルタ (この時点では 0,00000000000000005 のようなもの) を 23500 の位置に追加すると、基本的には追加されません。位置はまだ (0, 0, 23500) であり、(0,0, 23500.00000000000005) のようなものではないため、地球は動かないため、加速度は変化しません。
地球の初期位置を 0,0,0 に設定しても、加速度を 0.000000000000000009 に設定して、その位置が (0,0,23500) であると仮定すると、速度 * timedelta を「加算」します。それは (0,0,000000000000000000005) のようになり、増加し続けます。float が 0 の場合、このような小さな値を追加しても問題ありません。しかし、float が 23500 のようなものである場合、小さい値は加算されません。
それがまさにユニティの問題なのか、C#のフロートの問題なのかはわかりません。
そのため、小さな値で機能させることはできません。これを克服できれば、私の問題は解決します。
/////////////////////////////////////////////// ////////////////////////////
私は、太陽系をシミュレートするために n 体の物理学を開発してきたので、可能な限り現実的なものにするためにデータを収集してきました。しかし、データサイズに問題があります。私はインターネットを隅々まで検索しましたが、人々がどのようにこれを克服したかを説明するものは 1 つも見つかりませんでした。(もしそうなら)だから私はここで私のショットを試しています。
そこで、惑星間の距離、半径、「質量」の比率を一定に保つために、すべてのデータを計算するための Excel ファイルを作成しました。(なぜ誰かがインターネット上に「その」半径チャートがあれば地球の質量はどうなるのだろうか?)ssを添付ファイルとして提供します。基本的に、惑星のすべてのプロパティを特定の参照に「正規化」または「スケーリング」します。この場合、「地球の半径」として参照しました。
私は unity で作業していますが、ご存知のように、unity では「大きすぎる」または「小さすぎる」値を使用することはできません。そのため、太陽系を「大幅に」縮小する必要がありました。
したがって、ニュートンの万有引力の法則、つまり F = GMm/r^2 を使用して、簡単にするために、他のすべての物体から特定の物体について a = GM/r^2 を直接計算しています。
したがって、「太陽に向かう」地球の重力加速度の実際の値はおよそ 0,000006 km/s^2 であり、これは 1 で扱うには信じられないほど小さい値ですが、うまくいく可能性があります。それでも、この値を取得するには、地球の半径 (縮尺) を 6371 単位に設定し、太陽を 696,342 の縮尺に設定する必要があります。
だから私は言った、地球の半径を単位単位で1にしましょう。ですから、半径が変わると、質量も距離もすべてが変わります... 私は惑星の密度を維持し、新しい半径で新しい体積から質量を計算しました。すべての計算は添付ファイルにあります。
つまり、地球の半径を 1 とすると、太陽に向かっての重力加速度は 0,0000000000009 のようになり、途方もなく小さいのです。もちろん、Unity はその値では機能しません。
したがって、代わりに地球の半径を大きくすると、太陽の質量と半径がとてつもなく大きくなり、それを扱うことができなくなります。
他の人がこれをどのように修正したか、この問題を克服するために何をしたかはわかりませんが、ここからわかるように、太陽系の現実的な n 体シミュレーションを行うことは不可能に見えます。(少なくとも団結して)
したがって、画像を投稿するには10人の担当者が必要です-_-、代わりにリンクを提供します。 http://berkaydursun.com/solar_system_simulator/data.PNG また、ディレクトリの 1 つ上には、n 体計算を使用する実験的な太陽系シミュレーションがありますが、非現実的な値が使用されています。それは非常にうまく機能し、本物に近いようにも見えますが、いいえ、正しい比率ではありません^^ 必要に応じて、ここでテストできますhttp://berkaydursun.com/solar_system_simulator/
編集:うわー、ほとんどすべての段落を「だから」で始めました^^
c# - Ascending および Descending 軌道ノードの位置を取得する
私は宇宙シミュレーションに取り組んでおり、昇順および降順の軌道ノードの位置を取得するのに苦労しています。軌道の任意の角度で位置を取得する方法は知っていますが、軌道を周回する物体の中心ではなく、軌道の中心から測定されます。
ここに私が達成しようとしていることを示す写真があります:
中心から2つの軌道ノードまでの角度を取得するにはどうすればよいですか? これは私が今持っているコードです。ノードは正しい角度で返されますが、距離が正しくありません。
ios - オブジェクトの特定の X 位置の角度を取得する方法は?
これは、衛星が惑星で行うように、正方形を円の周りに移動する私の方法です。
ご覧のとおり、衛星の x と y の位置を取得し、度++ でこのメソッドを呼び出すと、惑星の周りの円運動が得られました。
しかし、この運動システムに関する私の問題はsatelite.position.x+satelite.size.width/2
、同じ運動システムで動き回る別のオブジェクトとの衝突を検出するために 度が必要なことです。
この値を取得する方法を知っている人はいますか??
unity3d - Unity 3D で円軌道式が機能しない
軌道や重力などの宇宙物理学を実装する必要があるゲームに取り組んでいます....
私の主な問題は、ゲームオブジェクトを惑星 (または別のオブジェクト) の周りに正しく周回させることができないことです。物理学の教科書の古い有名な式を使用してそれを実行しようとしています:
v = sqrt( G * ((m1 + m2)/r ))
ここで、v は周回物体の速度、G は定数、m1 と m2 は周回物体と惑星の質量、r は m1 と m2 の中心からの距離です。
ここに私の実装があります:
circularOrbit
Function はFixedUpdate
、物理スクリプティングを提供する unity内の各フレームと呼ばれます。
ここに私の問題を説明するのに十分な小さなgifがあります: http://makeagif.com/i/-JxBG8
私の設定に関する情報もいくつかあります:
- モンスターの質量は 1 単位、惑星の質量は 5 単位です。
- モンスターの重力はオフです。
- G の値は 1 です (問題を修正せずに多くの値をテストしました)。
最後に、これを行うのは私が初めてではないことを知っていますが、今週はこれを行う方法について多くのことを検索しました。主に私のコードは、いくつかの調整と変更を加えた Box2D ポートです。質問を投稿しましたここにGameDev.netがありますが、どんな提案もうまくいきました。
なぜそれが物理学の初心者の方法で機能しないのかを説明して助けてください.
java - Javaでの正確な円軌道方程式
0 から 2 までの double を生成します。0 は、ship.locY < Planets.get(i).locY && ship.locX == (planets.get(i).locX - Planets.get(i).radi) の場合です。(相対 X = 0、相対 Y < 0 の場合)
これはデータを使用して、宇宙船の X 速度と Y 速度を変更します。
この方程式は軌道の大部分で機能しますが、特定の状況下では、宇宙船が逆行する力を受けて減速するという問題があります。その後まもなく、惑星体によって反発され始め、しばらくすると再び引き寄せられ始めます。これが発生した元の位置に探査機が到達すると、元の軌道とは逆方向に動き始めます。
これは、宇宙船が波のような動きを始めるまで続きます。
これを解決する方法はありますか、それとも単に間違った方程式を使用していますか? 私はこれを約2週間修正しようとしています。私は現時点で物理学や微積分学の教育を受けていないため、理解は限られています。
編集:コメントには私の数学に関する質問があったので、ここで答えようとします. atan2 について私が知っていることから、-pi から pi までの数値を生成します。pi で割って -1 から 1 までの数値を生成し、次に 1 を加算して 0 から 2 を生成します。次に、この数値をラジアン単位として使用します。ラジアン (単位円) に関する私の知識は、円のラジアン測定値は 0 ~ 2pi であるということです。
編集 2: 次のコードは数学が大きく異なりますが、惑星の北極と南極に近づくときに引き寄せるのではなく反発する問題を除けば、望ましい結果が得られます。
その奇妙なatan2方程式ではなく、直線の傾きを使用することが役立つかどうかを確認するために、私はそれを非常に迅速に書き上げました. どうやらそうでした。また、このセクションでは、コードをもう少し読みやすくしました。
python - Python でのフォワード オイラー N ボディ シミュレーションが正しい結果を返さない
#Forward Euler N-Body Simulation このプログラムは、天体暦から特定の日付における太陽系の惑星の位置と速度を取得し、順オイラー積分法を使用して惑星の動きをシミュレートします。
このシミュレーションの背後にある基本的な物理学は、ニュートンの万有引力の法則です。
統合の反復ごとに、i 番目の惑星 (j !=i) に対する各 j 番目の惑星の影響が累積的に考慮されます。
# X の n の結果: print n
#Problem ご覧のとおり、各惑星の X 位置は反復ごとに非常に大きくなっています。実際、プログラムがあまりにも多くの反復で実行されると、数値が大きくなりすぎて表現できなくなります。明らかに、私が特定できなかった問題があります。
単純な構文エラーが見られないか、リストの構築のセマンティクスが正しくないと感じています。
明確にするために: 各最終リスト (X、Y、Z、VX、VY、VZ) について、最初のインデックスは反復を識別し、2 番目のインデックスは惑星を識別します。
したがって、X[1][1] は 2 回目の反復で水星の X 位置を示します。
ここで間違っていることを特定するのを手伝ってください。
c++ - Solar System Simulator Physics の統合の問題 (Unreal Engine 4、C++)
大学のプロジェクトで C++ を使用して Unreal Engine 4 でこの太陽系シミュレーターを作成していますが、C++ と UE4 は初めてで、数学が苦手なので、少し助けが必要でした。オイラー積分器は今のところ、いくつかの基本的な物理学を取り入れて月を地球の周りを周回させ、次におそらく速度ベルレ法を使用して太陽系全体をそのように構築することに進みます。ただし、現時点では、Euler 統合でさえ機能しません。これが Moon.cpp のコードです
値が正しくない可能性があります。この時点でテストを行っていました。このコードは、Google や複数の Web サイトで得たさまざまな情報に基づいていますが、この時点ではかなり混乱しています。何が起こっているかというと、月は一方向に進み始め、止まることはありません。私の問題は、地球の力/加速度/実際の重力にあることを知っています。月を押しのけるのではなく、引き離す必要があります。とにかく、誰かが私が間違っていることを知っているなら、あなたが言わなければならないことを聞いてとても感謝しています! ありがとう