kjeldstaps/moon-shadow-calculator
GitHub: kjeldstaps/moon-shadow-calculator
通过输入月球照片中的阴影参数和时间,计算并绘制出月球表面所有可能的拍摄位置环带的天文地理定位工具。
Stars: 1 | Forks: 0
# 月影计算器
通过阴影的长度和特定的时间点,推断出照片在月球上的可能拍摄位置。它是地球上基于阴影的地理定位技术在月球上的对应版本:输入物体的高度及其阴影长度(或直接输入太阳的高度角),再加上 UTC 日期和时间,它就会绘制出月球上所有可能产生该阴影的位置所在的环带。
**在线工具:** `https://YOUR-USERNAME.github.io/moon-shadow-calculator/`
(在本仓库中启用 GitHub Pages,从主分支根目录提供服务,然后将 YOUR-USERNAME 替换为你的用户名)
或者直接在任何浏览器中打开 `index.html`。它是一个完全独立的单文件。不会上传任何数据;所有操作均在你的浏览器中本地运行。
## 功能说明
- 输入阴影(物体高度和阴影长度)或太阳高度角,以及 UTC 日期和时间。
- 计算月球上的日下点(即太阳直射的点),并绘制出具有相同太阳高度角的所有位置组成的环带。
- 提供平面地图和球体视图、昼夜阴影,以及用于方位参照的月海和射纹系统陨石坑。
- 内置 Apollo 11、15、16 和 17 号登月点及其他地点的预设;每个预设都会将环带直接投射到真实的着陆点上。
- 提供一个互动面板,可以直接在照片上测量阴影,并将其与已知的太阳高度角进行比较。
## 工作原理
一个高度为 `h` 的垂直物体投射出长度为 `L` 的阴影,通过公式 `L / h = cot(a)` 即可确定太阳的高度角 `a`。由于月球没有大气层,因此无需进行大气折射修正。在任何瞬间,具有给定太阳高度角的表面点集都会形成一个以日下点为圆心的圆,其角半径为 `90度 - a`。该工具根据日期和时间计算出日下点,然后绘制出该圆。
## 准确度与验证
天文计算部分(Meeus 太阳和月球历表,加上包含物理天平动的 IAU / WGCCRE 月球旋转模型)通过与 astropy 星历表进行 3,000 个日期(跨越 1969 年至 2035 年)的交叉验证:表面日下点的最大误差为 0.45 公里(均方根误差为 0.16 公里),月球位置匹配精度达到 0.3 角秒。月球方向的定位独立锚定于已知的物理常数(自转极点距离黄道极点 1.54 度;天平动保持在已知的光学极限范围内)。完整详情请参见 `Methods_and_Validation.md`,并且使用 `validation/` 中的脚本可以复现每一个数值。
## 仓库内容
- `index.html` - 该工具的主文件,一个完全独立的单文件。
- `Methods_and_Validation.md` - 公式、约定、来源、局限性和验证数据。
- `validation/meeus_moon.py` - Python 参考引擎(仅使用标准库)。
- `validation/moon_core.js` - JavaScript 参考引擎,与页面中嵌入的代码完全一致。
- `validation/subsolar_truth.py` - 基于 astropy 的独立引擎,用作交叉验证。
- `validation/meeus_audit.py` - 运行完整的验证测试套件。
- `validation/requirements.txt` - 验证脚本所需的 Python 包。
## 复现验证
```
cd validation
pip install -r requirements.txt
python meeus_audit.py
```
## 局限性
- 它将月球建模为一个光滑的球体,忽略了局部坡度和地形。这种地形效应在公里级别,是现实世界中最大的不确定性来源,大于亚公里级的天文计算误差。
- 测量阴影面板仅用于演示该方法及其局限性。在照片中测量阴影是一项复杂的工作,该工具无法证明或证伪照片的具体拍摄地点。
## 作者
Kjeld Staps - [@kjeldstaps](https://x.com/kjeldstaps)
## 许可证
采用 MIT 许可证发布。详情请参阅 `LICENSE`。
标签:后端开发, 地理定位, 多模态安全, 天文学, 天文计算, 数据可视化, 逆向工具