紫微斗数概念

三方四正

为什么一个宫不能单独看,三方四正由哪四个宫组成,以及在三种编程语言里怎么取。

适合:所有人。代码与判断方法表在页尾

为什么需要它

单看一个宫会漏掉一半信息。紫微斗数的惯例是:解读任何一宫,都要连着它的 对宫与两个三合宫一起看。这四个宫合称三方四正

最直观的理由是空宫 —— 一个宫里没有主星时,传统上要「借对宫的星来看」。 即便不是空宫,三方四正里的煞星与四化同样会影响本宫的判断。

由哪四个宫组成

以本宫在盘上的位置为基准,另外三宫的位置是固定的:

成员位置说明
本宫i要看的那个宫
对宫i + 6正对面,影响最直接
官禄位i + 4三合之一
财帛位i + 8三合之一

位置对 12 取模。这四个位置在盘上构成一个三角加一条对角线, 「三方」指三合的三个宫,「四正」指加上对宫共四个。

        i+4 (官禄位)
         /      \
        /        \
      i ──────── i+6 (对宫)
        \        /
         \      /
        i+8 (财帛位)

「官禄位」与「财帛位」是相对本宫的称呼,不是盘上的官禄宫与财帛宫。 以命宫为本宫时它们才恰好是官禄宫和财帛宫;以其他宫为本宫时只是位置关系相同。

在代码里怎么取

三种编程语言都既接受宫位索引,也接受宫名:

let sp = astrolabe.surrounded_palaces(Palace::Soul).unwrap();
println!("{:?}", sp.opposite.name);

四个成员分别是 target(本宫)、opposite(对宫)、career(官禄位)、 wealth(财帛位)。

判断方法

三方四正的判断方法与单宫同名,但检查范围是四个宫的并集,三种编程语言一致:

方法作用
have(stars)四宫合起来是否包含全部指定星耀
have_one_of(stars)是否包含任意一颗
not_have(stars)是否一颗都不包含
have_mutagen(m)四宫中是否有任一宫带指定四化
not_have_mutagen(m)四宫都没有指定四化
sp := chart.SurroundedPalaces(iztro.PalaceSoul)

sp.Have(iztro.StarTianfuMaj)                              // 三方四正有天府
sp.HaveOneOf(iztro.StarQingyangMin, iztro.StarTuoluoMin)  // 是否见羊陀
sp.NotHaveMutagen(iztro.MutagenJi)                        // 是否不见化忌

星盘上还有三个直接判断的快捷方法,省去先取三方四正这一步:

chart.is_surrounded(PalaceName.SOUL, [MajorStar.TIANFU])
chart.is_surrounded_one_of(PalaceName.SOUL, [MinorStar.QINGYANG, MinorStar.TUOLUO])
chart.not_surrounded(PalaceName.SOUL, [MinorStar.HUOXING])

have 与 have_one_of 别混

have 要求列表里的星全部出现,have_one_of 只要求出现一个。 判断「见煞」这类需求几乎总是用 have_one_of

一个实际例子

判断命宫格局是否「吉星拱照且不见煞」:

from x_iztro.enums import PalaceName, MinorStar

sp = chart.surrounded_palaces(PalaceName.SOUL)

lucky = sp.have_one_of([MinorStar.ZUOFU, MinorStar.YOUBI,
                        MinorStar.WENCHANG, MinorStar.WENQU])
clean = sp.not_have([MinorStar.QINGYANG, MinorStar.TUOLUO,
                     MinorStar.HUOXING, MinorStar.LINGXING])

print(lucky, clean, lucky and clean)
True False False

这张盘的三方四正里有文昌文曲,但也见了羊陀火铃中的某几颗,所以不成立。

星耀的分类与标识见星耀

本页目录