Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在椭圆上显示点_Python_Matplotlib - Fatal编程技术网

Python 在椭圆上显示点

Python 在椭圆上显示点,python,matplotlib,Python,Matplotlib,我正在绘制木星的轨道(和两个星体群),我想通过注释最左边和最右边的点来显示我得到的图是一个椭圆,而不是一个圆,并显示它们在y=0时有不同的x值。谁能帮我做这个吗?我在python中使用pyplot 这是我的代码: 将numpy导入为np 导入scipy.integrate 将matplotlib.pyplot作为plt导入 mod=np.linalg.norm#重新标注混乱的语法;这将模块化 年=3000 def矢量(x1,y1,z1,x2,y2, z2):#取两个质量的位置并输出矢量差和模数

我正在绘制木星的轨道(和两个星体群),我想通过注释最左边和最右边的点来显示我得到的图是一个椭圆,而不是一个圆,并显示它们在y=0时有不同的x值。谁能帮我做这个吗?我在python中使用pyplot

这是我的代码:

将numpy导入为np
导入scipy.integrate
将matplotlib.pyplot作为plt导入
mod=np.linalg.norm#重新标注混乱的语法;这将模块化
年=3000
def矢量(x1,y1,z1,x2,y2,
z2):#取两个质量的位置并输出矢量差和模数
v=np.数组([x2-x1,y2-y1,z2-z1])
返回v,mod(v)
def衍生物(y,t):
G=4*np.pi**2
Mj=0.001
Ms=1
#Vij给出了从i指向j的矢量(导致i对j的作用力)
Vjs=向量(y[3],y[4],y[5],y[0],y[1],y[2])
Vsg=矢量(y[0],y[1],y[2],y[6],y[7],y[8])
Vjg=vectorise(y[3],y[4],y[5],y[6],y[7],y[8])
Vst=矢量(y[0],y[1],y[2],y[9],y[10],y[11])
Vjt=向量(y[3],y[4],y[5],y[9],y[10],y[11])
返回[y[12],y[13],y[14],#太阳位置的第一个微分
y[15],y[16],y[17],#木星位置的第一微分
y[18],y[19],y[20],#希腊位置的第一微分
y[21],y[22],y[23],#特洛伊位置的第一微分
-G*Mj*1/(Vjs[1]**3)*Vjs[0][0],#y[12]的二次微分(太阳x)
-G*Mj*1/(Vjs[1]**3)*Vjs[0][1],#y[13]的二次微分(太阳y)
-G*Mj*1/(Vjs[1]**3)*Vjs[0][2],#y[14]的二次微分(太阳z)
G*Ms*1/(Vjs[1]**3)*Vjs[0][0],#y[15]的二次微分(木星x)
G*Ms*1/(Vjs[1]**3)*Vjs[0][1],#y[16]的二次微分(木星y)
G*Ms*1/(Vjs[1]**3)*Vjs[0][2],#y[17]的二次微分(木星z)
-G*(Ms*1/(Vsg[1]**3)*Vsg[0][0]+Mj*1/(Vjg[1]**3)*Vjg[0][0]),
#y[18]的第二个微分(希腊文x)
-G*(Ms*1/(Vsg[1]**3)*Vsg[0][1]+Mj*1/(Vjg[1]**3)*Vjg[0][1]),
#y的第二微分[19](希腊语y)
-G*(Ms*1/(Vsg[1]**3)*Vsg[0][2]+Mj*1/(Vjg[1]**3)*Vjg[0][2]),
#y[20]的第二微分(希腊语z)
-G*(Ms*1/(Vst[1]**3)*Vst[0][0]+Mj*1/(Vjt[1]**3)*Vjt[0][0]),
#y[21]的第二次微分(特洛伊木马程序x)
-G*(Ms*1/(Vst[1]**3)*Vst[0][1]+Mj*1/(Vjt[1]**3)*Vjt[0][1]),
#y[22]的第二次微分(特洛伊木马程序y)
-G*(Ms*1/(Vst[1]**3)*Vst[0][2]+Mj*1/(Vjt[1]**3)*Vjt[0][
2] )]#y[23]的第二个微分(特洛伊木马程序z)
def解算器(
时间):#通过(24)矩阵输出(评估次数),每列y[i]表示y[i]随时间的演变
返回scipy.integrate.odeint(
func=导数,
t=次,
#使用到太阳的最大距离为5.455 AU,因此最小速度为2.622 AU/年(在太阳系中)(1AU=1.496*10^11 m)
y0=(0,0,0,#y[0-2]的初始值;太阳位置
0,5.455,0,#y[3-5]木星位置的初始值
-5.455*np.sqrt(3/4),5.455*1/2,0,#y[6-8]的初始值;希腊位置
5.455*np.sqrt(3/4),5.455*1/2,0,#y[9-11]的初始值;特洛伊木马位置
0,0,0,#y[12-14]的初始值;太阳速度
2.622,0,0,#y[15-17]的初始值;木星每年的速度(单位:AU)
2.622*0.5,2.622*np.sqrt(3/4),0,#y[18-20]的初始值;希腊速度(单位:AU/年)
2.622*0.5,-2.622*np.sqrt(3/4),0),#y[21-23]的初始值;特洛伊木马速度(单位:AU/年)
)
时间=np.arange(0,年,0.1)#10年≈ 1轨道
sol=solver(times).transpose()#创建24 x len(times)数组;每行代表一个Y
#绘制木星和两个星体的轨道
plt.plot(sol[3]-sol[0],sol[4]-sol[1],“k”,
标签class='Jupiter')#位置在太阳的框架中给出,因此减去太阳位置
plt.plot(sol[6]-sol[0],sol[7]-sol[1],label='Greens')
plt.plot(sol[9]-sol[0],sol[10]-sol[1],label='特洛伊木马程序〕
太阳=plt.Circle((太阳[0][0],太阳[1][0]),.2,color='r')#在轨道中心创建一个红色圆圈;太阳
plt.gcf().gca().add_艺术家(太阳)#获取当前图形和轴,添加太阳
#测试=plt.圆((0,0),.19,颜色='b')
#plt.gcf().gca().add_artist(test)#获取当前图形和轴,添加太阳
plt.注释('太阳',xy=(-0.7,0.3))
plt.title(f'木星、希腊和特洛伊绕太阳的轨道,超过{years}years')
plt.xlabel('X-从太阳到AU'的距离)
plt.ylabel('Y-距太阳的距离,单位为AU')
plt.图例(loc='左上角',shadow=True)
plt.show()