最近把整个奇门遁甲排盘程序写完了,比较有难度的就是确定值符和位置。
值符的计算是要看日柱的旬首,旬首是甲和己,无论日柱天干是什么,都要看和旬首的距离。
tgday,dzday = self.__tiangan.index(self.bz[0][4]),self.__dizhi.index(self.bz[0][5])
##日柱天干和日柱地支
"""计算旬首,从日天干数一直减到5或者0,求地支数"""
n = 0
if tgday < 5:
while tgday > 0:
tgday -= 1
n += 1
if tgday == 0:
break
else:
while tgday > 5:
tgday -= 1
n += 1
if tgday == 5:
break
dizhi = (dzday+12-n)%12
"""计算旬首结束"""
dizhi代表了旬首对应的地支,这个地支决定了局数。局数的求法:
"""求上中下三元,四仲为上,四孟为中,四季为下"""
flag = 0
if dizhi in [0,3,6,9]:
flag = 0
elif dizhi in [2,5,8,11]:
flag = 1
elif dizhi in [1,4,7,10]:
flag = 2
ju_num = self.jq[flag] # 局数
"""计算三元结束,确定了局数"""
这时候,ju_num对应的宫位就是地盘戊的位置,然后根据宫位按照戊己庚辛壬癸丁丙乙按照阳顺阴逆排列:
"""根据阴阳遁,排地盘天干"""
undertiangan = {}
if self.yinyang == 1:
for i in range(9):
num = (i+9+ju_num)%9
if num == 0:
num = num + 9
undertiangan[str(num)] = self.__qmtiangan[i%9]
else:
for i in range(9):
num = (9 - i + ju_num) % 9
if num == 0:
num = num + 9
undertiangan[str(num)] = self.__qmtiangan[i%9]
"""排地盘天干结束"""
这时候地盘天干排列完毕,地盘天干和对应的宫位有了,那么天盘值符就很容易确定了。