wpf datagrid 计算两个列的差值_天体到达指定方位角的时间计算

接上一篇天体的升起、中天、落下时间 - 且听风吟的文章 - 知乎,天体的升起落下和中天是满足一些特殊条件,对于一般情况,如指定一个方位角,要求其到达的时间,我们也可以计算出来。

可以先判断一个天体的方位角变化范围,已经在天体的方位角范围计算 - 且听风吟的文章 - 知乎文章中给出了计算方法。

实际计算时,也可以不用先判断一个天体的方位角变化范围,而是直接通过遍历一天的时间,来计算天体的方位角和目标方位角差值绝对值最小时的时间,而且此时天体的方位角和目标方位角误差要足够小,这时才能判定天体的确可以到达此方位,输出对应的时间即可。代码如下

#计算天体到达指定方位角的时间
from ephem import *
import math
#(1)构造观测者变量
wpf=Observer()
wpf.lat='34.179569'#纬度
wpf.lon='115.93635'#经度
wpf.elevation=40#海拔
wpf.pressure=0#压强
wpf.date=now()#取当前时间
#wpf.date="2020/4/10 10:44:53"#时间根据需要修改
#构造天体
s=Venus()#金星
s.compute(wpf)
s1=FixedBody()#自定义天体
s1._ra=10.0*math.pi/180
s1._dec=44*math.pi/180
s1._epoch=wpf.date#这个要和上面给的赤经赤纬的历元一致
az=270*math.pi/180#要求的方位角
def delt_az(obs,star,az):#返回与目标方位角的差值绝对值
    star.compute(obs)
    return abs(star.az-az)
def azi_time(obs,star,az):
    threshold_val=0.01*math.pi/180#误差阈值小于0.01°,相当于36角秒
    daz0=delt_az(obs,star,az)
    k=0
    for i in range(86400):
        obs.date=obs.date+1/86400#每次改变1秒,方位角如果是均匀变化且范围是360°,1秒钟改变15角秒
        daz=delt_az(obs,star,az)
        if daz0<threshold_val:#误差小于设定的阈值
            if daz0<daz:#方位角差值开始变大,证明上一次计算的天体方位角最接近目标方位角
                threshold_val=daz0#把阈值也调小,防止相邻的几秒也输出
                k=k+1
                d=(Date(obs.date+1/3)).tuple()
                star.compute(obs)
                print("{0}/{1:02d}/{2:02d}天体到达方位角{7}时间:{3:02d}:{4:02d}:{5:05.2f},高度角:{6:05.2f}".format(d[0],d[1],d[2],d[3],d[4],d[5],star.alt*180/math.pi,az*180/math.pi))
            else:
                threshold_val=0.01*math.pi/180#方位角差值开始变小,重新把误差阈值调到0.01°
        daz0=daz
    if k==0:
        print("天体达不到此方位")
t=wpf.date
for i in range(1):#求从当前时间开始连续2天到达此方位的时间
    wpf.date=t+i
    azi_time(wpf,s,7/4*math.pi)
    wpf.date=t+i
    azi_time(wpf,s1,7/4*math.pi)

22020/04/16天体到达方位角315.0时间:23:47:00.00,高度角:-12.77
2020/04/17天体到达方位角315.0时间:12:12:27.01,高度角:74.92
2020/04/17天体到达方位角315.0时间:18:18:21.02,高度角:12.76

可以看出,当天体的赤纬绝对值大于观测者纬度绝对值时,指定一个方位角,若是天体能够达到此方位角,则会出现两个时间,这是因为观测者的一个地平经圈会与天体的周日运动赤纬圈有两个交点。

同样的道理也可以计算天体到达指定高度角的时间,只需把上面的方位角换成高度角,阈值也合理的修改一下。不同的是只要天体能够达到某个高度角,一定会有两个时间,一个是升起时,一个是落下时。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值