- 桌面应用
- 图形学
- 科研
【免费下载链接】stellarium
Stellarium is a free GPL software which renders realistic skies in real time with OpenGL. It is available for Linux/Unix, Windows, macOS and Haiku. With Stellarium, you really see what you can see with your eyes, binoculars or a small telescope.
印度二十七宿(nakṣatra,नक्षत्र)是人类历史上最古老的以月亮为基准的天区划分体系之一。本文以 Stellarium 开源仓库中 skycultures/indian_nakshatras 天空文化包为对象,讲解其背后的天文学史实、二十七宿逐宿的星群构成与词源含义,并深入到 index.json、description.md 与核心源码(StelSkyCultureSkyPartition.hpp、StelSkyCultureMgr.cpp、ConstellationMgr.cpp),说明 Stellarium 如何以"lunar_system(太阴月站系统)"的通用机制把这一历史体系渲染到三维星空之上。读完本文,你将掌握该天空文化的数据组织方式、每个月站的星群识别方法,以及如何在 Stellarium 中开启和定制印度二十七宿显示。
一、从吠陀时代到神庙石刻:这个天空文化从哪来
indian_nakshatras天空文化的核心主张是:只呈现单一的历史来源。根据 description.md 的 Introduction 章节,其图像素材直接临摹自印度 Aranthangi 附近 Tirupperunthurai(Athmanathaswamy 神庙)的 10 世纪石刻,且同一图案在神庙中出现两次并完全一致:一处刻在石门框上,另一处压印在神庙主厅的银质拱门(tiruvasi)上。readme.txt 也明确说明:"Here we offer a version of the drawings directly copied from a temple."(这里提供的是直接从神庙临摹的图案版本)。
从历史脉络看:
- 公元前 1000 年以前,印度河流域的吠陀文化中已存在考古可证的天文计时活动([#1][#2][#5][#6]);
- 当印度河文化向气候、动植物环境迥异的恒河平原扩展时,吠陀天文被重新整理,约公元前 900—600 年的《阿闼婆吠陀》(Arthavaveda)保存了一套完整的"nakṣatra"星宿体系;
- 约公元前 300 年的《吠陀支节录》(Vedāṅgajyotiṣa)给出首个完整的非宗教性描述;以 Ashvini 为起点的标准化排序确立于公元前 1 世纪或公元 1 世纪;
- 公元初几个世纪,来自希腊-巴比伦世界的占星思想(包括将黄道十二等分的黄道十二宫)被叠加到古老的二十七宿划分之上;自公元 1 千纪中叶起,该体系以今天的形式沿用至今。
值得注意的是,文档在 Zodiac 一节给出了词源学解释:词根 "kṣatra" 意为"光辉/主权",前缀 "na" 表示否定,因此 "nakṣatra" 字面即"无光辉/不亮"。大多数定义月站的星群确实较为暗弱(例外是角宿一 Spica、参宿四 Betelgeuse、大角 Arcturus)。文档进一步推断:正是因为这些星"几乎不可见",才可能推动了"坐标系统"(本质上是不可见的)的发明——从"几乎不可见"到"按定义不可见"的思维跳跃很小。吠陀文化何时完成这一数学化步骤虽不可考,但公元前 1 千纪内存在该坐标系统的可能性极高;而黄道十二宫(Rāśi,राशिः)要到公元 1 千纪才被印度接纳。
该天空文化的元数据将自身分类为"classification": ["single"](单一来源),"region": "Southern Asia"(南亚),id为indian_nakshatras,见 index.json 与 index.json。此外,"fallback_to_international_names": false表示此天空文化不自动回退到国际通用星名。
二、月站:观测月亮(与太阳)的环形坐标系
2.1 观测方式的历史演变
description.md 的 Description 章节解释了 nakshatra 的观测学意义:
- 公元前 2 千纪,nakshatra 很可能是在月亮升起位置观测的——月亮每天约行进 12°(30 天走完 360°);
- 但史学家证明([#4]),后世改为在月亮中天(culmination)时刻观测。此时月亮与某些星座一同位于子午线上;
- 同时中天观测更容易,因为天顶方向的气层远比地平方向薄;同时,同时中天的星群共享同一条赤经(时角)圈,简化了坐标系与计时。
正是这种"共享赤经圈"的性质,让二十七宿本质上成为一套沿黄道(月亮路径)均匀划分的经度坐标系。
2.2 月亮、太阳、行星与银河的定位
- 月亮与太阳:nakshatra 被定义为环绕月亮运动的一圈星座,但太阳也走同一路径,太阳所在的 nakshatra 被称为maLe nakshatra;
- 行星:行星虽同样沿此路径运行,但传统上不在考虑之列;
- 银河:此体系不包含银河;
- 与黄道十二宫的关系:nakshatra 是独立于巴比伦黄道发展的太阴参照系,后因与希腊文化交流而合流。
三、二十七宿逐一解读:词源、星群与神庙图像
以下按 description.md 的 Constellations 章节顺序整理,并结合 index.json 中对应的原生名称(native)、发音(pronounce)与英文释义进行补充:
| 序号 | 宿名 | 词源/含义 | 星群构成与说明 |
|---|---|---|---|
| 1 | Ashvini(अश्विनी) | "马头"(Horse Head) | 自公元 1 千纪标准化以来的第一宿 |
| 2 | Bharani(भरणी) | "背负者"(Bearer) | — |
| 3 | Krittika(कृत्तिका) | 含义不确定,即昴星团(Pleiades) | 神话中为七位少女 |
| 4 | Rohini(रोहिणी) | "红色的"(The Red One) | 指偏红的毕宿五 Aldebaran 与毕星团(Hyades) |
| 5 | Mrigashira(मृगशिर) | "鹿头"(Deer's Head) | 由三颗暗星组成,呈模糊斑块状 |
| 6 | Ardra(आर्द्रा) | "湿润"(Wetness) | 第六宿,单星宿,对应参宿四 Betelgeuse |
| 7 | Punarvasu(पुनर्वसु) | "双神恢复者"(Twin-Restorer) | 名称指向某位神祇 |
| 8 | Pushya(पुष्य) | "滋养者"(Nourisher) | 指疏散星团 M44(蜂巢星团),周围四星围成方形 |
| 9 | Ashlesha(आश्लेषा) | "拥抱"(Embrace) | — |
| 10 | Magha(मघा) | "丰饶的"(Bountiful) | 有时指单星轩辕十四 Regulus,有时指呈锯齿形排列的四星组 |
| 11 | Purva Phalguni(पूर्व फाल्गुनी) | "前赤红者"(First Reddish) | 古老的 Phalguni 星座为凑足 27 个月站被一分为二,此为前半 |
| 12 | Uttara Phalguni(उत्तर फाल्गुनी) | "后赤红者"(Second Reddish) | Phalguni 星群的另一半,沿月亮每月运行方向 |
| 13 | Hasta(हस्त) | "手"(Hand) | 由五颗星组成 |
| 14 | Chitra(चित्रा) | "明亮者"(Bright One) | 历史上多为单星宿;但本神庙石刻中画成两颗星,伴星在后世星表中称 Apamvatsa,亦见于 IAU 星名目录 |
| 15 | Svati(स्वाती) | 女神之名 | — |
| 16 | Vishakha(विशाखा) | "叉状的"(Forked) | 位于天秤座,但仅 α、β Librae 的对应关系确定 |
| 17 | Anuradha(अनुराधा) | "追随 rādhā" | index.json 中作为正式宿列出(神庙图像 17_Anuradha.png) |
| 18 | Jyeshtha(ज्येष्ठा) | "最年长的"(Eldest) | 含义所指不明 |
| 19 | Mula(मूल) | "根"(Root) | 位于天蝎座区域,含银河最亮云带与中央显著暗纹及众多亮星;因此名称可能指一组(最多十颗)星,也可能指亮云/暗云图案 |
| 20 | Purva Ashadha(पूर्व आषाढा) | "前无敌者"(First Invincible) | 原更大的 Ashadha 星座被拆分后的前半 |
| 21 | Uttara Ashadha(उत्तर आषाढा) | "后无敌者"(Second Invincible) | Ashadha 的后半,沿月亮每月运行方向 |
| 22 | Shravana(श्रवण) | "倾听"(Listening) | — |
| 23 | Dhanishta(श्रविष्ठा) | "最著名的"(Most Famous) | 易于辨认的星群图案,即使无经验观测者也能识别 |
| 24 | Shatabhisha(शतभिष) | "百医者"(Hundred Physicians) | 部分历史绘图确实画出 100 颗星;此处仅表示为"许多"的一群 |
| 25 | Purva Bhadrapada(पूर्व भाद्रपदा) | "前福足"(First Blessed Feet) | 福足星座的前半 |
| 26 | Uttara Bhadrapada(उत्तर भाद्रपदा) | "后福足"(Second Blessed Feet) | 月亮每月自西向东运行,福足星座的东半部称"后福足" |
| 27 | Revati(रेवती) | "富足者"(Prosperous) | 标准计数中的最后一宿,象征新循环的开始 |
此外,index.json 的names数组末尾还保留了一个标记为 "Abh (Unused)"(未使用)的Abhijit(अभिजित,"无敌者"),即第 28 宿,对应图像 illustrations/28_Abhijit.png。它虽然偶见于文献但显然未进入标准 27 宿计数,这与源码注释中"The #28 is weird, sometimes listed but apparently not used"(第 28 宿很奇怪,偶尔被列出但显然未被使用)的说明一致,见 StelSkyCultureSkyPartition.hpp。
在 index.json 中,每个宿对应一个constellations条目,以"id"(如"CON indian_nakshatras Naks01")、"image"(插图文件、三个锚点星的 HIP 编号及其在图中的像素坐标、图像尺寸)与"lines"(由 HIP 编号构成的连线)组织。例如 Ashvini 的连线串起 HIP 9110、8832、8903、9884、10306、10732(index.json),Chitra 则仅连 HIP 66006 与 65474(角宿一)(index.json)——这正是文档所述"Chitra 被画成两颗星"的数字化证据。
3.1 神庙图像的视觉特征
本天空文化的插图(illustrations 目录下 1_Ashvini.png 至 28_Abhijit.png 共 28 张)以黑色为底、黄色边框,内部用橙色的装饰性"花朵状"图案代替写实星星,并以黄色线条串接成星群连线。以 illustrations/1_Ashvini.png(六朵花串成链状)与 illustrations/14_Chitra.png(仅两朵花且无连线)为例,可见不同月站的星数、排列与花朵繁简程度各不相同,忠实复刻了神庙石刻的原始样式。
四、从数据到星空:Stellarium 的 lunar_system 渲染机制
4.1 index.json 中的 lunar_system 配置
description.md 本身不包含 JSON 配置,但该天空文化的完整可渲染定义位于 index.json。其中lunar_system对象将印度二十七宿声明为 Stellarium 的"太阴月站"系统:
"lunar_system": { "name": { "native": "नक्षत्र-चक्रम्", "pronounce": "Naksatra", "english": "Nakshatras"}, "partitions": [ 27, 4], "extent": 5, "context": "indian lunar mansion", "link": { "star": 65474, "offset": 180}, "names": [ { "symbol": "१", "native": "अश्विनी", "pronounce": "Aśvinī", "english": "Physician to the Gods"}, { "symbol": "२", "native": "भरणी", "pronounce": "Bharaṇī", "english": "Bearer"}, // ... 共 27 宿 + 1 个 Abh (Unused) 条目 ] }各字段含义(结合 StelSkyCultureSkyPartition.hpp 的文档注释):
name:系统名称,含天城体(native)、拉丁转写(pronounce)与英文名(english)三种形式,由StelObject::CulturalName承载(StelSkyCultureSkyPartition.hpp);partitions:[27, 4]表示沿黄道均匀切分为 27 个大段(月站),每段再分 4 个小段,共 27×4 = 108 个分区——这正对应印度占星中著名的 108 份划分;源码注释明确指出 "The INDIAN Nakshatras are a system of 27 equal-sized stations, 13°20' in longitude each, divided in 4 equal parts"(印度二十七宿为 27 个等大月站,每站经度 13°20′,各分 4 等份)(StelSkyCultureSkyPartition.hpp);extent:5,表示显示的分区带在中心线南北各延伸 5°(StelSkyCultureSkyPartition.hpp);context:"indian lunar mansion",用于本地化消歧(StelSkyCultureSkyPartition.hpp);link:{"star": 65474, "offset": 180},指定以 HIP 65474(角宿一 Spica)为基准星、将其置于文化经度 180° 处,从而整体旋转月站序列;源码注释说明文献中亦存在以 β Ari 置于第一宿 8° 处的另一惯例,可能属地区差异,本包采用 Spica@180°(StelSkyCultureSkyPartition.hpp);names:27 + 1 个月站名称,symbol使用天城体数字(१, २, …,Abhijit 为 "Abh (Unused)")。
4.2 源码中的加载与绘制链路
Stellarium 对"天空文化可选分区系统"的通用支持在 StelSkyCultureSkyPartition.hpp 中有明确说明:每个天空文化可选地支持两类系统——黄道十二宫(zodiac)与太阴月站(lunar system)。
加载链路由 StelSkyCultureMgr.cpp 的makeCulturesList()完成:程序扫描skycultures目录,为每个子目录读取index.json,解析constellations、asterisms、zodiac、lunar_system、classification等字段。其中:
if (data.contains("lunar_system")) culture.lunarSystem = data["lunar_system"].toObject();(见 StelSkyCultureMgr.cpp。)随后在 ConstellationMgr.cpp 中,当lunarSystem存在多于一个键时即构造StelSkyCultureSkyPartition对象并默认显示其中心线:
if (skyCulture.lunarSystem.count()>1) { lunarSystem = StelSkyCultureSkyPartitionP(new StelSkyCultureSkyPartition(skyCulture.lunarSystem)); lunarSystem->centerLine->setDisplayed(true); } else if (lunarSystem) lunarSystem.clear();绘制时,drawLunarSystem()(ConstellationMgr.cpp)使用可配置颜色与线宽绘制中心线及各月站分区带;getLongitudeCoordinate()(ConstellationMgr.cpp)则把任意天体的位置换算为该文化系统的"文化经度"字符串(月站编号或"月站:子分区"格式),可供界面坐标显示使用(StelSkyCultureSkyPartition.hpp)。
4.3 在 Stellarium 中开启与定制二十七宿显示
lunar system 属于可选显示层,默认关闭,可通过如下方式控制(对应 ConstellationMgr.cpp 中从config.ini读取的默认值):
- 配置项(
config.ini):viewing/flag_skyculture_lunarsystem(默认false)——总开关(ConstellationMgr.cpp);viewing/skyculture_lunarsystem_fade_duration(默认1.0秒)——淡入淡出时长(ConstellationMgr.cpp);viewing/skyculture_lunarsystem_thickness(默认1,最小为 1)——线条粗细(ConstellationMgr.cpp);color/skyculture_lunarsystem_color(默认"0.0,1.0,0.5",即青绿色)——月站系统颜色(ConstellationMgr.cpp)。
- GUI / 快捷键:在天空文化设置中切换到
indian_nakshatras,并通过"显示月球月站/宫宿(若天空文化中定义)"动作(内部名actionShow_LunarSystem,见 ConstellationMgr.cpp)开启显示; - 脚本接口:可通过
ConstellationMgr暴露的setFlagLunarSystem、setLunarSystemColor、setLunarSystemThickness、setLunarSystemFadeDuration等方法(ConstellationMgr.cpp 等)编程控制。
安装方面,该天空文化通过 CMakeLists.txt 在构建时整体安装到share/stellarium/skycultures/indian_nakshatras/(排除了构建文件本身),运行时由StelFileMgr在skycultures目录下定位其index.json(StelSkyCultureMgr.cpp)。
五、历史研究的数字化:从庙宇到开源软件
本天空文化不仅是展示数据,也是一次天文史学研究的数字化实践:
- 单一来源原则:作者 Susanne M Hoffmann 与 B. S. Shylaja 合作研究 nakshatra 早期历史,本包刻意只采用 Tirupperunthurai 神庙这一处 10 世纪来源,避免混入不同历史时期、不同地区的歧义版本(description.md 的 Introduction);
- 验证观测史:月站从"月亮升起"观测到"月亮中天"观测的转变,依据 Shylaja & Shubha 2024 年发表于Journal for Astronomical History and Heritage的研究([#4]);
- 工具链验证:文档致谢部分说明,耶拿大学的学生们开发了用于生成此类天空文化的 "Sky Culture Maker Plugin",并以此包作为测试对象(description.md 的 Acknowledgements)。该插件源码位于 plugins/SkyCultureMaker,可帮助研究者把历史星图数据批量转换为 Stellarium 的
index.json格式。
六、参考资料来源
本文事实依据主要来自:
- skycultures/indian_nakshatras/description.md:历史背景、观测方式、逐宿词源与图像来源;
- skycultures/indian_nakshatras/index.json:月站系统参数、28 个星座条目(含 Abhijit)的 HIP 星表编号与连线定义、元数据(分类、地区、id);
- skycultures/indian_nakshatras/readme.txt:图像直接临摹自神庙的说明;
- src/core/StelSkyCultureSkyPartition.hpp:lunar_system 各字段的源码级文档与实现(含 27×4 分区、Spica@180° 链接约定);
- src/core/StelSkyCultureMgr.cpp:
index.json解析与lunar_system读取逻辑; - src/core/modules/ConstellationMgr.cpp:月站系统对象的构造与显示控制,以及相关配置项默认值。
文档列出的学术文献([#1]–[#6])包括 Débarbat et al. (1988)Mapping the Sky、Dikshit (1981)Bhāratīya Jyotish Śāstra、Hoffmann & Shylaja(即出)Nakshatras in the first millennium BCE、Shylaja & Shubha (2024, JAHH 27(3): 595-604)、Weber (1860-1862)Die Vedischen Nachrichten von der Naxatra与 Yano (2017) 关于 Atharvaveda-Pariśiṣṭa 中 Nakṣatra 体系的研究,可作为进一步考证的入口。
- 桌面应用
- 图形学
- 科研
【免费下载链接】stellarium
Stellarium is a free GPL software which renders realistic skies in real time with OpenGL. It is available for Linux/Unix, Windows, macOS and Haiku. With Stellarium, you really see what you can see with your eyes, binoculars or a small telescope.
相关推荐
verl 中的 Sandbox Fusion 工具集成:基于 sglang 多轮 rollout 的安全代码执行与分布式速率限制设计
verl 中的 Sandbox Fusion 工具集成:基于 sglang 多轮 rollout 的安全代码执行与分布式速率限制设计 本文围绕 verl/Hyb
桌面应用图形学科研Stellarium 现代天空文化指南:IAU 88 星座体系的构成、历史与源码实现
Stellarium 现代天空文化指南:IAU 88 星座体系的构成、历史与源码实现 本篇技术指南围绕 Stellarium 内置的 Modern(现代)天空文
桌面应用图形学科研Stellarium 中的 Kamilaroi/Euahlayi 天空文化星群:原住民天文学的数字化还原与星群详解
Stellarium 中的 Kamilaroi/Euahlayi 天空文化星群:原住民天文学的数字化还原与星群详解 Kamilaroi(又称 Gomeroi)与
桌面应用图形学科研
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考