宫位对象
PalaceData 的字段,以及星耀判断、空宫判断与飞星族的全部方法。
宫位是斗数分析的主战场。数据本身是 PalaceData,chart.palace(...) 返回的是
PalaceRef——同一份数据外加一个指回星盘的引用。
PalaceData | PalaceRef<'a> | |
|---|---|---|
| 从哪来 | chart.palaces[i]、sp.target 等字段 | chart.palace(...)、star.palace()、sp 之外的查询入口 |
| 字段 | 全部 | 经 Deref 全部可读,data() 取到底层 |
| 判断方法 | has / is_empty / flies_to 一族(目标宫要传 &PalaceData) | 同名方法,目标宫可直接写索引或宫名 |
| 独有 | — | opposite_palace / surrounded_palaces / mutaged_places / astrolabe |
本页条目按 PalaceRef 的形式给签名;PalaceData 上的同名方法只差在飞星族的
目标宫参数类型(&PalaceData 而非 impl Into<PalaceTarget>)。
let soul = chart.palace(Palace::Soul).unwrap();
soul.name; // 经 Deref 直接取字段
soul.opposite_palace(); // 视图独有本页示例统一用 Language::ZhCN 排盘,因此输出里的展示值都是中文。
name 等枚举字段本身与语言无关,展示时才经 translate_* 转成文本。
字段
| 字段 | 类型 | 说明 |
|---|---|---|
index | usize | 宫位索引 0–11,0 为寅宫 |
name | Palace | 宫名 |
is_body_palace | bool | 是否身宫 |
is_original_palace | bool | 是否来因宫(宫干与年干相同且不在子丑二宫) |
heavenly_stem | HeavenlyStem | 宫干,决定本宫飞出的四化 |
earthly_branch | EarthlyBranch | 宫支,由索引固定:0 为寅、11 为丑 |
major_stars | Vec<Star> | 十四主星中落在本宫的,按安放顺序 |
minor_stars | Vec<Star> | 十四辅星中落在本宫的 |
adjective_stars | Vec<Star> | 杂耀 |
changsheng12 | StarKey | 长生十二神,每宫恰好一个 |
boshi12 | StarKey | 博士十二神 |
jiangqian12 | StarKey | 将前十二神 |
suiqian12 | StarKey | 岁前十二神 |
decadal | Decadal | 大限:岁数区间与宫干支 |
ages | Vec<u32> | 小限经过本宫的虚岁列表 |
overrides | Option<Arc<TableOverrides>> | 排盘时生效的自定义四化与亮度表;未自定义时为 None |
四组十二神与三组星耀的区别
主星、辅星、杂耀是列表,一宫可以有零到多颗。 长生、博士、将前、岁前十二神是每宫恰好一个的标记,十二宫刚好排满一轮, 因此是单值字段而不是列表。
overrides 是输入不是结果
overrides 携带的是排盘配置里的自定义表——飞星族方法要按宫干查四化,
自定义表可能改写了某个天干的四化,因此宫位得随身带着它。
它不参与序列化,DTO 与 JSON 输出里都没有这一项。
has / not_have / has_one_of
用途 判断本宫坐了哪些星。
斗数含义 星耀落宫是斗数的基本盘面信息。「命宫坐紫微天相」即
has(&[ZiweiMaj, TianxiangMaj])。查找范围覆盖主星、辅星、杂耀三组。
签名
pub fn has(&self, stars: &[StarKey]) -> bool
pub fn not_have(&self, stars: &[StarKey]) -> bool
pub fn has_one_of(&self, stars: &[StarKey]) -> bool参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
stars | &[StarKey] | 是 | — | 星耀标识列表 |
返回值
| 方法 | 语义 |
|---|---|
has | 列表中每一颗都在本宫 |
not_have | 列表中一颗都不在本宫 |
has_one_of | 列表中至少一颗在本宫 |
示例
use x_iztro::StarKey::*;
let soul = chart.palace(Palace::Soul).unwrap();
println!("{}", soul.has(&[ZiweiMaj, TianxiangMaj]));
println!("{}", soul.has_one_of(&[QishaMaj, ZiweiMaj]));
println!("{}", soul.not_have(&[HuoxingMin, LingxingMin]));输出
false
true
true这张盘的命宫只坐紫微,天相落在财帛宫,因此要求两颗都在的 has 为 false。
边界与陷阱
空列表下 has 与 not_have 返回 true,has_one_of 返回 false。
has_mutagen / not_have_mutagen
用途 判断本宫有没有某种四化。
斗数含义 本命四化由生年干决定,标记打在对应的星上。 一宫「有化禄」意味着这宫里坐着的某颗星被生年干化了禄。 注意这与飞星不同——飞星看的是宫干,本处看的是星上已有的标记。
签名
pub fn has_mutagen(&self, mutagen: Mutagen) -> bool
pub fn not_have_mutagen(&self, mutagen: Mutagen) -> bool参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
mutagen | Mutagen | 是 | — | Lu / Quan / Ke / Ji 之一 |
返回值 bool。只扫描 major_stars 与 minor_stars,不看杂耀。
示例
let children = chart.palace(Palace::Children).unwrap();
println!("子女宫有化禄: {}", children.has_mutagen(Mutagen::Lu));
println!("子女宫无化忌: {}", children.not_have_mutagen(Mutagen::Ji));输出
子女宫有化禄: true
子女宫无化忌: true边界与陷阱
不扫杂耀
has_mutagen 只看主星与辅星上的四化标记,杂耀即使带标记也不计入
(复刻 iztro 的行为)。要连杂耀一起看,自己遍历 adjective_stars 的 mutagen 字段。
生年四化只会落在十四主星与部分辅星上,因此实际盘面上两种口径通常没有差别。
is_empty / is_empty_excluding
用途 判断本宫是否空宫。
斗数含义 「空宫」指没有十四主星坐守的宫。空宫要借对宫主星来看, 是斗数里一个很常见的判断分支。辅星与杂耀默认不影响空宫的成立。
签名
pub fn is_empty(&self) -> bool
pub fn is_empty_excluding(&self, exclude_stars: &[StarKey]) -> bool参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
exclude_stars | &[StarKey] | 是 | — | 追加计入的星耀:本宫无主星、但坐了其中任一颗时,同样不算空宫 |
返回值 bool。判定顺序是:先看有无主星,有则不空;再看 exclude_stars,命中则不空;都不满足才是空宫。
示例
let parents = chart.palace(Palace::Parents).unwrap();
println!("父母宫空宫: {}", parents.is_empty());
let friends = chart.palace(Palace::Friends).unwrap();
println!("仆役宫空宫: {}", friends.is_empty());
// 父母宫无主星,但坐了陀罗——把陀罗也计入后就不算空宫
println!("父母宫计入陀罗后: {}", parents.is_empty_excluding(&[StarKey::TuoluoMin]));输出
父母宫空宫: true
仆役宫空宫: false
父母宫计入陀罗后: false这张盘只有父母、田宅两宫无主星。仆役宫坐太阴,因此不算空宫。
边界与陷阱
flies_to / flies_one_of_to / not_fly_to
用途 判断本宫宫干的四化是否飞入目标宫。
斗数含义 飞星派的核心手法。每个宫位有自己的宫干,宫干按四化表决定 哪四颗星化禄、权、科、忌。若被化的那颗星恰好坐在目标宫,就叫「本宫化 X 入目标宫」。 「命宫化禄入财帛」表达的是命宫这件事的顺遂落在财帛上。
签名
pub fn flies_to(&self, target: impl Into<PalaceTarget>, mutagens: &[Mutagen]) -> bool
pub fn flies_one_of_to(&self, target: impl Into<PalaceTarget>, mutagens: &[Mutagen]) -> bool
pub fn not_fly_to(&self, target: impl Into<PalaceTarget>, mutagens: &[Mutagen]) -> bool参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
target | impl Into<PalaceTarget> | 是 | — | 目标宫,索引 / 宫名 / 身宫 / 来因宫四种写法 |
mutagens | &[Mutagen] | 是 | — | 要检查的四化 |
返回值
| 方法 | 语义 |
|---|---|
flies_to | 列出的四化全部飞入目标宫 |
flies_one_of_to | 列出的四化至少一个飞入目标宫 |
not_fly_to | 列出的四化一个都不飞入目标宫 |
示例
let soul = chart.palace(Palace::Soul).unwrap();
println!("命宫化禄入财帛: {}", soul.flies_to(Palace::Wealth, &[Mutagen::Lu]));
println!("命宫化禄或忌入迁移: {}", soul.flies_one_of_to(Palace::Surface, &[Mutagen::Lu, Mutagen::Ji]));
println!("命宫不化权入子女: {}", soul.not_fly_to(Palace::Children, &[Mutagen::Quan]));输出
命宫化禄入财帛: false
命宫化禄或忌入迁移: false
命宫不化权入子女: true边界与陷阱
self_mutaged / self_mutaged_one_of / not_self_mutaged
用途 判断本宫是否自化。
斗数含义 自化指本宫宫干化出的星恰好就坐在本宫。 含义上是「自己把自己的能量释放掉」,与飞入他宫的定向作用不同。
签名
pub fn self_mutaged(&self, mutagens: &[Mutagen]) -> bool
pub fn self_mutaged_one_of(&self, mutagens: &[Mutagen]) -> bool
pub fn not_self_mutaged(&self, mutagens: &[Mutagen]) -> bool参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
mutagens | &[Mutagen] | 是 | — | 要检查的四化;传空切片表示「四化全部」 |
返回值
| 方法 | 语义 |
|---|---|
self_mutaged | 列出的四化全部自化 |
self_mutaged_one_of | 列出的四化至少一个自化;列表为空时检查全部四化 |
not_self_mutaged | 列出的四化一个都不自化;列表为空时检查全部四化 |
示例
let career = chart.palace(Palace::Career).unwrap();
println!("官禄宫自化禄: {}", career.self_mutaged(&[Mutagen::Lu]));
println!("官禄宫自化忌: {}", career.self_mutaged(&[Mutagen::Ji]));
println!("官禄宫有任一自化: {}", career.self_mutaged_one_of(&[]));
println!("官禄宫无任何自化: {}", career.not_self_mutaged(&[]));输出
官禄宫自化禄: false
官禄宫自化忌: true
官禄宫有任一自化: true
官禄宫无任何自化: false官禄宫宫干为丙,丙干化忌在廉贞,而廉贞正坐官禄宫,故成自化忌。
边界与陷阱
空列表在这三个方法里的含义不同于飞星族
self_mutaged_one_of 与 not_self_mutaged 把空列表解释为「全部四化」,
而不是「空集」。self_mutaged 不做这层回退,空列表退化成「本宫是否包含空集」,
恒为 true——与 flies_to 的空列表判假正好相反,别把两者的直觉混用。
mutaged_places / mutagen_stars
用途 取本宫宫干化出的四颗星分别落在哪些宫,或直接取那四颗星本身。
斗数含义 飞星分析的全景版本:不问「有没有飞到某宫」,而是一次拿到禄权科忌四个落点。
签名
pub fn mutaged_places(&self) -> Vec<Option<PalaceRef<'a>>>
pub fn mutagen_stars(&self, mutagens: &[Mutagen]) -> Vec<StarKey>参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
mutagens | &[Mutagen] | 是 | — | 要取的四化位;同一四化重复传入会重复出现 |
返回值 mutaged_places 返回长度为 4 的 Vec,顺序为禄、权、科、忌,
某颗被化的星不在这张盘上时对应位置为 None。
mutagen_stars 返回 Vec<StarKey>,顺序与传入的四化一致。
示例
let soul = chart.palace(Palace::Soul).unwrap();
for (m, place) in ["禄", "权", "科", "忌"].iter().zip(soul.mutaged_places()) {
match place {
Some(p) => println!("化{m} → {}", translate_palace(p.name, Language::ZhCN)),
None => println!("化{m} → 不在盘上"),
}
}
println!("{:?}", soul.mutagen_stars(&[Mutagen::Lu, Mutagen::Ji]));输出
化禄 → 子女
化权 → 命宫
化科 → 官禄
化忌 → 财帛
[TianliangMaj, WuquMaj]命宫宫干为壬,壬干四化为天梁化禄、紫微化权、左辅化科、武曲化忌, 四颗星分别坐在子女、命宫、官禄、财帛四宫。
mutagen_stars 取的是「本宫宫干化出哪几颗星」,与星耀自身的
mutagen 字段(生年四化)无关;后者由出生年干决定。
mutaged_places 忽略入参
PalaceRef::mutaged_places 不收参数,恒按禄、权、科、忌四位返回长度为 4 的结果。
PalaceData 上的同名方法要传十二宫切片(p.mutaged_places(&chart.palaces)),
返回的是 Vec<Option<usize>> 宫位索引而不是宫位视图。
opposite_palace / surrounded_palaces
用途 取本宫的对宫与三方四正。
斗数含义 对宫是本宫 +6 的那一宫,两宫永远相对而看。 三方四正在对宫之外再加上 +4(官禄位)与 +8(财帛位)。
签名
pub fn opposite_palace(&self) -> PalaceRef<'a>
pub fn surrounded_palaces(&self) -> SurroundedPalaces<'a>返回值 opposite_palace 必然存在,不返回 Option。
surrounded_palaces 见三方四正。
示例
let zh = Language::ZhCN;
let soul = chart.palace(Palace::Soul).unwrap();
println!("{} 的对宫是 {}", translate_palace(soul.name, zh),
translate_palace(soul.opposite_palace().name, zh));
println!("三方四正见煞: {}", soul.surrounded_palaces().have_one_of(&[StarKey::HuoxingMin, StarKey::LingxingMin]));输出
命宫 的对宫是 迁移
三方四正见煞: trueastrolabe
用途 从宫位回到它所属的星盘。
签名
pub fn astrolabe(&self) -> &'a Astrolabe返回值 &Astrolabe。视图始终持有星盘,因此不返回 Option。
示例
let soul = chart.palace(Palace::Soul).unwrap();
println!("{}", translate_five_elements_class(soul.astrolabe().five_elements_class, Language::ZhCN));输出
木三局