2013-06-22 2 views
3

Как я могу подключить два графика в точке прекращения? У меня есть уравнение для точки разрыва.Python: Заполнение промежутка между двумя графиками

import numpy as np 
import pylab 

r1 = 1 # AU Earth                 
r2 = 1.524 # AU Mars                
deltanu = 75 * np.pi/180 # angle in radians          
mu = 38.86984154054163 

c = np.sqrt(r1 ** 2 + r2 ** 2 - 2 * r1 * r2 * np.cos(deltanu)) 

s = (r1 + r2 + c)/2 

am = s/2 


def f(a): 
    alpha = 2 * np.arcsin(np.sqrt(s/(2 * a))) 
    beta = 2 * np.arcsin(np.sqrt((s - c)/(2 * a))) 
    return (np.sqrt(a **3/mu) * (alpha - beta - (np.sin(alpha) 
                 - np.sin(beta)))) 


def g(a): 
    alphag = 2* np.pi - 2 * np.arcsin(np.sqrt(s/(2 * a))) 
    betag = -2 * np.arcsin(np.sqrt((s - c)/(2 * a))) 
    return (np.sqrt(a ** 3/mu) 
      * (alphag - betag - (np.sin(alphag) - np.sin(betag)))) 


a = np.linspace(am, 2, 500000) 

fig = pylab.figure() 
ax = fig.add_subplot(111) 
ax.plot(a, f(a), color = '#000000') 
ax.plot(a, g(a), color = '#000000') 
pylab.xlim((0.9, 2)) 
pylab.ylim((0, 2)) 

pylab.show() 

enter image description here

Уравнение, которое отражает точку является: dt = np.sqrt(s ** 3/8) * (np.pi - betam + np.sin(betam)), где betam = 2 * np.arcsin(np.sqrt(1 - c/s)) так dt = 0.5 на a = s/2. Однако разрыв между графиками выглядит больше, чем точка.

Я добавил: ax.plot([am, am], [.505, .55], color = '#000000'), который заполняет промежуток, но он чувствует себя неуместно.

enter image description here

+0

Вы уверены, что функция 'g' определена правильно? Я нахожу, что 'g (am) == 0.551860976346', что не совпадает с' f (am) == 0.5'. – esmit

+0

@ подарок в зависимости от книги. Я неоднократно перепроверял все уравнения. – dustin

+0

Вы сами лишили уравнения? Книга может быть неправильной. Каков физический смысл разрыва? – esmit

ответ

2

Кажется, что, возможно, вы должны использовать только одно значение для betag:

import numpy as np 
import matplotlib.pyplot as plt 

r1 = 1 # AU Earth                 
r2 = 1.524 # AU Mars                
deltanu = 75 * np.pi/180 # angle in radians          
mu = 38.86984154054163           
c = np.sqrt(r1 ** 2 + r2 ** 2 - 2 * r1 * r2 * np.cos(deltanu)) 
s = (r1 + r2 + c)/2 
am = s/2 

def g(a, alphag, betag): 
    return (np.sqrt(a ** 3/mu) 
      * (alphag - betag - (np.sin(alphag) - np.sin(betag)))) 

a = np.linspace(am, 2, 500000) 

fig, ax = plt.subplots() 

alphag = 2 * np.pi - 2 * np.arcsin(np.sqrt(s/(2 * a))) 
betag = 2 * np.arcsin(np.sqrt((s - c)/(2 * a))) 
ax.plot(a, g(a, alphag, betag), color = 'r') 
alphag = 2 * np.arcsin(np.sqrt(s/(2 * a))) 
ax.plot(a, g(a, alphag, betag), color = 'r') 

plt.show() 

дает

enter image description here

Я действительно не знаю, что происходит Вот; Я нашел это с любопытством.

+0

Эти формулы основаны на времени передачи в орбитальной механике. 'betag' только тогда, когда угол больше 180, но меньше 360. – dustin

+0

Замечательно, что он работает, но я считаю, что мы также сможем добиться результата с помощью трех уравнений. Ну, по крайней мере, это то, что книга побудила меня поверить. – dustin

+0

Если вы наложите два графика, эта нижняя часть графика выше исходного. – dustin