news 2026/9/24 14:39:53

Stellarium 天空文化深度解析:indian_nakshatras 印度二十七宿(Nakshatras)的史实还原与源码实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Stellarium 天空文化深度解析:indian_nakshatras 印度二十七宿(Nakshatras)的史实还原与源码实现
  • 桌面应用
  • 图形学
  • 科研

【免费下载链接】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.

项目地址:https://gitcode.com/gh_mirrors/ste/stellarium
点击查看免费下载

印度二十七宿(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"(南亚),idindian_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)与英文释义进行补充:

序号宿名词源/含义星群构成与说明
1Ashvini(अश्विनी)"马头"(Horse Head)自公元 1 千纪标准化以来的第一宿
2Bharani(भरणी)"背负者"(Bearer)
3Krittika(कृत्तिका)含义不确定,即昴星团(Pleiades)神话中为七位少女
4Rohini(रोहिणी)"红色的"(The Red One)指偏红的毕宿五 Aldebaran 与毕星团(Hyades)
5Mrigashira(मृगशिर)"鹿头"(Deer's Head)由三颗暗星组成,呈模糊斑块状
6Ardra(आर्द्रा)"湿润"(Wetness)第六宿,单星宿,对应参宿四 Betelgeuse
7Punarvasu(पुनर्वसु)"双神恢复者"(Twin-Restorer)名称指向某位神祇
8Pushya(पुष्य)"滋养者"(Nourisher)指疏散星团 M44(蜂巢星团),周围四星围成方形
9Ashlesha(आश्लेषा)"拥抱"(Embrace)
10Magha(मघा)"丰饶的"(Bountiful)有时指单星轩辕十四 Regulus,有时指呈锯齿形排列的四星组
11Purva Phalguni(पूर्व फाल्गुनी)"前赤红者"(First Reddish)古老的 Phalguni 星座为凑足 27 个月站被一分为二,此为前半
12Uttara Phalguni(उत्तर फाल्गुनी)"后赤红者"(Second Reddish)Phalguni 星群的另一半,沿月亮每月运行方向
13Hasta(हस्त)"手"(Hand)由五颗星组成
14Chitra(चित्रा)"明亮者"(Bright One)历史上多为单星宿;但本神庙石刻中画成两颗星,伴星在后世星表中称 Apamvatsa,亦见于 IAU 星名目录
15Svati(स्वाती)女神之名
16Vishakha(विशाखा)"叉状的"(Forked)位于天秤座,但仅 α、β Librae 的对应关系确定
17Anuradha(अनुराधा)"追随 rādhā"index.json 中作为正式宿列出(神庙图像 17_Anuradha.png)
18Jyeshtha(ज्येष्ठा)"最年长的"(Eldest)含义所指不明
19Mula(मूल)"根"(Root)位于天蝎座区域,含银河最亮云带与中央显著暗纹及众多亮星;因此名称可能指一组(最多十颗)星,也可能指亮云/暗云图案
20Purva Ashadha(पूर्व आषाढा)"前无敌者"(First Invincible)原更大的 Ashadha 星座被拆分后的前半
21Uttara Ashadha(उत्तर आषाढा)"后无敌者"(Second Invincible)Ashadha 的后半,沿月亮每月运行方向
22Shravana(श्रवण)"倾听"(Listening)
23Dhanishta(श्रविष्ठा)"最著名的"(Most Famous)易于辨认的星群图案,即使无经验观测者也能识别
24Shatabhisha(शतभिष)"百医者"(Hundred Physicians)部分历史绘图确实画出 100 颗星;此处仅表示为"许多"的一群
25Purva Bhadrapada(पूर्व भाद्रपदा)"前福足"(First Blessed Feet)福足星座的前半
26Uttara Bhadrapada(उत्तर भाद्रपदा)"后福足"(Second Blessed Feet)月亮每月自西向东运行,福足星座的东半部称"后福足"
27Revati(रेवती)"富足者"(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,解析constellationsasterismszodiaclunar_systemclassification等字段。其中:

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暴露的setFlagLunarSystemsetLunarSystemColorsetLunarSystemThicknesssetLunarSystemFadeDuration等方法(ConstellationMgr.cpp 等)编程控制。

安装方面,该天空文化通过 CMakeLists.txt 在构建时整体安装到share/stellarium/skycultures/indian_nakshatras/(排除了构建文件本身),运行时由StelFileMgrskycultures目录下定位其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.

项目地址:https://gitcode.com/gh_mirrors/ste/stellarium
点击查看免费下载

相关推荐

上一篇:magnetW主题市场:用户分享与下载平台
下一篇:Sonobuoy自定义配置详解:sonobuoy-config.yaml完全解析

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 14:39:47

WSL2资源分配实战:.wslconfig配置详解与内存优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 14:36:09

STM32 SWD烧录失败的物理层根因与实操排错指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 14:35:55

单片机毕设选题推荐:基于 STM32 或 51 单片机多模式智能窗帘监测与控制系统设计 基于 STM32 或 51 单片机 OLED 显示环境监测智能窗帘装置设计(025608)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华