读易[14]·远古卜卦算法分析与实现

<iframe align=”top” marginwidth=”0″ marginheight=”0″ src=”http://www.zealware.com/csdnblog01.html” frameborder=”0″ width=”728″ scrolling=”no” height=”90″></iframe>

我们知道,周易中的卦象有六爻,每爻分为阴阳两种情况。人们在用易经算卦的时候有一套演算的方法。这种演算的方法叫做易经中的“数”。主要是和数字有关。

和数字有关的现在都可以用计算机来实现。这里就介绍一下远古时人们卜卦的算法,并且附上一段C#的代码来说明怎样在计算机中实现算卦的演算方法。

一、揲筮

演算称作“揲筮”,用的工具是蓍草的茎杆。蓍草我也没有见过,据资料记载,它是一种多年生草本植物,每年生一茎,百年之后百茎丛生,才可用为算策,据说这样具有阅历才能灵应。说灵不灵应就比较玄了,算命这个东西信不得,你要是全信了,保证那天就把自己赔进去。我们将算命作为做决策的一种途径,辅助工具而已,关键还是靠自己的分析。如果找不到蓍草的茎杆,那笔杆子也是可以的。不过下面还是按照蓍草的来说,一种工具罢了。

算卦的时候总共要用五十根,《系辞》中记载,“大衍之数五十”。

首先,拿出一根来始终不用,放在一边,象征太极,“其用四十有九”。其实那一根不仅仅说是象征太极,把它拿出来,这也说明了,不管怎么算,都不可能算得穷尽,总有那么一点不在我们算的范围之内。算命的说他能百分之百算准,那是瞎话,因为算得不清楚的地方他含糊过去了。

将四十九根蓍草用两手随便一分,分别握于两手,象征两仪,“分而为二以象两”。

从右手抽出一根,象征三才,三才在以前我介绍过,这里抽出一根就是“挂一以象三”。

然后将左手的蓍草四个四个地数,象征四季,“揲之以四以象四时”。将剩下的余数(如果是四就余四)记下。再把右手的蓍草四个四个地数,记下余数。这里两个余数相加不是四就一定是八。加上抽出来的象征三才的那根,得到的数不是五就是九。这个五或九就叫作“过揲之数”,这个数要记下,最后用得到。

以上的过程分为“分二、挂一、揲四、归奇”四步,也叫做“四营”。四营完成就叫一易,也叫一变。三变才能算出一爻。一卦六爻,也就是十八变。足以见算卦的复杂流程了。

刚才得到了五或九的过揲之数,将这五根或九根蓍草放在一旁,剩下四十或者四十四根。随意左右一分,再从右手抽出一根,左右手分别用四去数,按照第一易的方法,得到余数不是三就是七,加上从右手抽的一根,得到不是四就是八。这是第二易。

用剩下的蓍草再按照同样的方法,得到余数四或者八。完成第三易。

三易都完成之后,可以得到三个数,将四五作为少数,八九作为多数。总共有四种情况:

两多一少,为少阳,是不变的阳爻;
两少一多,为少阴,是不变的阴爻;
三个多数,为老阴,是变动的阴爻,在卦中会变为阳;
三个少数,为老阳,是变动的阳爻,在卦中会变为阴。

这样我们得到一爻的结果。按照上面的方法,重新来过,总共六遍,得到六爻,成为一卦。注意爻的顺序必须是由下到上的。卦中可能会有变爻,阴变为阳,阳变为阴,在变之前的卦称为“本卦”,变之后称为“之卦”。

比如说,以前我帮朋友算了一卦,“坤”卦,全是阴爻。其中第三爻为老阴,会变为阳。也就是说这次算卦的结果是,本卦为“坤”,之卦为“谦”,就叫做“坤之谦”。

二、算法实现

下面贴出算法实现的代码,当然从编程的角度看,下面的代码很多地方可以优化,但为了说明算法的流程,这里完全按照记载的方法运算。有些地方会很低效,优化后的代码我就不贴上来了。

读易[14]·远古卜卦算法分析与实现 using System;
读易[14]·远古卜卦算法分析与实现
using System.Text;
读易[14]·远古卜卦算法分析与实现
using System.Collections.Generic;
读易[14]·远古卜卦算法分析与实现
using Microsoft.VisualStudio.TestTools.UnitTesting;
读易[14]·远古卜卦算法分析与实现
using Cylon.Yi.Scriptures;
读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现
namespace Cylon.Yi.Scriptures.Test
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现[TestClass]
读易[14]·远古卜卦算法分析与实现
publicclassTestBuGua
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现
privateBuGuabuGua=newBuGua();
读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现[TestMethod]
读易[14]·远古卜卦算法分析与实现
publicvoidLaoYangYaoShouldBuild()
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现buGua.YiZhi1(
10);
读易[14]·远古卜卦算法分析与实现buGua.YiZhi2(
5);
读易[14]·远古卜卦算法分析与实现Assert.AreEqual(Yao.LaoYang,buGua.YiZhi3(
6));
读易[14]·远古卜卦算法分析与实现}

