gpt4 book ai didi

python - 如何抵消极坐标计算直角坐标的误差

转载 作者:行者123 更新时间:2023-12-01 00:08:15 24 4
gpt4 key购买 nike

我目前正在尝试使用 pygame 开发一个按比例缩放的宇宙模型。目前,当我计算行星的 x、y 位置时。尽管仅使用基于行星距离和角度的位置方程(无力),但行星正在慢慢落向太阳。

以下是当前计算距给定恒星距离的代码片段:

def d_obj(self, reference):

x_diff_sq = pow(self.x - reference.pos[0], 2)
y_diff_sq = pow(self.y - reference.pos[1], 2)
return pow(x_diff_sq + y_diff_sq, 0.5)

然后我将这个函数返回的内容传递给下一个函数来计算位置

def move(self, d):
self.theta += self.d_theta
self.x = int(d * math.cos(self.theta)) + total_d/2
self.y = int(d * math.sin(self.theta)) + total_d/2

total_d/2 是坐标偏移量,self.d_theta 是给定行星的自转周期。

每个行星都有其初始位置硬编码,我用它来计算所有行星的初始距离和当前距离之间的差异,每个刻度明显地行星向太阳移动约 1 公里。有什么办法可以尝试抵消这个影响吗?

我知道,在我以数百万公里绘制事物的规模中,我只是好奇这些方程的哪一部分导致了错误。我尝试过在 pow 上使用 '**' 运算符,经过一些在线研究发现 pow 更适合涉及 float 的幂。

还应该提到的是,所有计算均以公里为单位,然后在绘制之前,行星半径和 x、y 会从当前约为 4 天文单位的设定距离映射到屏幕。

最佳答案

你正在尝试让你的行星绕圈移动,对吧?

在您的代码中,您

  1. 使用 x 和 y 计算距离,
  2. 使用 delta_theta 计算新的 theta,
  3. 使用新的 theta 和距离计算新的 x 和 y。

您不必做所有这些。相反,您可以保持硬编码距离,然后

  1. 使用 delta_theta 计算新的 theta,
  2. 使用新的 theta 和(已知)距离来计算绘图的 x 和 y。

那么你的距离就根本不会漂移。

<小时/>

旁注:如果您计划让行星长时间运行,请确保将您的 theta 保持在 0 到 2*pi 之间,否则舍入误差将开始出现,您的 theta 准确性将会恶化。

<小时/>

您认为这会使添加卫星和小行星变得困难。

不是真的!

您可以对卫星执行相同的操作,注意它们属于哪个行星、到该行星的距离、delta_theta 和初始 theta(基于其母行星)。

如果你想开始做椭圆而不是圆形,你可以改变你的计算(使用方便的常数 orbital elements 而不是距离和 delta_theta,它不再是常数)来应用 Kepler's laws .

您也可以稍后添加小行星。在计算所有“平凡”移动物体的运动后,您可以保留小行星的笛卡尔位置和速度,并单独计算它们的运动。

关于python - 如何抵消极坐标计算直角坐标的误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59804555/

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