在学行星运动之前,我打算写一个模拟程序,
首先找当下最稳定的模型——文心一言。
给出的代码很垃圾,动不动就是微积分。我作为一个高中生,完全看不懂。
要是这样,那还好,关键是,有bug。
我写了一堆,终于诱导出一个逻辑对的,但是按天文单位算,单位制不统一,没有bug就是一个bug
还是手写吧
import math
# 常数
#G = 6.67430e-11 # 万有引力常数 (m^3 kg^-1 s^-2)
m:float = 5.972e24 # 地球质量 (kg)
M:float = 1.989e30 # 太阳质量 (kg)
r:float = 149597_870_000 # 地球到太阳的距离 (m)
v=29700#地球公转平均速度
# 万有引力公式
def gravity(r, m1, m2):
G = 6.67430e-11 # 万有引力常数 (m^3 kg^-1 s^-2)
return G * m1 * m2 / (r**2)
#初始化
x=r
y=0
vx=0
vy=29790
n:int=0#天数
v =math.sqrt(vx**2+vy**2)
lx:list=[]#x坐标组成的list
ly:list=[]#方便绘图
while 1:
n+=1
print("第",n,"天")
r=math.sqrt(x**2+y**2)
#算加速度
g=gravity(r,m,M)
a=g/m
#更新速度
vx-=a*(x/r)*(3600*24)#如果按秒算,float精度丢失会直接吃掉改变量
vy-=a*(y/r)*(3600*24)#故只能按天算
#更新位置
x+=vx*(3600*24)
y+=vy*(3600*24)
v =math.sqrt(vx**2+vy**2)
print(x,y)
#import time
#time.sleep(0.1)
if n==365:
break
lx+=[x]
ly+=[y]
import matplotlib.pyplot as plt
# 创建数据点
#x = [1, 2, 3, 4, 5]
#y = [2, 3, 1, 4, 5]
# 创建散点图
plt.scatter(lx, ly)
# 设置标题和轴标签
plt.title('散点图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 显示图形
plt.show()