计算生辰八字五行属性的算法
計算生辰八字五行屬性的算法
潘愛民
2013/1/26
?
緣起:幾年前,小兒出生的幾天之內,我需要為他起名字。人生難得接一兩回這樣的任務,更是格外珍惜。我調研了幾種起名字的思路,最終確定按照五行陰陽平衡的道理來確定生辰八字的五行屬性,然后選取恰當的字。
?
說明:本文描述的算法是根據Internet上的資料整理而得到,并非我原創,但個別地方我做過修改。其中經驗值的出處已無法找到。
算法的高度足夠,我是坐在飛機上寫下這一算法描述的,上萬米高空俯瞰大地,感覺到一種靜默的平衡J。在過去幾年中,我用這一算法測算過十多個生辰八字,也碰到過一兩個極端的情形,與現實中的表現比較吻合。因此,我相信這算法的結果有參考意義。但是,因使用該算法引起的任何意外事故,我概不負責,請謹慎使用。
?
算法的過程如下所述:
1.?????? 根據出生年月日和時辰,確定八個字,即生辰八字。
查萬年歷(比如www.nongli.net),確定前六個字。比如1968年8月8日,查到的結果是:
戊申辛酉壬寅
這六個字分別是年份的天干、地支,月份的天干、地支,和日子的天干、地支。
接下來確定時辰的天干和地支,查下表:
?
| 出生 | 時辰地支 | 日干(即第5個字) | ||||
| 甲 己 | 乙 庚 | 丙 辛 | 丁 壬 | 戊 癸 | ||
| 23-1 1-3 3-5 5-7 7-9 9-11 11-13 13-15 15-17 17-19 19-21 21-23 | 子 丑 寅 卯 辰 巳 午 未 申 酉 戊 亥 | 甲子 乙丑 丙寅 丁卯 戊辰 己巳 庚午 辛未 壬申 癸酉 甲戌 乙亥 | 丙子 丁丑 戊寅 己卯 庚辰 辛巳 壬午 癸未 甲申 乙酉 丙戌 丁亥 | 戊子 己丑 庚寅 辛卯 壬辰 癸巳 甲午 乙未 丙申 丁酉 戊戌 己亥 | 庚子 辛丑 壬寅 癸卯 甲辰 己巳 丙午 丁未 戊申 己酉 庚戌 辛亥 | 壬子 癸丑 甲寅 乙卯 丙辰 丁巳 戊午 己未 庚申 辛酉 壬戌 癸亥 |
?
首先根據出生鐘點找到相應的行數,再根據第5個字(日干),在右邊5列中定位到相應的列,即可得到時辰的天干、地支,即第7、8兩個字。譬如,1968年8月8日8點鐘,在“7-9”這一行,“丁壬”這一列,得到時辰的干支為“甲辰”,所以,最終的八字為:
戊申辛酉壬寅甲辰
?
2.?????? 計算八字的五行屬性。
首先,每個天干和地支都有對應的五行屬性,如下面兩表所示:
?
天干屬性:
| 天干 | 屬性 | 天干 | 屬性 | 天干 | 屬性 |
| 甲 | 木 | 戊 | 土 | 壬 | 水 |
| 乙 | 木 | 己 | 土 | 癸 | 水 |
| 丙 | 火 | 庚 | 金 | ? | ? |
| 丁 | 火 | 辛 | 金 | ? | ? |
?
地支屬性:
| 地支 | 屬性 | 地支 | 屬性 | 地支 | 屬性 |
| 子 | 水 | 辰 | 土 | 申 | 金 |
| 丑 | 土 | 巳 | 火 | 酉 | 金 |
| 寅 | 木 | 午 | 火 | 戌 | 土 |
| 卯 | 木 | 未 | 土 | 亥 | 水 |
?
接下來,計算五行“金木水火土”的強度值。對于五行中的每一行,其強度值包括兩部分:
l? 天干強度:即八字中的4個天干,若其五行屬性恰好是這一行,那么就有相應的貢獻值,可查表如下:
?
| 生月\天干 | 甲 | 乙 | 丙 | 丁 | 戊 | 己 | 庚 | 辛 | 壬 | 癸 |
| 子月 | 1.2 | 1.2 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.2 | 1.2 |
| 丑月 | 1.06 | 1.06 | 1.0 | 1.0 | 1.1 | 1.1 | 1.14 | 1.14 | 1.1 | 1.1 |
| 寅月 | 1.14 | 1.14 | 1.2 | 1.2 | 1.06 | 1.06 | 1.0 | 1.0 | 1.0 | 1.0 |
| 卯月 | 1.2 | 1.2 | 1.2 | 1.2 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
| 辰月 | 1.1 | 1.1 | 1.06 | 1.06 | 1.1 | 1.1 | 1.1 | 1.1 | 1.04 | 1.04 |
| 巳月 | 1.0 | 1.0 | 1.14 | 1.14 | 1.14 | 1.14 | 1.06 | 1.06 | 1.06 | 1.06 |
| 午月 | 1.0 | 1.0 | 1.2 | 1.2 | 1.2 | 1.2 | 1.0 | 1.0 | 1.0 | 1.0 |
| 未月 | 1.04 | 1.04 | 1.1 | 1.1 | 1.16 | 1.16 | 1.1 | 1.1 | 1.0 | 1.0 |
| 申月 | 1.06 | 1.06 | 1.0 | 1.0 | 1.0 | 1.0 | 1.14 | 1.14 | 1.2 | 1.2 |
| 酉月 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.2 | 1.2 | 1.2 | 1.2 |
| 戌月 | 1.0 | 1.0 | 1.04 | 1.04 | 1.14 | 1.14 | 1.16 | 1.16 | 1.06 | 1.06 |
| 亥月 | 1.2 | 1.2 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.14 | 1.14 |
?
l? 地支強度:即八字中的4個地支,它們可能會藏了這一五行對應的天干,比如,“丑”藏了“癸、辛、己”,而癸、辛、己的五行屬性分別是水、金、土。所以,地支“丑”對水、金、土都有強度貢獻,而強度值的大小則取決于相應的月份。下面的表格涵蓋了地支所藏的五行強度值。
?
?
| 地支 | 支藏 | 月支(即第6個字) | |||||||||||
| 子 | 丑 | 寅 | 卯 | 辰 | 巳 | 午 | 未 | 申 | 酉 | 戌 | 亥 | ||
| 子 | 癸 | 1.2 | 1.1 | 1.0 | 1.0 | 1.04 | 1.06 | 1.0 | 1.0 | 1.2 | 1.2 | 1.06 | 1.14 |
| 丑 | 癸 | 0.36 | 0.33 | 0.3 | 0.3 | 0.312 | 0.318 | 0.3 | 0.3 | 0.36 | 0.36 | 0.318 | 0.342 |
| 辛 | 0.2 | 0.228 | 0.2 | 0.2 | 0.23 | 0.212 | 0.2 | 0.22 | 0.228 | 0.248 | 0.232 | 0.2 | |
| 己 | 0.5 | 0.55 | 0.53 | 0.5 | 0.55 | 0.57 | 0.6 | 0.58 | 0.5 | 0.5 | 0.57 | 0.5 | |
| 寅 | 丙 | 0.3 | 0.3 | 0.36 | 0.36 | 0.318 | 0.342 | 0.36 | 0.33 | 0.3 | 0.3 | 0.342 | 0.318 |
| 甲 | 0.84 | 0.742 | 0.798 | 0.84 | 0.77 | 0.7 | 0.7 | 0.728 | 0.742 | 0.7 | 0.7 | 0.84 | |
| 卯 | 乙 | 1.2 | 1.06 | 1.14 | 1.2 | 1.1 | 1.0 | 1.0 | 1.04 | 1.06 | 1.0 | 1.0 | 1.2 |
| 辰 | 乙 | 0.36 | 0.318 | 0.342 | 0.36 | 0.33 | 0.3 | 0.3 | 0.312 | 0.318 | 0.3 | 0.3 | 0.36 |
| 癸 | 0.24 | 0.22 | 0.2 | 0.2 | 0.208 | 0.2 | 0.2 | 0.2 | 0.24 | 0.24 | 0.212 | 0.228 | |
| 戊 | 0.5 | 0.55 | 0.53 | 0.5 | 0.55 | 0.6 | 0.6 | 0.58 | 0.5 | 0.5 | 0.57 | 0.5 | |
| 巳 | 庚 | 0.3 | 0.342 | 0.3 | 0.3 | 0.33 | 0.3 | 0.3 | 0.33 | 0.342 | 0.36 | 0.348 | 0.3 |
| 丙 | 0.7 | 0.7 | 0.84 | 0.84 | 0.742 | 0.84 | 0.84 | 0.798 | 0.7 | 0.7 | 0.728 | 0.742 | |
| 午 | 丁 | 1.0 | 1.0 | 1.2 | 1.2 | 1.06 | 1.14 | 1.2 | 1.1 | 1.0 | 1.0 | 1.04 | 1.06 |
| 未 | 丁 | 0.3 | 0.3 | 0.36 | 0.36 | 0.318 | 0.342 | 0.36 | 0.33 | 0.3 | 0.3 | 0.312 | 0.318 |
| 乙 | 0.24 | 0.212 | 0.228 | 0.24 | 0.22 | 0.2 | 0.2 | 0.208 | 0.212 | 0.2 | 0.2 | 0.24 | |
| 己 | 0.5 | 0.55 | 0.53 | 0.5 | 0.55 | 0.57 | 0.6 | 0.58 | 0.5 | 0.5 | 0.57 | 0.5 | |
| 申 | 壬 | 0.36 | 0.33 | 0.3 | 0.3 | 0.312 | 0.318 | 0.3 | 0.3 | 0.36 | 0.36 | 0.318 | 0.342 |
| 庚 | 0.7 | 0.798 | 0.7 | 0.7 | 0.77 | 0.742 | 0.7 | 0.77 | 0.798 | 0.84 | 0.812 | 0.7 | |
| 酉 | 辛 | 1.0 | 1.14 | 1.0 | 1.0 | 1.1 | 1.06 | 1.0 | 1.1 | 1.14 | 1.2 | 1.16 | 1.0 |
| 戌 | 辛 | 0.3 | 0.342 | 0.3 | 0.3 | 0.33 | 0.318 | 0.3 | 0.33 | 0.342 | 0.36 | 0.348 | 0.3 |
| 丁 | 0.2 | 0.2 | 0.24 | 0.24 | 0.212 | 0.228 | 0.24 | 0.22 | 0.2 | 0.2 | 0.208 | 0.212 | |
| 戊 | 0.5 | 0.55 | 0.53 | 0.5 | 0.55 | 0.57 | 0.6 | 0.58 | 0.5 | 0.5 | 0.57 | 0.5 | |
| 亥 | 甲 | 0.36 | 0.318 | 0.342 | 0.36 | 0.33 | 0.3 | 0.3 | 0.312 | 0.318 | 0.3 | 0.3 | 0.36 |
| 壬 | 0.84 | 0.77 | 0.7 | 0.7 | 0.728 | 0.742 | 0.7 | 0.7 | 0.84 | 0.84 | 0.724 | 0.798 | |
?
回到前面的例子,八字“戊申辛酉壬寅甲辰”,查以上兩表,可以得到五行強度為:
金:0.84 (年支藏庚) + 1.2 (月干) + 1.2 (月支藏辛) = 3.24
木:0.7 (日支藏甲) + 1.0 (時干) + 0.3 (時支藏乙) = 2.0
水:0.36 (年支藏壬) + 1.2 (日干) + 0.24 (時支藏癸) = 1.8
火:0.3 (日支藏丙) = 0.3
土:1.0 (年干) + 0.5 (時支藏戊) = 1.5
?
3.?????? 給出起名指示。
首先確定八字的命里屬性。只需查日干的五行屬性,即代表了該八字的五行屬性。譬如“戊申辛酉壬寅甲辰”的日干“壬”的屬性為水,故該八字對應的命里屬性為水。
再計算同類和異類的強度值。所謂同類是指,該八字的五行屬性,以及生該五行屬性的那個屬性,譬如八字的五行屬性為水,則水和金合起來稱為同類,其他三個:木、火和土合起來稱為異類。
五行的相生關系為:金生水,水生木,木生火,火生土,土生金。
得到了同類和異類的強度值以后,一個基本的判斷是,若兩者的數值比較接近,則說明該八字比較平衡,也暗示人生平順;若兩者數值相差較大(比如,大于1,甚至大于2),則說明五行不平衡,可以通過名字來彌補,或者將來找對象時候通過婚姻來補平。
因此,得到同類和異類數值以后,如何確定“用神”或“喜神”,或者,如何在名字中補平,需要一點點人腦智能,目前尚未量化到算法或程序中。回到前面的例子:
日干為壬,屬水,故命屬水
“同類”數值:5.04
“異類”數值:3.8
“同類”比“異類”數值大,日主強,以火為用神。宜補火。
最后,定下怎么補五行屬性以后,剩下就是挑字了,這可以自由發揮了。康熙字典上每個字都有五行屬性,可以在Internet上查到。
?
?
附上代碼:
文件BaziEval.cpp
?
//BaziEval.cpp : Defines the entry point for the console application.
//
?
#include"stdafx.h"
?
#include<windows.h>
#include<iostream>
usingnamespace std;
?
void Usage()
{
?????????????????? cout << "Usage:\tBaziEval.exe -q <生辰八字中之前六字> -t hh" << endl;
?????????????????? cout <<"\tBaziEval.exe -e <生辰八字>" << endl;
?????????????????? return;
}
?
boolCheckBazi(_TCHAR *bazi);
_TCHAR *ComputeTimeGan(_TCHAR *bazi, int hour);
_TCHAR *EvalBazi(_TCHAR *bazi);
?
?
int_tmain(int argc, _TCHAR* argv[])
{
???????? _TCHAR *subCmd, *paraStr;
???????? if (argc != 5 && argc !=3) {
?????????????????? Usage();
?????????????????? return 0;
???????? }
????????
???????? subCmd = argv[1];
???????? paraStr = argv[2];
???????? if (argc ==5) {
?????????????????? // Parsing the part of"-q <生辰八字中之前六字>"
?????????????????? if (!(wcslen(subCmd)==1&& subCmd[0] == 'q' || wcslen(subCmd)==2 && subCmd[0]=='-'&& subCmd[1]=='q')) {
??????????????????????????? Usage();
??????????????????????????? return 0;
?????????????????? }
?
?????????????????? if (wcslen(paraStr)!=6 ||!CheckBazi(paraStr)) {
??????????????????????????? cout <<"-q后面須跟上生辰日的干支,可以查詢萬年歷,比如在線版本 http://www.nongli.net/" << endl;
??????????????????????????? Usage();
??????????????????????????? return 0;
?????????????????? }
??????????????????
?????????????????? // Parsing the part of"-t hh:mm"
?????????????????? subCmd = argv[3];
?????????????????? paraStr = argv[4];
?
?????????????????? if (!(wcslen(subCmd)==1&& subCmd[0] == 't' || wcslen(subCmd)==2 && subCmd[0]=='-'&& subCmd[1]=='t')) {
??????????????????????????? Usage();
??????????????????????????? return 0;
?????????????????? }
??????????????????
?????????????????? int hour = -1;
?????????????????? swscanf(paraStr,L"%d", &hour);
?????????????????? if (hour <0 || hour>23) {
??????????????????????????? cout <<"Error: 時辰參數不正確,應為0~23之間的一個整點數。" << endl;
??????????????????????????? Usage();
??????????????????????????? return 0;
?????????????????? }
?
?????????????????? _TCHAR * result =ComputeTimeGan(argv[2], hour);
?????????????????? if (result == 0) {
??????????????????????????? cout << "查詢不成功!"<< endl;
?????????????????? } else {
??????????????????????????? char tmpBuf[128];
?????????????????? ??? WideCharToMultiByte( CP_ACP, 0, result, -1,tmpBuf, 127, NULL, NULL );
?
??????????????????????????? cout << "查詢八字的結果是:"<< tmpBuf << endl;
??????????????????????????? cout << "接下來您可以用-e命令測算此八字的五行平衡信息。" << endl;
?????????????????? }
?????????????????? return 0;
???????? }
?
???????? if (argc ==3) {
?????????????????? // Parsingthe part of "-q <生辰八字中之前六字>"
?????????????????? if (!(wcslen(subCmd)==1&& subCmd[0] == 'e' || wcslen(subCmd)==2 && subCmd[0]=='-'&& subCmd[1]=='e')) {
??????????????????????????? Usage();
??????????????????????????? return 0;
?????????????????? }
?
?????????????????? if (wcslen(paraStr)!=8 ||!CheckBazi(paraStr)) {
??????????????????????????? cout <<"-e后面須跟上生辰八字" << endl;
??????????????????????????? Usage();
??????????????????????????? return 0;
?????????????????? }
?
?????????????????? _TCHAR *result =EvalBazi(paraStr);
??????????????????
?????????????????? if (result == 0) {
??????????????????????????? cout << "測算不成功,另請高明!"<< endl;
?????????????????? } else {
??????????????????????????? char tmpBuf[1024];
?????????????????? ??? WideCharToMultiByte( CP_ACP, 0, result, -1,tmpBuf, 1024, NULL, NULL );
?
??????????????????????????? cout <<"\n此八字的五行平衡分析結果如下:\n\n" << tmpBuf << endl;
?????????????????? }
?????????????????? return 0;
???????? }
?
???????? Usage();
?
???????? return 0;
}
?
文件BaziAlgorithm.cpp
?
#include "stdafx.h"
?
#include <windows.h>
?
const _TCHAR *TianGan = L"甲乙丙丁戊己庚辛壬癸";
const _TCHAR *DiZhi = L"子丑寅卯辰巳午未申酉戌亥";
?
bool CheckBazi(_TCHAR *bazi)
{
???????? intbaziLen;
???????? inti,j;
?
???????? baziLen= wcslen(bazi);
???????? if(baziLen != 6 && baziLen != 8 ) return false;
?
???????? for(i = 0; i < baziLen;) {
?????????????????? _TCHARch = bazi[i];
?????????????????? for(j = 0; j < 10; j++)
??????????????????????????? if(ch == TianGan[j]) break;
?????????????????? if(j >= 10) return false;
?????????????????? i++;
?
?????????????????? ch= bazi[i];
?????????????????? for(j = 0; j < 12; j++)
??????????????????????????? if(ch == DiZhi[j]) break;
?????????????????? if(j >= 12) return false;
?????????????????? i++;
???????? }
????????
???????? returntrue;
}
?
/*
根據出生日子的天干,通過下表來查算時辰干支:
時辰干支查算表
時間時辰???????????????????????????? 五行紀日干支
?????????????????????? 甲己???? 乙庚???? 丙辛???? 丁壬???? 戊癸
?
23-01 子/水?????????? 甲子???? 丙子???? 戊子???? 庚子???? 壬子
01-03 丑/土?????????? 乙丑???? 丁丑???? 己丑???? 辛丑???? 癸丑
03-05 寅/木?????????? 丙寅???? 戊寅???? 庚寅???? 壬寅???? 甲寅
05-07 卯/木?????????? 丁卯???? 己卯???? 辛卯???? 癸卯???? 乙卯
07-09 辰/土?????????? 戊辰???? 庚辰???? 壬辰???? 甲辰???? 丙辰
09-11 巳/火?????????? 己巳???? 辛巳???? 癸巳???? 己巳???? 丁巳
11-13 午/火?????????? 庚午???? 壬午???? 甲午???? 丙午???? 戊午
13-15 未/土?????????? 辛未???? 癸未???? 乙未???? 丁未???? 己未
15-17 申/金?????????? 壬申???? 甲申???? 丙申???? 戊申???? 庚申
17-19 酉/金?????????? 癸酉???? 乙酉???? 丁酉???? 己酉???? 辛酉
19-21 戊/土?????????? 甲戌???? 丙戌???? 戊戌???? 庚戌???? 壬戌
21-23 亥/水?????????? 乙亥???? 丁亥???? 己亥???? 辛亥???? 癸亥
?
*/
const _TCHAR * cTimeGanZhi_Table[12][5] =
{
???????? {L"甲子",L"丙子", L"戊子", L"庚子", L"壬子"},
???????? {L"乙丑",L"丁丑", L"己丑", L"辛丑", L"癸丑"},
???????? {L"丙寅",L"戊寅", L"庚寅", L"壬寅", L"甲寅"},
???????? {L"丁卯",L"己卯", L"辛卯", L"癸卯", L"乙卯"},
???????? {L"戊辰",L"庚辰", L"壬辰", L"甲辰", L"丙辰"},
???????? {L"己巳",L"辛巳", L"癸巳", L"己巳", L"丁巳"},
???????? {L"庚午", L"壬午",L"甲午", L"丙午", L"戊午"},
???????? {L"辛未",L"癸未", L"乙未", L"丁未", L"己未"},
???????? {L"壬申",L"甲申", L"丙申", L"戊申", L"庚申"},
???????? {L"癸酉",L"乙酉", L"丁酉", L"己酉", L"辛酉"},
???????? {L"甲戌",L"丙戌", L"戊戌", L"庚戌", L"壬戌"},
???????? {L"乙亥",L"丁亥", L"己亥", L"辛亥", L"癸亥"}
};
?
static _TCHAR sBuf[128];??????? // 用作八字結果緩沖區
?
// 根據出生年月日的干支計算時辰干支
// 輸入參數:bazi,年月日的干支,即八字中的前六個字
// 輸入參數:hour,出生時間的小時數,-1~22
// 輸出結果:八字字符串,Unicode編碼
_TCHAR * ComputeTimeGan(_TCHAR *bazi, inthour)
{
???????? _TCHARdayGan = bazi[4];
?
???????? intindexX, indexY;
????????
???????? inti;
???????? for(i = 0; i < 10; i++)
?????????????????? if(dayGan == TianGan[i]) break;
???????? if(i >= 10) return 0;
???????? indexX= i;
???????? if(indexX >=5) indexX -= 5;
???????? indexY= (hour +1)/2;
?
???????? wcscpy(sBuf,bazi);
???????? wcscat(sBuf,cTimeGanZhi_Table[indexY][indexX]);
?
???????? returnsBuf;
}
?
/*
十二月份天干強度表
生月\四柱天干??????? 甲????????????? 乙????????????? 丙????????????? 丁????????????? 戊????????????? 己????????????? 庚????????????? 辛????????????? 壬???? ???????? 癸
子月??????????????????????????? 1.2???????????? 1.2???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.2???????????? 1.2
丑月??????????????????????????? 1.06 1.06 1.0???????????? 1.0???????????? 1.1???????????? 1.1???????????? 1.14 1.14 1.1???????????? 1.1
寅月??????????????????????????? 1.14 1.14 1.2???????????? 1.2???????????? 1.06 1.06 1.0???????????? 1.0???????????? 1.0???????????? 1.0
卯月??????????????????????????? 1.2???????????? 1.2???????????? 1.2???????????? 1.2???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0
辰月??????????????????????????? 1.1???????????? 1.1???????????? 1.06 1.06 1.1???????????? 1.1???????????? 1.1???????????? 1.1???????????? 1.04 1.04
巳月??????????????????????????? 1.0???????????? 1.0???????????? 1.14 1.14 1.14 1.14 1.06 1.06 1.06 1.06
午月??????????????????????????? 1.0???????????? 1.0???????????? 1.2???????????? 1.2???????????? 1.2???????????? 1.2???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0
未月??????????????????????????? 1.04 1.04 1.1???????????? 1.1???????????? 1.16 1.16 1.1???????????? 1.1???????????? 1.0???????????? 1.0
申月??????????????????????????? 1.06 1.06 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.14 1.14 1.2???????????? 1.2
酉月??????????????????????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.2???????????? 1.2???????????? 1.2???????????? 1.2
戌月??????????????????????????? 1.0???????????? 1.0???????????? 1.04 1.04 1.14 1.14 1.16 1.16 1.06 1.06
亥月??????????????????????????? 1.2???????????? 1.2???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.0???????????? 1.14 1.14
*/
?
double TianGan_Strength [12][10] =
{
???????? {1.2, 1.2,? 1.0,? 1.0,? 1.0,? 1.0,? 1.0,? 1.0,? 1.2,? 1.2},
???????? {1.06,??????? 1.06,???????? 1.0,? 1.0,? 1.1,? 1.1,? 1.14,???????? 1.14,???????? 1.1,? 1.1},
???????? {1.14,??????? 1.14,???????? 1.2,? 1.2,? 1.06,???????? 1.06,???????? 1.0,? 1.0,? 1.0,? 1.0},
???????? {1.2, 1.2,? 1.2,? 1.2,? 1.0,? 1.0,? 1.0,? 1.0,? 1.0,? 1.0},
???????? {1.1, 1.1,? 1.06,???????? 1.06,???????? 1.1,? 1.1,? 1.1,? 1.1,? 1.04,???????? 1.04},
???????? {1.0, 1.0,? 1.14,???????? 1.14,???????? 1.14,???????? 1.14,???????? 1.06,???????? 1.06,???????? 1.06,???????? 1.06},
???????? {1.0, 1.0,? 1.2,? 1.2,? 1.2,? 1.2,? 1.0,? 1.0,? 1.0,? 1.0},
???????? {1.04,??????? 1.04,???????? 1.1,? 1.1,? 1.16,???????? 1.16,???????? 1.1,? 1.1,? 1.0,? 1.0},
???????? {1.06,??????? 1.06,???????? 1.0,? 1.0,? 1.0,? 1.0,? 1.14,???????? 1.14,???????? 1.2,? 1.2},
???????? {1.0, 1.0,? 1.0,? 1.0,? 1.0,? 1.0,? 1.2,? 1.2,? 1.2,? 1.2},
???????? {1.0, 1.0,? 1.04,???????? 1.04,???????? 1.14,???????? 1.14,???????? 1.16,???????? 1.16,???????? 1.06,???????? 1.06},
???????? {1.2, 1.2,? 1.0,? 1.0,? 1.0,? 1.0,? 1.0,? 1.0,? 1.14,???????? 1.14}
};
?
/*
十二月份地支強度表
?
?????????????????? ???? 生月?????? 子月???????? 丑月???????? 寅月???????? 卯月???????? 辰月???????? 巳月???????? 午月???????? 未月???????? 申月???????? 酉月???????? 戌月???????? 亥月????????
地支???????? 支藏
子????????????? 癸?????????????????????? 1.2???????????? 1.1???????????? 1.0???????????? 1.0???????????? 1.04 1.06 1.0???????????? 1.0???????????? 1.2???????????? 1.2???????????? 1.06 1.14
丑????????????? 癸?????????????????????? 0.36 0.33 0.3???????????? 0.3???????????? 0.312??????? 0.318??????? 0.3???????????? 0.3???????????? 0.36 0.36 0.318??????? 0.342
丑????????????? 辛?????????????????????? 0.2???????????? 0.228??????? 0.2???????????? 0.2???????????? 0.23 0.212??????? 0.2???????????? 0.22 0.228??????? 0.248??????? 0.232??????? 0.2?? ????????
丑????????????? 己?????????????????????? 0.5???????????? 0.55 0.53 0.5???????????? 0.55 0.57 0.6???????????? 0.58 0.5???????????? 0.5???????????? 0.57 0.5????????????
寅????????????? 丙?????????????????????? 0.3???????????? 0.3???????????? 0.36 0.36 0.318??????? 0.342??????? 0.36 0.33 0.3???????????? 0.3???????????? 0.342??????? 0.318???????
寅????????????? 甲?????????????????????? 0.84 0.742??????? 0.798??????? 0.84 0.77 0.7???????????? 0.7???????????? 0.728??????? 0.742??????? 0.7???????????? 0.7???????????? 0.84
卯????????????? 乙?????????????????????? 1.2???????????? 1.06 1.14 1.2???????????? 1.1???????????? 1.0???????????? 1.0???????????? 1.04 1.06 1.0???????????? 1.0???????????? 1.2????????????
辰????????????? 乙?????????????????????? 0.36 0.318??????? 0.342??????? 0.36 0.33 0.3???????????? 0.3???????????? 0.312??????? 0.318??????? 0.3???????????? 0.3???????????? 0.36
辰????????????? 癸?????????????????????? 0.24 0.22 0.2???????????? 0.2???????????? 0.208??????? 0.2???????????? 0.2???????????? 0.2???????????? 0.24 0.24 0.212??????? 0.228???????
辰????????????? 戊?????????????????????? 0.5???????????? 0.55 0.53 0.5???????????? 0.55 0.6???????????? 0.6???????????? 0.58 0.5???????????? 0.5???????????? 0.57 0.5????????????
巳????????????? 庚?????????????????????? 0.3???????????? 0.342??????? 0.3???????????? 0.3???????????? 0.33 0.3???????????? 0.3???????????? 0.33 0.342??????? 0.36 0.348??????? 0.3????????????
巳????????????? 丙?????????????????????? 0.7???????????? 0.7???????????? 0.84 0.84 0.742??????? 0.84 0.84 0.798??????? 0.7???????????? 0.7???????????? 0.728??????? 0.742???????
午????????????? 丁?????????????????????? 1.0???????????? 1.0???????????? 1.2???????????? 1.2???????????? 1.06 1.14 1.2???????????? 1.1???????????? 1.0???????????? 1.0???????????? 1.04 1.06
未????????????? 丁?????????????????????? 0.3???????????? 0.3???????????? 0.36 0.36 0.318??????? 0.342??????? 0.36 0.33 0.3???????????? 0.3???????????? 0.312??????? 0.318???????
未????????????? 乙?????????????????????? 0.24 0.212??????? 0.228??????? 0.24 0.22 0.2???????????? 0.2???????????? 0.208??????? 0.212??????? 0.2???????????? 0.2???????????? 0.24
未????????????? 己?????????????????????? 0.5???????????? 0.55 0.53 0.5???????????? 0.55 0.57 0.6???????????? 0.58 0.5???????????? 0.5???????????? 0.57 0.5????????????
申????????????? 壬?????????????????????? 0.36 0.33 0.3???????????? 0.3???????????? 0.312??????? 0.318??????? 0.3???????????? 0.3???????????? 0.36 0.36 0.318??????? 0.342???????
申????????????? 庚?????????????????????? 0.7???????????? 0.798??????? 0.7???????????? 0.7???????????? 0.77 0.742??????? 0.7???????????? 0.77 0.798??????? 0.84 0.812??????? 0.7????????????
酉????????????? 辛?????????????????????? 1.0???????????? 1.14 1.0???????????? 1.0???????????? 1.1???????????? 1.06 1.0???????????? 1.1???????????? 1.14 1.2???????????? 1.16 1.0????????????
戌????????????? 辛?????????????????????? 0.3???????????? 0.342??????? 0.3???????????? 0.3???????????? 0.33 0.318??????? 0.3???????????? 0.33 0.342??????? 0.36 0.348??????? 0.3????????????
戌????????????? 丁?????????????????????? 0.2???????????? 0.2???????????? 0.24 0.24 0.212??????? 0.228??????? 0.24 0.22 0.2???????????? 0.2???????????? 0.208??????? 0.212???????
戌????????????? 戊?????????????????????? 0.5???????????? 0.55 0.53 0.5???????????? 0.55 0.57 0.6???????????? 0.58 0.5???????????? 0.5???????????? 0.57 0.5????????????
亥????????????? 甲?????????????????????? 0.36 0.318??????? 0.342??????? 0.36 0.33 0.3???????????? 0.3???????????? 0.312??????? 0.318??????? 0.3???????????? 0.3???????????? 0.36
亥????????????? 壬???? ?????????????????? 0.84 0.77 0.7???????????? 0.7???????????? 0.728??????? 0.742??????? 0.7???????????? 0.7???????????? 0.84 0.84 0.724??????? 0.798???????
*/
struct ZISTRENGTH {
???????? _TCHARdiZhi;
???????? _TCHARzhiCang;
???????? doublestrength[12];
};
?
ZISTRENGTHDiZhi_Strength [] =
{
???????? {L'子', L'癸', {1.2,1.1, 1.0, 1.0,??????? 1.04, 1.06, 1.0,1.0, 1.2, 1.2, 1.06, 1.14}},?????
???????? {L'丑', L'癸', {0.36,0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36, 0.36, 0.318, 0.342}},
???????? {L'丑', L'辛', {0.2,0.228, 0.2, 0.2, 0.23, 0.212, 0.2,???????? 0.22,0.228, 0.248, 0.232, 0.2}},??????????????
???????? {L'丑', L'己', {0.5,0.55, 0.53, 0.5, 0.55, 0.57, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},?????????????????
???????? {L'寅', L'丙', {0.3,0.3, 0.36, 0.36, 0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.342, 0.318}},???
???????? {L'寅', L'甲', {0.84,0.742, 0.798, 0.84, 0.77, 0.7, 0.7, 0.728, 0.742, 0.7, 0.7, 0.84}},???
???????? {L'卯', L'乙', {1.2,1.06, 1.14, 1.2, 1.1, 1.0, 1.0, 1.04, 1.06, 1.0, 1.0, 1.2}},?????????????
???????? {L'辰', L'乙', {0.36,0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36}},???
???????? {L'辰', L'癸', {0.24,0.22,? 0.2, 0.2, 0.208, 0.2, 0.2, 0.2,0.24, 0.24, 0.212, 0.228}},???????
???????? {L'辰', L'戊', {0.5,0.55, 0.53, 0.5, 0.55, 0.6, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},??????????
???????? {L'巳', L'庚', {0.3,0.342, 0.3, 0.3, 0.33, 0.3, 0.3, 0.33, 0.342, 0.36, 0.348, 0.3}},??????????
???????? {L'巳', L'丙', {0.7,0.7, 0.84, 0.84, 0.742, 0.84, 0.84, 0.798, 0.7, 0.7, 0.728, 0.742}},???
???????? {L'午', L'丁', {1.0,1.0, 1.2, 1.2, 1.06, 1.14, 1.2, 1.1, 1.0, 1.0, 1.04, 1.06}},???
???????? {L'未', L'丁', {0.3,0.3, 0.36, 0.36, 0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.312, 0.318}},???
???????? {L'未', L'乙', {0.24,0.212, 0.228, 0.24, 0.22, 0.2, 0.2, 0.208, 0.212, 0.2, 0.2, 0.24}},???
???????? {L'未', L'己', {0.5,0.55, 0.53, 0.5, 0.55, 0.57, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},?????????????????
???????? {L'申', L'壬', {0.36,0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36, 0.36, 0.318, 0.342}},???
???????? {L'申', L'庚', {0.7,0.798, 0.7, 0.7, 0.77, 0.742, 0.7, 0.77, 0.798, 0.84, 0.812, 0.7}},???????????????
???????? {L'酉', L'辛', {1.0,1.14, 1.0, 1.0, 1.1, 1.06, 1.0, 1.1, 1.14, 1.2, 1.16, 1.0}},?????????????
???????? {L'戌', L'辛', {0.3,0.342, 0.3, 0.3, 0.33, 0.318, 0.3, 0.33, 0.342, 0.36, 0.348, 0.3}},???????????????
???????? {L'戌', L'丁', {0.2,0.2, 0.24, 0.24, 0.212, 0.228, 0.24, 0.22, 0.2, 0.2, 0.208, 0.212}},???
???????? {L'戌', L'戊', {0.5,0.55, 0.53, 0.5, 0.55, 0.57, 0.6, 0.58, 0.5, 0.5, 0.57, 0.5}},?????????????????
???????? {L'亥', L'甲', {0.36,0.318, 0.342, 0.36, 0.33, 0.3, 0.3, 0.312, 0.318, 0.3, 0.3, 0.36}},???
???????? {L'亥', L'壬', {0.84,0.77, 0.7, 0.7, 0.728, 0.742, 0.7, 0.7, 0.84, 0.84, 0.724, 0.798}}?????
};
?
/*
???????? 金 --- 0
???????? 木 --- 1
???????? 水 --- 2
???????? 火 --- 3
???????? 土 --- 4
*/
?
_TCHAR WuXingTable[5] = {L'金', L'木', L'水', L'火', L'土' };
?
/*
???????? 天干地支的五行屬性表
???????? 天干: 甲-木、乙-木、丙-火、丁-火、戊-土、己-土、庚-金、辛-金、壬-水、癸-水
???????? 地支:子-水、丑-土、寅-木、卯-木、辰-土、巳-火、午-火、未-土、申-金、酉-金、戌-土、亥-水
*/
?
int TianGan_WuXingProp[10] = {1, 1, 3, 3, 4,4, 0, 0, 2, 2};
int DiZhi_WuXingProp[12] = {2, 4, 1, 1, 4,3, 3, 4, 0, 0, 4, 2};
int GenerationSourceTable[5] = {4, 2, 0, 1,3};
?
int ComputeGanIndex(_TCHAR gan)
{
???????? inti;
???????? for(i=0; i < 10; i++)
?????????????????? if(TianGan[i] == gan) break;
???????? if(i >= 10) return -1;
???????? returni;
}
?
int ComputeZhiIndex(_TCHAR zhi)
{
???????? inti;
???????? for(i=0; i < 12; i++)
?????????????????? if(DiZhi[i] == zhi) break;
???????? if(i >= 12) return -1;
???????? returni;
}
?
static _TCHAR sResultBuf[1024];?? // 用作八字測算結果返回的字符緩沖區
?
// 根據八字計算五行平衡
// 輸入參數:bazi,年月日時的干支,即俗稱的八字
// 輸出結果:分析結果字符串,Unicode編碼
_TCHAR * EvalBazi(_TCHAR *bazi)
{
???????? doublestrengthResult[5];
???????? intmonthIndex = ComputeZhiIndex(bazi[3]);
???????? if(monthIndex == -1) goto ERROR_CASE;
?
???????? wcscpy(sResultBuf,bazi);
???????? wcscat(sResultBuf,L"\n\n");
???????? for(int wuXing = 0; wuXing < 5; wuXing++) {
?????????????????? doublevalue1 = 0.0, value2 = 0.0;
?????????????????? inti;
?????????????????? //掃描4個天干
?????????????????? for(i? = 0; i <8; i+=2) {
??????????????????????????? TCHARgan = bazi[i];
??????????????????????????? intindex = ComputeGanIndex(gan);
??????????????????????????? if(index == -1) goto ERROR_CASE;
?
??????????????????????????? if(TianGan_WuXingProp[index] == wuXing)
???????????????????????????????????? value1+= TianGan_Strength[monthIndex][index];
?????????????????? }
?
?????????????????? //掃描支藏
?????????????????? for(i? = 1; i <8; i+=2) {
??????????????????????????? TCHARzhi = bazi[i];
??????????????????????????? for(intj = 0; j < sizeof (DiZhi_Strength)/sizeof (DiZhi_Strength[0]); j++) {
???????????????????????????????????? if(DiZhi_Strength[j].diZhi == zhi) {
?????????????????????????????????????????????? intzhiCangIndex = ComputeGanIndex(DiZhi_Strength[j].zhiCang);
?????????????????????????????????????????????? if(zhiCangIndex == -1) goto ERROR_CASE;
?????????????????????????????????????????????? if(TianGan_WuXingProp[zhiCangIndex] == wuXing) {
??????????????????????????????????????????????????????? value2+= DiZhi_Strength[j].strength[monthIndex];
??????????????????????????????????????????????????????? break;
?????????????????????????????????????????????? }
???????????????????????????????????? }
??????????????????????????? }
?????????????????? }
?
?????????????????? strengthResult[wuXing]= value1 + value2;
?
?????????????????? //輸出一行計算結果
?????????????????? {
??????????????????????????? _TCHARpreStr[128];
??????????????????????????? chartmpBuf[128];
??????????????????????????? _TCHARtmpWBuf[256];
??????????????????????????? sprintf(tmpBuf,":%.3f + %.3f = %.3f\n", (float)value1, (float)value2,(float)(value1+value2));
??????????????????????????? MultiByteToWideChar(CP_ACP, 0, tmpBuf, strlen(tmpBuf)+1,
???????????????????????????????????? tmpWBuf,sizeof(tmpWBuf)/sizeof(_TCHAR) );
??????????????????????????? wcscpy(preStr,L"金:\t");
??????????????????????????? preStr[0]= WuXingTable[wuXing];
??????????????????????????? wcscat(sResultBuf,preStr);
??????????????????????????? wcscat(sResultBuf,tmpWBuf);
?????????????????? }
???????? }
????????
???????? //根據日干求命里屬性
???????? intfateProp, srcProp;
?
???????? {
?????????????????? _TCHARtmpWBuf[256];
?????????????????? fateProp= TianGan_WuXingProp[ComputeGanIndex(bazi[4])];
?????????????????? if(fateProp == -1) goto ERROR_CASE;
?????????????????? wcscpy(tmpWBuf,L"\n命屬金\n\n");
?????????????????? tmpWBuf[3]= WuXingTable[fateProp];
?????????????????? wcscat(sResultBuf,tmpWBuf);
?
???????? }
?
???????? //求同類和異類的強度值
???????? srcProp= GenerationSourceTable[fateProp];
???????? {
?????????????????? _TCHARpreStr[128];
?????????????????? chartmpBuf[128];
?????????????????? _TCHARtmpWBuf[256];
?
?????????????????? doubletongLei = strengthResult[fateProp] + strengthResult[srcProp];
?????????????????? doubleyiLei = 0.0;
?????????????????? for(inti = 0; i < 5; i ++) yiLei += strengthResult[i];
?????????????????? yiLei-= tongLei;
??????????????????
?????????????????? sprintf(tmpBuf,"%.3f+ %.3f = %.3f\n", (float)strengthResult[fateProp],(float)strengthResult[srcProp],
??????????????????????????? (float)tongLei);
?????????????????? MultiByteToWideChar(CP_ACP, 0, tmpBuf, strlen(tmpBuf)+1,
??????????????????????????? tmpWBuf,sizeof(tmpWBuf)/sizeof(_TCHAR) );
?????????????????? wcscpy(preStr,L"同類:金+金,");
?????????????????? preStr[3]= WuXingTable[fateProp];
?????????????????? preStr[5]= WuXingTable[srcProp];
?????????????????? wcscat(sResultBuf,preStr);
?????????????????? wcscat(sResultBuf,tmpWBuf);
?
?????????????????? sprintf(tmpBuf,"%.3f\n", (float)yiLei);
?????????????????? MultiByteToWideChar(CP_ACP, 0, tmpBuf, strlen(tmpBuf)+1,
???????? ?????????????????? tmpWBuf,sizeof(tmpWBuf)/sizeof(_TCHAR) );
?????????????????? wcscat(sResultBuf,L"異類:總和為 ");
?????????????????? wcscat(sResultBuf,tmpWBuf);
???????? }
?
???????? returnsResultBuf;
?
ERROR_CASE:
????????
???????? return0;
}
?
總結
以上是生活随笔為你收集整理的计算生辰八字五行属性的算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 少数者博弈 matlab,少数者博弈
- 下一篇: Winform 连接打印机