3

ベクトルがどのように機能するかをよりよく理解するために、太陽を周回する地球の非常に単純なシミュレーションを作成しようとしています。現在、私が望むのは、地球が太陽の周りを一周することだけです。物理法則は考慮されていません。

私がやっていることはうまくいくだろうと思っていましたが、フィボナッチスパイラルに何らかの動きを引き起こしました.

// initial positions
vec2 sun(0.0,0.0);
vec2 earth(10.0,0.0);

while(true) {

    vec2 earthToSun = normalize(sun - earth); // this is the vector 'pointing from the earth towards the sun'
    vec2 speedVector = vec2(-earthToSun.y, earthToSun.x); // this is the vector perpendicular to the earthToSun vector

    earth = earth + earthToSun + speedVector; // move the earth along the resulting vector

}

計算のどこが間違っていますか?

4

2 に答える 2

3

なぜ三角法でそれをしないのですか:

#define PI 3.1415926
float r = 10.0;
for (int theta=0; theta<2*PI; theta += 0.01)
{
    float x = r*cos(theta),
          y = r*sin(theta);
    earth = vec2(x, y);
}

明らかに、期間、 の開始値theta、増分などを適宜変更してください。

于 2013-05-25T21:22:16.297 に答える
1

あなたの初期条件は

vec2 sun(0.0,0.0);
vec2 earth(10.0,0.0);
vec2 speedVector = vec2(-earthToSun.y, earthToSun.x);

よさそうですね。ただし、方程式には 2 つの問題があります。

  1. 地球の位置は、次のように時間とともに変化するはずです。

    vec2 earthToSun = normalize(sun - earth);
    earth = earth + earthToSun;  // no speedVector added here
    

    更新コードで地球に追加していないことに注意してください。speedVectorそこで行ったことは、シミュレーション全体で地球を加速することです。

  2. 関数は、二乗距離normalizeで正規化する必要があります。どのように実装したかわかりません。F = g m1 m2 / r ^ 2. r ^ 2ではなくrで割るだけだと思います。 normalize

あなたの地球は必ずしも円になるとは限りません。楕円軌道になる可能性が高いです。また、十分に小さいステップ サイズを選択してください。繰り返しごとearthに、太陽までの距離のごく一部だけを変更する必要があります。そうしないと、明らかな統合エラーが蓄積されます。

于 2013-05-25T21:22:22.843 に答える