最初は、惑星が恒星に向かって曲がるときにコードが機能しているように見えますが、その後恒星に引き込まれるか軌道を描く必要があるため、反対方向に押しのけられます。私は何を間違っていますか?距離の符号が変わると挙動が変わるようです。
if(!alive){
return;
}
xPos += t * velocity/10000 * cos(direction / 180 * 3.14);
yPos += t * velocity/10000 * sin(direction / 180 * 3.14);
double gravity = 1000;
double starX = 1920/2;
double starY = 1080/2;
double deltaX = xPos - starX;
double deltaY = yPos - starY;
double distance = sqrt(pow(deltaX, 2) + pow(deltaY, 2));
int modifier = 1;
if (xPos > starX){
modifier = -1;
}
double angle = atan(deltaY / deltaX) * 180 / 3.14;
std::cout << angle << std::endl;
xPos += t * gravity / pow(distance,2) * modifier * cos(angle / 180 * 3.14);
yPos += t * gravity / pow(distance,2) * modifier * sin(angle / 180 * 3.14);
if (xPos > starX - 100 && xPos < starX + 100 && yPos > starY - 100 && yPos < starY + 100){
alive = false;
}
xPos と yPos は惑星の現在位置です。t は最後の更新からの時間です。速度と方向は、惑星が始まる最初の速度と角度です。私たちは宇宙にいるので、この力は決して変わりません。重力は重力定数です。starX と starY は星の位置で、distance は星と惑星の間の距離です。angle は、星と惑星の間の角度です (これが望ましくない動作を引き起こしていると感じています)。