我创建了一个简单的行星模拟,其中行星围绕恒星旋转。
轨道的代码是这样的:

    a = a + vel * delta;
    planetX = Math.cos(a) * orbitRadius + parentStar.getX();
    planetY = Math.sin(a) * orbitRadius + parentStar.getY();


现在一切正常,但是我的问题是轨道不是从行星中心绕恒星中心开始。
This is what happens

如您所见,小圆上的第一个红点是围绕第二个小红点旋转的行星的位置,这是因为圆是从(0,0)绘制的,所以两个行星(0,0 )绕星的(0,0)旋转。

我需要行星的中心环绕恒星的中心,而不是它们的原点。

有一个好的解决办法吗?

最佳答案

您对轨道的计算很好。唯一的问题似乎是,在计算轨道和绘制行星时,您对“位置”的处理方式有所不同:绘制行星时,您将xy视为拐角点之一,但是当您计算方向时,您将它们视为身体的中心。最简单的方法是更改​​外观,而不是计算。

由于您没有发布用于绘制形状的代码,因此只能猜测,但我认为它看起来像这样(显然是伪代码):

for (Planet p : starsAndPlanets) {
    drawCircle(p.x, p.y, p.radius * 2, p.radius * 2);
}


将此更改为以下内容:

for (Planet p : starsAndPlanets) {
    drawCircle(p.x - p.radius, p.y - p.radius, p.radius * 2, p.radius * 2);
}


这样,xy是行星中心的位置,并且使用p.x - p.radiusp.y - p.radius可以获得角点。当然,您可以以类似的方式更改所有轨道力学公式以从拐角点计算中心,但是恕我直言,将xy视为中心要简单得多,也更加自然。

10-01 20:25