-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathgetstar.go
More file actions
222 lines (182 loc) · 6.7 KB
/
Copy pathgetstar.go
File metadata and controls
222 lines (182 loc) · 6.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
package doushu
func GetTianganYinyang(gan Element) Element {
return p.get("十天干所属表", 0, gan.Value())
}
func GetDizhiYingyang(zhi Element) Element {
return p.get("十二地支所属表", 0, zhi.Value())
}
func GetYinShou(niangan Element) Element {
return p.get("起寅首天干表", 0, niangan.Value())
}
// 安命宫表 按本生月及本生时,凡闰月生人,作下月论
func GetMinggong(nongliYue Element, shi Element) Element {
return p.get("安命宫表", nongliYue.Value(), shi.Value())
}
func GetShenGong(nongliYue Element, shi Element) Element {
return p.get("安身宫表", nongliYue.Value(), shi.Value())
}
func Get12Gongs(mingZhi Element) ([]Element, Element) {
es := make([]Element, 12)
for i := 0; i < 12; i++ {
es[i] = mingZhi.Next(i)
}
return es, Minggong
}
func GetWuxingju(niangan Element, mingZhi Element) Element {
return p.get("定五行局表", niangan.Value(), mingZhi.Value())
}
func GetZiwei(wuxinju Element, ri Element) Element {
return p.get("起紫微表", wuxinju.Value(), ri.Value())
}
func GetZiweiStars(ziweiZhi Element) ([]Element, Element) {
return p.batchGet("安紫微诸星表", ziweiZhi.Value()), Tianfu
}
func GetTianfuStars(tianfuZhi Element) ([]Element, Element) {
return p.batchGet("安天府诸星表", tianfuZhi.Value()), Taiyin
}
func GetShiStars(shi Element) ([]Element, Element) {
return p.batchGet("安时系诸星表", shi.Value()), Wenchang
}
func GetHuoStar(nianZhi, shi Element) Element {
return p.get("安火星表", nianZhi.Value(), shi.Value())
}
func GetLingStar(nianZhi, shi Element) Element {
return p.get("安铃星表", nianZhi.Value(), shi.Value())
}
func GetYueStars(yue Element) ([]Element, Element) {
return p.batchGet("安月系诸星表", yue.Value()), Zuofu
}
func GetRiStars(ri, zuofuPos, youbiPos, wenchangPos, wenquPos Element) ([]Element, Element) {
return []Element{
zuofuPos.Next(ri.Value()), // 三 台 从左辅上起初一,顺行,数到本日生
youbiPos.Pre(ri.Value()), // 八 座 从右弼上起初一,逆行,数到本日生
wenchangPos.Next(ri.Value() - 1), // 恩 光 从文昌上起初一,顺行,数到本日生再退后一步
wenquPos.Next(ri.Value() - 1), // 天 贵 从文曲上起初一,顺行,数到本日生再退后一步
}, Santai
}
func GetGanStars(niangan Element) ([]Element, Element) {
return p.batchGet("安干系诸星表", niangan.Value()), Lucun
}
func GetSihuaStars(niangan Element) ([]Element, Element) {
return p.batchGet("安四化诸星表", niangan.Value()), HuaKe
}
func GetBoshi12Stars(lucunPos Element) ([]Element, Element) {
return lucunPos.NextTo(Hai.Value()), Boshi
}
func GetZhiStars(nianzhi Element) ([]Element, Element) {
return p.batchGet("安支系诸星表", nianzhi.Value()), Tianma
}
func GetTiancai(nianzhi, nongliYue, shi Element) Element {
gong := p.get("安天才星表", 0, nianzhi.Value())
mingZhi := GetMinggong(nongliYue, shi)
poses, _ := Get12Gongs(mingZhi)
return poses[gong]
}
// GetTiancai 通过本生年支,得到天才星所在十二宫,可能是妻财子禄。注意,返回的不是如子丑寅卯的地支。
func GetTiancaiGong(nianzhi Element) Element {
return p.get("安天才星表", 0, nianzhi.Value())
}
func GetTianshou(shenggongZhi, nianZhi Element) Element {
return shenggongZhi.Next(nianZhi.Value())
}
func GetChangsheng12Stars(wuxinju, yiyang, gender Element) ([]Element, Element) {
top := wuxinju.Value()
if isYangNanYinNv(yiyang, gender) {
top = top * 2
} else {
top = top*2 + 1
}
return p.batchGet("安五局长生十二星表", top), Changsheng
}
func GetJiekong(niangan Element) Element {
return p.get("安截路空亡表(截空)", 0, niangan.Value())
}
func GetXunkong(niangan, nianzhi Element) Element {
return p.get("安旬中空亡表(旬空)", nianzhi.Value(), niangan.Value())
}
func GetShangShi(mingzhi Element) ([]Element, Element) {
return p.batchGet("安天伤、天使表", mingzhi.Value()), Tianshang
}
func GetMingzhu(mingzhi Element) Element {
return p.get("安命主表", 0, mingzhi.Value())
}
func GetShenZhu(nianzhi Element) Element {
return p.get("安身主表", 0, nianzhi.Value())
}
func GetJiangqianStars(nianzhi Element) ([]Element, Element) {
return p.batchGet("安流年将前诸星表", nianzhi.Value()), Jiangxing
}
func GetSuiqianStars(nianzhi Element) ([]Element, Element) {
return p.batchGet("安流年岁前诸星表", nianzhi.Value()), Suijian
}
func GetZidou(shi, yue Element) Element {
return p.get("安子年斗君表", shi.Value(), yue.Value())
}
func GetStarLight(star, zhi Element) Element {
if star < Ziwei || star > Mingzhu {
return Unknown
}
if zhi < Zi || zhi > Hai {
return Unknown
}
if star == Zuofu || star == Youbi || star == Tiankui || star == Tianyue || star == Lucun {
return Miao
}
return p.get("诸星在十二宫庙旺利陷表", star.Value(), zhi.Value())
}
func GetStarLevel(star Element) Element {
return p.get("诸星级行分化一览表", star.Value(), 0)
}
// GetDaxianStarts 通过命宫,阴阳,性别,得到大限起始年龄所在的地址。返回 [寅,子,丑,...],表示命在寅宫,即第一个10年在寅,第二个10年在子。
func GetDaxians(mingZhi, yinyang, gender Element) []Element {
xians := make([]Element, 0, 12)
if isYangNanYinNv(yinyang, gender) {
for i := 0; i < 12; i++ {
xians = append(xians, mingZhi.Next(i))
}
} else {
for i := 0; i < 12; i++ {
xians = append(xians, mingZhi.Pre(i))
}
}
return xians
}
// GetDaxianStarts 通过命宫,五行局,阴阳,性别,得到大限起始年龄。返回 [23,13,3,..],表示命在寅宫,子宫大限起始23岁,丑宫大限起始13岁。
func GetDaxianStarts(mingZhi, wuxinju Element, yinyang, gender Element) []int {
starts := make([]int, 12)
xians := GetDaxians(mingZhi, yinyang, gender)
for i, zhi := range xians {
starts[zhi.Value()] = i*10 + wuxinju.Value() + 2
}
return starts
}
func isYangNanYinNv(yinyang, gender Element) bool {
return (yinyang == Yang && gender == Nan) || (yinyang == YinXing && gender == Nv)
}
func GetXiaoxianStart(nianzhi Element) Element {
return Xu.Pre(3 * nianzhi.Value())
}
// GetXiaoxians
func GetXiaoxian(nianzhi, gender Element) []Element {
start := GetXiaoxianStart(nianzhi)
xians := make([]Element, 0, 12)
if gender == Nan {
for i := 0; i < 12; i++ {
xians = append(xians, start.Next(i))
}
} else {
for i := 0; i < 12; i++ {
xians = append(xians, start.Pre(i))
}
}
return xians
}
// GetXiaoxianFirsts 通过本生年支、性别,得到小限起始年龄。返回 [3,4,5,..],表示1岁在戌宫,3岁在子宫。
func GetXiaoxianFirsts(nianzhi, gender Element) []int {
firsts := make([]int, 12)
xians := GetXiaoxian(nianzhi, gender)
for i, zhi := range xians {
firsts[zhi.Value()] = i + 1
}
return firsts
}