使用ephem库计算

计算方法

使用ephem库非常简单,算出视位置然后判断是否凌日就行了。

ephem库的使用

关于凌日的判断

ephem库自带视距计算,与太阳的视半径比较即可

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import ephem
import datetime
import numpy as np
import matplotlib.pyplot as plt

plt.title("Transit of Venus")
plt.xlabel("Differ of Right Ascension")
plt.ylabel("Differ of Declination")

ra=[]#储存方位角
dec=[]#储存高度角

Beijing=ephem.Observer()
Beijing.lon='116.391'
Beijing.lat='39.906'

begin=datetime.date(2012,6,5)
end=datetime.date(2012,6,8)

for i in range((end-begin).days+1):
Day=begin+datetime.timedelta(days=i)
for j in range(0,24):
for k in range(0,60):
for l in range(0,60):
Beijing.date=ephem.Date(datetime.datetime(Day.year,Day.month,Day.day,j,k,l))
venus=ephem.Venus(Beijing)
sun=ephem.Sun(Beijing)
s=ephem.separation(venus,sun)-venus.radius
if s<=sun.radius and venus.earth_distance<sun.earth_distance:
ra.append(float(repr(venus.ra-sun.ra)))
dec.append(float(repr(venus.dec-sun.dec)))

plt.scatter(ra,dec,s=1)

plt.show()