PHP及Excel實現梅花易起卦演算法

来源:https://www.cnblogs.com/pitmanhuang/archive/2022/04/24/16186983.html
-Advertisement-
Play Games

一、if語句 if 語句讓你能夠檢查程式的當前狀態,並據此採取相應的措施。if語句可應用於列表,以另一種方式處理列表中的大多數元素,以及特定值的元素1、簡單示例 names=['xiaozhan','caiyilin','zhoushen','DAOlang','huangxiaoming'] fo ...


1.前言

 周易學了一段時間了,今天來分享一個針對梅花易起卦的輔助小演算法。前提是,讀者需要有一定的周易業務知識。 

2.六十四卦的介紹

 直奔主題,下麵是我整理消化總結的一張圖: 

3.卦象的解釋

4.梅花易起卦演算法介紹

 參考地址:http://www.quanxue.cn/QT_XiaoYa/YiJing/YiJing06.html 

5. PHP版梅花易起卦演算法實現 

$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巨集實現 

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

7.參考

http://www.quanxue.cn/

本文來自博客園,作者:淙淙溪流,轉載請註明原文鏈接:https://www.cnblogs.com/pitmanhuang/p/16186983.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景介紹 當頁面內容很多的時候,用戶可能會一直往下滑動頁面。但是當他想返回頁面頂部進行其他操作時,他可能需要不斷滾動滑鼠滾輪,這就導致用戶體驗將很差。鑒於這種情況, “回到頂部”這一功能便出現了。 如今在我們瀏覽網站的時候,常常能遇見“回到頂部”這個按鈕。目前主流的回到頁面頂部分表現為兩種,一種是直 ...
  • 狀態模式是什麼 狀態模式是一種行為設計模式,讓你能在一個對象的內部狀態變化時改變其行為,使其看上去就像改變了自身所屬的類一樣。 為什麼要用狀態模式 如果對象需要根據自身當前狀態進行不同行為,同時狀態的數量非常多且與狀態相關的代碼會頻繁變更的話,可使用狀態模式。相似狀態和基於條件的狀態機轉換中存在許多 ...
  • 本篇主要講從技術體繫到商業洞察,分為五個小節,新一代開發範式雲原生、建立自己的技術體系、技術判斷力、技術業務產業周期,技術與商業洞察。對於新一代開發範式和技術體系的建立,文字部分我就不再補充,具體可以看看PPT。這裡我想講技術判斷力和商業洞察,這是建立技術體系之後,對關鍵點的判斷和洞察,是從點到面再 ...
  • 此文系【大話雲原生】系列第四篇,該系列文章期望用最通俗、簡單的語言說明白雲原生生態系統內的組成、架構以及應用關係。從這篇開始我們要開始針對Kubernetes進行介紹了,本文內容如下: 一、Kubernetes的Pod概念解析 前文說到老婆過生日了我們一起出去旅游,上了團體服務班車,小娜同學(老婆) ...
  • 什麼是分散式鎖 當多個進程在同一個系統中,用分散式鎖控制多個進程對資源的訪問 分散式鎖應用場景 傳統的單體應用單機部署情況下,可以使用java併發處理相關的API進行互斥控制。 分散式系統後由於多線程,多進程分佈在不同機器上,使單機部署情況下的併發控制鎖策略失效,為瞭解決跨JVM互斥機制來控制共用資 ...
  • 一、安裝matplotlib 1)由於已安裝anaconda,可直接打開anaconda prompt,再用命令pip install matplotlib進行安裝,因鏡像問題,可能較慢,建議第2種方式。 2)訪問https://pypi.org/project/matplotlib/#files, ...
  • 為什麼寫這個教程? 最近在學C++,翻了幾次菜鳥教程後,想寫個項目練練手。之前瞭解過ngrok,一個內網穿透工具,簡單講就是在內網中部署自己的服務,通過這個工具,可以讓公網上的用戶訪問到服務。 之前看了部分源碼,想把自己的一些優化想法用C實現一下,所以斷斷續續花了2個多月寫了C版本的CProxy。 ...
  • 《The Go Programming Language》 知識點記載,學習筆記、章節練習與個人思考。第一章內容。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...