1.前言
周易学了一段时间了,今天来分享一个针对梅花易起卦的辅助小算法。前提是,读者需要有一定的周易业务知识。
2.六十四卦的介绍
直奔主题,下面是我整理消化总结的一张图:
3.卦象的解释
4.梅花易起卦算法介绍
参考地址:http://www.quanxue.cn/QT_XiaoYa/YiJing/YiJing06.html
5. PHP版梅花易起卦算法实现
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 |
$keys = [ [ "坤为地", "地天泰", "地泽临", "地火明夷", "地雷复", "地风升", "地水师", "地山谦" ], [ "天地否", "乾为天", "天泽履", "天火同人", "天雷无妄", "天风姤", "天水讼", "天山遁" ], [ "泽地萃", "泽天夬", "兑为泽", "泽火革", "泽雷随", "泽风中孚", "泽水困", "泽山咸" ], [ "火地晋", "火天大有", "火泽睽", "离为火", "火雷噬嗑", "火风鼎", "火水未济", "火山旅" ], [ "雷地豫", "雷天大壮", "雷泽归妹", "雷火丰", "震为雷", "雷风恒", "雷水解", "雷山小过" ], [ "风地观", "风天小畜", "风泽中孚", "风火家人", "风雷益", "巽为风", "风水涣", "风山渐" ], [ "水地比", "水天需", "水泽节", "水火既济", "水雷屯", "水风井", "坎为水", "水山旅" ], [ "山地剥", "山天大畜", "山泽损", "山火贲", "山雷颐", "山风蛊", "山水蒙", "艮为山" ]]; $binary_keys = [0x0, 0x7, 0x3, 0x5, 0x1, 0x6, 0x2, 0x4]; function validate($value) { return true; } function generateDiagrams($a, $b, $c) { global $keys, $binary_keys; $diagrams = $sDiagrams = $hDiagrams = $bDiagrams = ''; if (validate([$a, $b, $c])) { $a %= 8; $b %= 8; $c = $c % 6 === 0 ? 6 : $c % 6; //本卦 $sDiagrams = $keys[$a][$b]; /** * 互卦 * 上卦 3 4 5 爻 * 下卦 2 3 4 爻 */ $diagrams = $binary_keys[$a] << 3 | $binary_keys[$b]; $upDiagramsKey = (0x1C & $diagrams) >> 2; $downDiagramsKey = ($diagrams & 0xE) >> 1; list($up_key, $down_key) = findKeyFromBinaryKeys($upDiagramsKey, $downDiagramsKey); if ($up_key && $down_key) { $hDiagrams = $keys[$up_key][$down_key]; } //变爻 $diagrams = $diagrams ^ (0x1 << ($c - 1)); $upDiagramsKey = $diagrams >> 3; $downDiagramsKey = $diagrams & 0x7; list($up_key, $down_key) = findKeyFromBinaryKeys($upDiagramsKey, $downDiagramsKey); if ($up_key && $down_key) { $bDiagrams = $keys[$up_key][$down_key]; } } return [$sDiagrams, $hDiagrams, $bDiagrams]; } function findKeyFromBinaryKeys($upKey, $downKey) { global $binary_keys; return [array_search($upKey, $binary_keys), array_search($downKey, $binary_keys)]; } var_dump(generateDiagrams(43, 82, 56)); |
6. Excel宏实现
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 |
Sub 梅花易起卦() Dim keys(8, 8) As String keys(0, 0) = "坤为地" keys(0, 1) = "地天泰" keys(0, 2) = "地泽临" keys(0, 3) = "地火明夷" keys(0, 4) = "地雷复" keys(0, 5) = "地风升" keys(0, 6) = "地水师" keys(0, 7) = "地山谦" keys(1, 0) = "天地否" keys(1, 1) = "乾为天" keys(1, 2) = "天泽履" keys(1, 3) = "天火同人" keys(1, 4) = "天雷无妄" keys(1, 5) = "天风姤" keys(1, 6) = "天水讼" keys(1, 7) = "天山遁" keys(2, 0) = "泽地萃" keys(2, 1) = "泽天夬" keys(2, 2) = "兑为泽" keys(2, 3) = "泽火革" keys(2, 4) = "泽雷随" keys(2, 5) = "泽风中孚" keys(2, 6) = "泽水困" keys(2, 7) = "泽山咸" keys(3, 0) = "火地晋" keys(3, 1) = "火天大有" keys(3, 2) = "火泽睽" keys(3, 3) = "离为火" keys(3, 4) = "火雷噬嗑" keys(3, 5) = "火风鼎" keys(3, 6) = "火水未济" keys(3, 7) = "火山旅" keys(4, 0) = "雷地豫" keys(4, 1) = "雷天大壮" keys(4, 2) = "雷泽归妹" keys(4, 3) = "雷火丰" keys(4, 4) = "震为雷" keys(4, 5) = "雷风恒" keys(4, 6) = "雷水解" keys(4, 7) = "雷山小过" keys(5, 0) = "风地观" keys(5, 1) = "风天小畜" keys(5, 2) = "风泽中孚" keys(5, 3) = "风火家人" keys(5, 4) = "风雷益" keys(5, 5) = "巽为风" keys(5, 6) = "风水涣" keys(5, 7) = "风山渐" keys(6, 0) = "水地比" keys(6, 1) = "水天需" keys(6, 2) = "水泽节" keys(6, 3) = "水火既济" keys(6, 4) = "水雷屯" keys(6, 5) = "水风井" keys(6, 6) = "坎为水" keys(6, 7) = "水山旅" keys(7, 0) = "山地剥" keys(7, 1) = "山天大畜" keys(7, 2) = "山泽损" keys(7, 3) = "山火贲" keys(7, 4) = "山雷颐" keys(7, 5) = "山风蛊" keys(7, 6) = "山水蒙" keys(7, 7) = "艮为山" Dim binary_keys(8) As Integer binary_keys(0) = &H0 binary_keys(1) = &H7 binary_keys(2) = &H3 binary_keys(3) = &H5 binary_keys(4) = &H1 binary_keys(5) = &H6 binary_keys(6) = &H2 binary_keys(7) = &H4 A = Sheet1.Range("H16").Value Mod 8 B = Sheet1.Range("I16").Value Mod 8 C = Sheet1.Range("J16").Value Mod 6 If (Not (CBool(C Xor 0))) Then C = 6 End If '本卦 Sheet1.Range("H21").Value = keys(A, B)'互卦'下卦 2 3 4 爻'上卦 3 4 5 爻 diagrams = binary_keys(A) * 2 ^ 3 Or binary_keys(B) upDiagramsKey = (&H1C And diagrams) / 2 ^ 2 downDiagramsKey = (diagrams And &HE) / 2 ^ 1 For i = 0 To UBound(binary_keys) - 1If (Not (CBool(binary_keys(i) Xor upDiagramsKey))) Then up_key = i End IfIf (Not (CBool(binary_keys(i) Xor downDiagramsKey))) Then down_key = i End IfNext i Sheet1.Range("I21").Value = keys(up_key, down_key) '变爻 diagrams = diagrams Xor (&H1 * 2 ^ (C - 1)) upDiagramsKey = diagrams / 2 ^ 3 downDiagramsKey = diagrams And &H7 For i = 0 To UBound(binary_keys) - 1If (Not (CBool(binary_keys(i) Xor upDiagramsKey))) Then up_key = i End IfIf (Not (CBool(binary_keys(i) Xor downDiagramsKey))) Then down_key = i End IfNext i Sheet1.Range("J21").Value = keys(up_key, down_key) End Sub |