属性(ra,dec)和(hlon,hlat)之间的一致性

时间:2016-06-07 09:47:45

标签: pyephem

我刚开始学习天文学。

我使用pyephem来理解不同的坐标系,例如地心说明, 地心黄道,日心黄道。

在phephem中,火星等行星体在地心说明书中具有属性(ra,dec), (hlon,hlat)在日心黄道中。我试着检查它们之间的一致性。

我的方法(下面附带的脚本)如下:

  1. 定义函数earthtilt以获得地轴倾斜
  2. 定义函数radec2cart和cart2radec以执行坐标转换  在球坐标和笛卡尔坐标之间。
  3. 定义函数R_x以获得旋转矩阵。
  4. 使用(ra,dec)属性获取sun / mars的地心主题equtorial坐标。
  5. 使用R_x和earthtilt将地心equtorial坐标旋转到地心黄道坐标
  6. (火星的日心黄道笛卡尔坐标)=  (火星的地心黄道坐标) - (太阳的地心黄道坐标)
  7. 改变以上火星的日心笛卡尔黄道坐标  火星的日心球面黄道坐标
  8. 比较火星的日心球面黄道坐标与  火星属性hlon和hlat。
  9. 我得到了:  黄道经度之差约为16.9"。  黄道纬度之间的差异约为9.2"。 这种差异有点太大了。
  10. 我的计算/概念是错误还是......?
  11. 
        ===================
        import ephem
        import numpy as np
        import math
    
        def R_x(theta):
          return np.array([[1,0,0],[0,math.cos(theta),math.sin(theta)],[0,-math.sin(theta),math.cos(theta)]])
    
        def radec2cart(rho,ra,dec):
          return np.array([rho*math.cos(dec)*math.cos(ra),rho*math.cos(dec)*math.sin(ra),rho*math.sin(dec)])
    
        def cart2radec(X):
          r=math.sqrt(X[0]*X[0]+X[1]*X[1])
          ra=ephem.hours(math.atan2(X[1],X[0])).norm
          dec=ephem.degrees(math.atan2(X[2],r))
          rho=math.sqrt(X[0]*X[0]+X[1]*X[1]+X[2]*X[2])
          return (rho,ra,dec)
    
        def earthtilt(date):
          pos=ephem.Ecliptic('90','0',epoch=date)
          return pos.to_radec()[1]
    
        def verifyhlonhlat(star,date):
          star.compute(date)
          sun=ephem.Sun(date)
          starx=radec2cart(star.earth_distance,star.g_ra,star.g_dec)
          eps=earthtilt(date)
          starx=R_x(eps).dot(starx)
          sunx=radec2cart(sun.earth_distance,sun.g_ra,sun.g_dec)
          sunx=R_x(eps).dot(sunx)
          starx=starx-sunx
          distance,hlon,hlat=cart2radec(starx)
          hlon=ephem.degrees(hlon)
          print([distance-star.sun_distance,ephem.degrees(hlon-star.hlon),ephem.degrees(hlat-star.hlat)])
    
        verifyhlonhlat(ephem.Mars(),ephem.Date('2016/6/7'))
        ===========
        >>> verifyhlonhlat(ephem.Mars(),ephem.Date('2016/6/7'))
        [1.3654961393161358e-05, -0:00:16.9, 0:00:09.2]
        

1 个答案:

答案 0 :(得分:1)

错误发生在: 6.(火星的日心黄道笛卡尔坐标)=(火星的地心黄道坐标) - (太阳的地心黄道坐标)

原因如下: 当我们看到一颗行星/恒星时,我们会看到行星/恒星在哪里,而不是行星/恒星在哪里。时间的差异是从行星/恒星到地球的光传播。