天文吧 关注:513,785贴子:2,951,457
  • 24回复贴,共1

请教天文吧一个问题已知太阳黄经度数,求具体时间(精确到分钟或

只看楼主收藏回复

请教天文吧一个问题
已知太阳黄经度数,求具体时间(精确到分钟或秒,按北京时间计算)有具体公式或者查询网站吗?
问题举例:2021年黄经285度时北京时间为2021年1月5日11点23分37秒。那么2021年黄经287度时北京时间应该为多少?


IP属地:广东来自iPhone客户端1楼2021-01-26 22:58回复
    一般的星历是已知时间给出太阳黄经,而你是要反过来。
    可以先估计一个时间,比如1月7.5日,然后查该时间前后两个时间点的太阳黄经,求出一次函数,解出黄经为287的时刻。如果编程,则可求解数次,每次计算的两个时间间隔都比上一次缩短,逐渐逼近真实值。
    我编程算了一下,时间是7日10时28分57秒。楼主给出的285度时间应该来自于24节气,一般来说包含了力学时、光行差和章动校正,但不包含光时校正,所以我计算也是按照相同的校正来进行的。
    用Sky Safari计算这个时刻太阳地心黄经,为286度59分59.9秒,精度应该足够了。
    如果精度要求不高,近似认为太阳黄经每天改变360/365.25度就行了。


    IP属地:北京来自Android客户端2楼2021-01-26 23:55
    收起回复
      2025-08-30 09:37:42
      广告
      不感兴趣
      开通SVIP免广告
      国际流星组织推荐的一个换算太阳黄经和世界时的网站https//kikimoreaushinyappsio/SollongCalc/
      把上面网址的替换为冒号和点,打开网站,选择Sollong to Date输入太阳黄经(Enter solar longitude)和年份(Select the beginning year,Select the ending year),点击Calculate即可得到时间,该时间是世界时,换算为北京时间需要再加8小时。


      IP属地:湖北3楼2021-01-27 06:04
      收起回复
        这个不难算,比较麻烦的是精度问题。
        首先是回归年长度,可以取365、365.25、365.2422等等,以365.25举例;
        其次是太阳速度的不均匀是否考虑,考虑很好说,360°÷365.25,但精度也就到天了,不均匀就要根据最快、最慢的速度和时间,求出太阳速度函数,这个可以用正弦函数拟合;
        然后对该函数进行积分,不会的话,求出每天、每小时、每分钟的速度,然后加起来,,,,2021年黄经285度时北京时间为2021年1月5日11点23分37秒。求2021年黄经287度时北京时间,按上述可求得:2021年1月5日前后,太阳每6小时的速度为0.25464°,每天的速度为1.018°,到287°需要2°,2÷1.018=1.9646天,约47小时9分钟,也就是1月7日32分左右,当然,由于精度,分钟上应该就不对了。


        IP属地:山东4楼2021-01-27 08:37
        收起回复
          你要的程序。这是我刚学c++的时候用面向过程的方式写的,整个程序很长,这只是main函数部分。每次要计算什么就在main函数里面调用什么函数进行计算。
          复制过来估计缩进全乱了
          double day, hour, minute, second;
          int year, month;
          static constexpr double pi = 3.14159265359;
          static constexpr double TIMEZONE = 8;
          PLANET planet;
          // PLANET类包含计算行星的各种函数
          METHOD method
          // METHOD类包含太阳系天体计算所需的各种公用函数
          int main()
          {
          double JD =
          method.julian_day(2021,1,7,12,0,0);
          // 获得2021年1月7日12时的儒略日
          for (int i = 1;i <= 7;i++)
          {
          double dt = 10000 / pow(i, 3);
          // 求一次函数的时间间隔(秒)
          // 随着循环次数增加而逐渐减小
          double B = 0;
          // 太阳黄纬,近似认为等于0。
          double L1 =
          planet.L(3, JD + dt / 86400) - pi;
          // JD + dt / 86400时刻的太阳黄经
          // 基于计算时刻的平春分点和黄道面
          method.ecliptic_aberration(JD, L1, B, L1, B);
          // 进行光行差校正
          L1 += method.longitude_nutation(JD);
          // 进行黄经章动校正
          // 以下同理计算JD + dt / 86400时刻
          double L2 =
          planet.L(3, JD - dt / 86400) - pi;
          method.ecliptic_aberration(JD, L2, B, L2, B);
          L2 += method.longitude_nutation(JD);
          JD = method.interpolation_1(JD - dt / 86400, L2, JD + dt / 86400, L1, 287 * pi / 180);
          // interpolation(x1,y1,x2,y2,value)
          // 求出一次函数(x1,y1)-(x2,y2),并返回函数值为value时x的值。
          method.JD_to_date(JD + TIMEZONE / 24 - method.delta_t(JD) / 86400,
          year, month, day, hour, minute, second);
          // 将儒略日转换为日期
          // delta_t(JD)返回JD儒略日时刻世界协调时与力学时的时差(秒)
          std::cout << year << "年" << month << "月" << day << "日" << hour << "时" << minute << "分" << int(second) << "秒" << endl;
          // 每次循环都显示结果,是为了便于观察计算有没有收敛。由于太阳黄经变化非常线性,所以应该收敛得很快。
          }
          return 0;


          IP属地:北京来自Android客户端5楼2021-01-27 09:52
          收起回复