gpt4 book ai didi

Java行星轨道模拟: centering planets

转载 作者:行者123 更新时间:2023-11-29 04:52:03 25 4
gpt4 key购买 nike

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

    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 视为其中之一角点,但是当你计算轨道时,你把它们当作 body 的中心。最简单的方法是更改​​可视化,而不是计算。

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

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.radius p.y - p.radius 你得到角点。当然,您可以以类似的方式更改所有轨道力学公式以从角点计算中心,但恕我直言,处理 x 更简单、更自然以 y 为中心。

关于Java行星轨道模拟: centering planets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35103994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com