绘制双曲线以使它们在某一点交叉

时间:2014-11-17 21:53:02

标签: python matplotlib geometry

我想绘制多个双曲线,围绕相同的焦点,使用相同的半长轴,但不同的偏心率使它们在某一点交叉。 鉴于两个离心点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?

1 个答案:

答案 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()