读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现[TestMethod]
读易[14]·远古卜卦算法分析与实现
publicvoidShaoYinYaoShouldBuild()
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现buGua.YiZhi1(
10);
读易[14]·远古卜卦算法分析与实现buGua.YiZhi2(
5);
读易[14]·远古卜卦算法分析与实现Assert.AreEqual(Yao.ShaoYin,buGua.YiZhi3(
7));
读易[14]·远古卜卦算法分析与实现}

读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现[TestMethod]
读易[14]·远古卜卦算法分析与实现
publicvoidShaoYangYaoShouldBuild()
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现buGua.YiZhi1(
8);
读易[14]·远古卜卦算法分析与实现buGua.YiZhi2(
11);
读易[14]·远古卜卦算法分析与实现Assert.AreEqual(Yao.ShaoYang,buGua.YiZhi3(
5));
读易[14]·远古卜卦算法分析与实现}

读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现[TestMethod]
读易[14]·远古卜卦算法分析与实现
publicvoidLaoYinYaoShouldBuild()
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现buGua.YiZhi1(
8);
读易[14]·远古卜卦算法分析与实现buGua.YiZhi2(
11);
读易[14]·远古卜卦算法分析与实现Assert.AreEqual(Yao.LaoYin,buGua.YiZhi3(
8));
读易[14]·远古卜卦算法分析与实现}

读易[14]·远古卜卦算法分析与实现}

读易[14]·远古卜卦算法分析与实现}

读易[14]·远古卜卦算法分析与实现 using System;
读易[14]·远古卜卦算法分析与实现
using System.Collections.Generic;
读易[14]·远古卜卦算法分析与实现
using System.Text;
读易[14]·远古卜卦算法分析与实现
using System.Diagnostics;
读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
/**/ /*
读易[14]·远古卜卦算法分析与实现*大衍之数五十,其用四十有九。分而为二以象两,挂一以象三,揲之以四以象四时,
读易[14]·远古卜卦算法分析与实现*归奇于扐以象闰;五岁再闰,故再扐而后挂。
读易[14]·远古卜卦算法分析与实现*天数五,地数五。五位相得而各有合,天数二十有五,地数三十,凡天地之数五十有五,此所以成变化而行鬼神也。
读易[14]·远古卜卦算法分析与实现*《乾》之策二百一十有六,《坤》之策百四十有四,凡三百六十,当期之日。
读易[14]·远古卜卦算法分析与实现*二篇之策,万有一千五百二十,当万物之数也。是故四营而成《易》,十有八变而成卦,八卦而小成。
读易[14]·远古卜卦算法分析与实现
*/

读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现
namespace Cylon.Yi.Scriptures
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现
publicenumYao
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现LaoYin,
//老阴
读易[14]·远古卜卦算法分析与实现
LaoYang,//老阳
读易[14]·远古卜卦算法分析与实现
ShaoYin,//少阴
读易[14]·远古卜卦算法分析与实现
ShaoYang//少阳
读易[14]·远古卜卦算法分析与实现
}

读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现
publicclassBuGua
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现
privateintnum45Count=0;
读易[14]·远古卜卦算法分析与实现
privateintsurplus=0;
读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现
publicvoidYiZhi1(intleft)
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现
//一易
读易[14]·远古卜卦算法分析与实现
num45Count=0;
读易[14]·远古卜卦算法分析与实现
if(YiZhi(left,outsurplus)6)
读易[14]·远古卜卦算法分析与实现num45Count
++;
读易[14]·远古卜卦算法分析与实现}

读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现
publicvoidYiZhi2(intleft)
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现
//二易
读易[14]·远古卜卦算法分析与实现
if(ZaiYiZhi(left,surplus,outsurplus)6)
读易[14]·远古卜卦算法分析与实现num45Count
++;
读易[14]·远古卜卦算法分析与实现}

读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现
publicYao/span>YiZhi3(intleft)
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现
//三易成爻
读易[14]·远古卜卦算法分析与实现
if(ZaiYiZhi(left,surplus,outsurplus)6)
读易[14]·远古卜卦算法分析与实现num45Count
++;
读易[14]·远古卜卦算法分析与实现
switch(num45Count)
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现
case0:returnYao.LaoYin;
读易[14]·远古卜卦算法分析与实现
case1:returnYao.ShaoYang;
读易[14]·远古卜卦算法分析与实现
case2:returnYao.ShaoYin;
读易[14]·远古卜卦算法分析与实现
case3:returnYao.LaoYang;
读易[14]·远古卜卦算法分析与实现
default:Debug.Assert(false);returnnull;
读易[14]·远古卜卦算法分析与实现}

读易[14]·远古卜卦算法分析与实现}

读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现
publicintSurplus
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
get{returnsurplus;}
读易[14]·远古卜卦算法分析与实现}

读易[14]·远古卜卦算法分析与实现
读易[14]·远古卜卦算法分析与实现
privateintYiZhi(intleft,outintsurplus)
读易[14]·远古卜卦算法分析与实现 读易[14]·远古卜卦算法分析与实现
{
读易[14]·远古卜卦算法分析与实现
//大衍之数五十,其用四十有九。
读易[14]·远古卜卦算法分析与实现
Debug.Assert((left>来源:happmaoo

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2008年1月1日
下一篇 2008年1月1日

相关推荐