我想绘制多个双曲线,围绕相同的焦点,使用相同的半长轴,但不同的偏心率使它们在某一点交叉。 鉴于两个离心点e1,e2,应该如何改变θ以使它们在某个r上交叉双曲线?
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
a=-1.0 #semi-major axis
n_e1=2.0 #eccentricity of first orbit
n_e2=3.0 #eccentricity of second orbit
theta=np.arange(0,2*np.pi,2*np.pi/100)
r1 = a*(1-n_e1**2)/(1+n_e1*np.cos(theta))
r2 = a*(1-n_e2**2)/(1+n_e2*np.cos(theta))
ax = plt.subplot(111, polar=True)
ax.plot(theta, r1, color='r', linewidth=3)
ax.plot(theta, r2, color='b', linewidth=3)
ax.set_rmax(30.0)
ax.grid(True)
plt.show()
这给了我两个不交叉的双曲线。 我应该如何修改我的代码,以便双曲线在某个r处交叉,比如r = 10?
答案 0 :(得分:0)
这是非常简单的数学:您只需求解theta
来计算达到预定义theta
的特定r
。然后添加这些offsets
以旋转第二个双曲线。
import numpy as np
import matplotlib.pyplot as plt
theta=np.arange(0,2*np.pi,2*np.pi/400)
a= 1.0 #semi-major axis
r = 10.
e1 = 2.
e2 = 3.
def get_r(theta, e, a):
return a*(e**2 - 1)/(1+e*np.cos(theta))
def get_theta(r, e, a):
return np.arccos((a*(e**2 - 1) -r)/(e*r))
offset1 = get_theta(r, e1, a)
offset2 = get_theta(r, e2, a)
ax = plt.subplot(111, polar=True)
ax.plot(theta, get_r(theta, e1, a), color='r', linewidth=2)
ax.plot(theta, get_r(theta - offset2 + offset1, e2, a), color='b', linewidth=2)
ax.set_rmax(30.0)
ax.grid(True)
plt.legend()
plt.show()