【问题标题】:Convert a coordinate of J2000 to current date?将 J2000 的坐标转换为当前日期?
【发布时间】:2023-03-22 11:58:01
【问题描述】:

我正在使用 VSOP2000 数据文件,并且能够计算 T 时刻太阳和月亮的笛卡尔坐标...问题是如何将该坐标(在 J2000 的时间范围内)转换为当前日期(时间 T)?我只是想知道算法。

【问题讨论】:

  • OK.. 我终于找到了答案。旋转矩阵可在 VSOP87 论文中找到。由于 VSOP87 和 VSOP2000 都来自同一个“系统”,因此该矩阵足以适用于 VSOP2000 数据。当然,我可以使用 VSOP87 数据代替,但只有 VSOP2000 有我需要的月球数据。
  • 喂,你能指出我的 VSOP2000 算法吗?如果可能的话,我想更新我的 VSOP87 实现。我只能找到付费墙后面的论文。
  • 蒂姆,那个链接对你有帮助吗?您可以在包含的 Fortran 代码中找到该算法。如果您需要,我可以进一步详细说明...
  • 谢谢@Huy-Pham - 我希望能找到这篇论文。我发现这篇论文在做 VSOP87 时很有帮助。我还没有机会从事这方面的工作,其他项目太多了!

标签: astronomy


【解决方案1】:

您可能会考虑的几件事。

  1. 您可以使用 ASCOM Platform 将坐标从 JNow(局部地心)转换为 J2000 天体测量,使用 Transform 类。

  2. 如果您不想依赖 ASCOM,那么您可以从 SourceForge 获取它的源代码,您会看到它使用 IAU's SOFA library(基础天文学标准)。 SOFA 库有一个名为 World Wide Astronomy 的 C# 端口,但它有点错误。

  3. 您还可以查看 AASharp,这是天文算法 C 版本的移植版

【讨论】:

  • 感谢您的建议...ASCOM 和 SOFA 对我的项目来说太大了...而 AASharp 基于我已经拥有的 C++ 版本的 AA+...
  • 沙发图书馆其实不是很大。那么这个正确的沙发 ICRS 是 J2000,而 CIRS 是 JNow 吗?
【解决方案2】:

J2000 只是 JD2451545.0 (ref),所以您可以将 J2000 转换为 JD,然后按照算法从 JD 获取公历日期。这是一些基于天文算法第7章的python代码。

from datetime import datetime, timedelta

class J2000:
    def __init__(self, value):
        self.value = value

    def to_JD(self):
        return self.value + 2451545.0

    def to_datetime(self):
        jd = self.to_JD()
        # based on AA Ch7
        z = int(jd + 0.5)
        f = jd + 0.5 - z 
        alpha = int((z - 1867216.25) / 36524.25)
        a = z + 1 + alpha - int(alpha / 4)
        b = a + 1524
        c = int((b - 122.1) / 365.25)
        d = int(365.25 * c)
        e = int((b - d) / 30.6001)
        day = b - d - int(30.6001 * e) + f
        d = int(day) # day
        d_frac = day - d # fractional day
        m = e - 1 if e < 14 else e - 13 # month
        y = c - 4716 if m > 2 else c - 4715 # year
        return datetime(y, m, d) + timedelta(days=d_frac)

例如:

j = J2000(2456647 - 2451545) # J2000 for 12/20/13 12:00:00
j.to_datetime()
=> datetime.datetime(2013, 12, 20, 12, 0)

【讨论】:

  • 我不知道python...但是如果我没记错的话,上面的代码只是给了我从J2000开始经过的时间,对吗?我需要的是坐标的历元转换。我认为这叫做岁差。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-13
  • 2020-12-01
  • 2017-05-26
相关资源
最近更新 更多