最初,代码似乎在行星向恒星弯曲时起作用,但由于它应该被拉入恒星或进入轨道,它只是被推向相反的方向。我究竟做错了什么?当距离的符号发生变化时,行为的变化似乎发生了。
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 是恒星与行星之间的距离。角度是恒星和行星之间的角度(我感觉这是导致不良行为的原因。)