我创建了一个简单的行星模拟,其中行星围绕恒星旋转。
轨道的代码是这样的:
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)旋转。
我需要行星的中心环绕恒星的中心,而不是它们的原点。
有一个好的解决办法吗?
最佳答案
您对轨道的计算很好。唯一的问题似乎是,在计算轨道和绘制行星时,您对“位置”的处理方式有所不同:绘制行星时,您将x
和y
视为拐角点之一,但是当您计算方向时,您将它们视为身体的中心。最简单的方法是更改外观,而不是计算。
由于您没有发布用于绘制形状的代码,因此只能猜测,但我认为它看起来像这样(显然是伪代码):
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);
}
这样,
x
和y
是行星中心的位置,并且使用p.x - p.radius
和p.y - p.radius
可以获得角点。当然,您可以以类似的方式更改所有轨道力学公式以从拐角点计算中心,但是恕我直言,将x
和y
视为中心要简单得多,也更加自然。