球面座標を使用して、球面の周りに円弧を描いています。これが私のコードです:
int goose1a_egg1_step = 0; // THIS IS INCREMENTED EACH FRAME
float goose1a_egg1_theta=7.5; // START THETA
float goose1a_egg1_phi=4; // START PHI
float goose1a_egg1_theta_increment = 1.5/goose1a_egg1_divider; // END THETA = 6
float goose1a_egg1_phi_increment = 3/goose1a_egg1_divider; // END PHI = 1
float goose1a_egg1_theta_math1 = (goose1a_egg1_theta-(goose1a_egg1_theta_increment* r_goose1a_egg1_step))/10.0*M_PI;
float goose1a_egg1_phi_math1 = (goose1a_egg1_phi-(goose1a_egg1_phi_increment* r_goose1a_egg1_step))/10.0*2*M_PI;
r_goose1a_egg1_x = radius_egg_pos * sin(goose1a_egg1_theta_math1) * cos(goose1a_egg1_phi_math1);
r_goose1a_egg1_y = radius_egg_pos * sin(goose1a_egg1_theta_math1) * sin(goose1a_egg1_phi_math1);
r_goose1a_egg1_z = radius_egg_pos * cos(goose1a_egg1_theta_math1);
glPushMatrix();
glTranslatef(r_goose1a_egg1_x,r_goose1a_egg1_y,r_goose1a_egg1_z);
glColor3f (1, 1, .8);
glutSolidSphere (0.02,5,5);
glEnd();
glPopMatrix();
同じ START と END の位置を持つ追加の円弧を描きたいと思います。問題は、2 番目の円弧を最初の円弧とまったく同じ軌跡をたどらせるのではなく、円弧に変動性があるように数学を調整できるかということです。たとえば、2 番目のアークは、最初のアークからわずかに分岐したパスを移動します。DFW から JFK に向かう 2 つのフライトのようですが、ルートが少し異なります。
2 番目の弧のコードは次のとおりです (注: この 2 つの違いは「goose1a」と「goose1b」だけです。ここでは、ランダム変数にランダム整数をランダムに乗算していた大量のクラフトを追加したくありません。 :/ )
int goose1b_egg1_step = 0; // THIS IS INCREMENTED EACH FRAME
float goose1b_egg1_theta=7.5; // START THETA
float goose1b_egg1_phi=4; // START PHI
float goose1b_egg1_theta_increment = 1.5/goose1b_egg1_divider; // END THETA = 6
float goose1b_egg1_phi_increment = 3/goose1b_egg1_divider; // END PHI = 1
float goose1b_egg1_theta_math1 = (goose1b_egg1_theta-(goose1b_egg1_theta_increment* r_goose1b_egg1_step))/10.0*M_PI;
float goose1b_egg1_phi_math1 = (goose1b_egg1_phi-(goose1b_egg1_phi_increment* r_goose1b_egg1_step))/10.0*2*M_PI;
r_goose1b_egg1_x = radius_egg_pos * sin(goose1b_egg1_theta_math1) * cos(goose1b_egg1_phi_math1);
r_goose1b_egg1_y = radius_egg_pos * sin(goose1b_egg1_theta_math1) * sin(goose1b_egg1_phi_math1);
r_goose1b_egg1_z = radius_egg_pos * cos(goose1b_egg1_theta_math1);
glPushMatrix();
glTranslatef(r_goose1b_egg1_x,r_goose1b_egg1_y,r_goose1b_egg1_z);
glColor3f (1, 1, .8);
glutSolidSphere (0.02,5,5);
glEnd();
glPopMatrix();
私の 3D 数学の理解は非常に貧弱なので、これを行う方法があるかどうかさえわかりません。そうでない場合は、自分の設計に対する代替ソリューションを探します。しかし、球座標を使用して同じ START および END 位置を使用する 2 つの異なる円弧を描くことが可能であれば、アドバイスとガイダンスを大いに歓迎します。