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

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

一、揲筮

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

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

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

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

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

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

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

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

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

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

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

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

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

二、算法实现

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

usingSystem;
usingSystem.Text;
usingSystem.Collections.Generic;
usingMicrosoft.VisualStudio.TestTools.UnitTesting;
usingCylon.Yi.Scriptures;

namespaceCylon.Yi.Scriptures.Test
...{
    [TestClass]
publicclassTestBuGua
...{
privateBuGua buGua=newBuGua();

        [TestMethod]
publicvoidLaoYangYaoShouldBuild()
...{
            buGua.YiZhi1(
10);
            buGua.YiZhi2(
5);
            Assert.AreEqual(Yao.LaoYang, buGua.YiZhi3(
6));
        }

        [TestMethod]
publicvoidShaoYinYaoShouldBuild()
...{
            buGua.YiZhi1(
10);
            buGua.YiZhi2(
5);
            Assert.AreEqual(Yao.ShaoYin, buGua.YiZhi3(
7));
        }

        [TestMethod]
publicvoidShaoYangYaoShouldBuild()
...{
            buGua.YiZhi1(
8);
            buGua.YiZhi2(
11);
            Assert.AreEqual(Yao.ShaoYang, buGua.YiZhi3(
5));
        }

        [TestMethod]
publicvoidLaoYinYaoShouldBuild()
...{
            buGua.YiZhi1(
8);
            buGua.YiZhi2(
11);
            Assert.AreEqual(Yao.LaoYin, buGua.YiZhi3(
8));
        }
    }
}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Diagnostics;

/**//* * 大衍之数五十,其用四十有九。分而为二以象两,挂一以象三,揲之以四以象四时,
 * 归奇于扐以象闰;五岁再闰,故再扐而后挂。
 * 天数五,地数五。五位相得而各有合,天数二十有五,地数三十,凡天地之数五十有五,此所以成变化而行鬼神也。
 * 《乾》之策二百一十有六,《坤》之策百四十有四,凡三百六十,当期之日。
 * 二篇之策,万有一千五百二十,当万物之数也。是故四营而成《易》,十有八变而成卦,八卦而小成。
*/

namespaceCylon.Yi.Scriptures
...{
publicenumYao
...{
        LaoYin,
//老阴LaoYang,//老阳ShaoYin,//少阴ShaoYang//少阳}

publicclassBuGua
...{
privateintnum45Count=0;
privateintsurplus=0;

publicvoidYiZhi1(intleft)
...{
//一易num45Count=0;
if(YiZhi(left,outsurplus)<6)
                num45Count
++;
        }

publicvoidYiZhi2(intleft)
...{
//二易if(ZaiYiZhi(left, surplus,outsurplus)<6)
                num45Count
++;
        }

publicYao?YiZhi3(intleft)
...{
//三易成爻if(ZaiYiZhi(left, surplus,outsurplus)<6)
                num45Count
++;
switch(num45Count)
...{
case0:returnYao.LaoYin;
case1:returnYao.ShaoYang;
case2:returnYao.ShaoYin;
case3:returnYao.LaoYang;
default: Debug.Assert(false);returnnull;
            }
        }

publicintSurplus
...{
get...{returnsurplus; }        }

privateintYiZhi(intleft,outintsurplus)
...{
//大衍之数五十,其用四十有九。Debug.Assert((left>0)&&(left<49));
//分而为二以象两returnYiZhi(left,49-left,outsurplus);
        }

privateintZaiYiZhi(intleft,inttotal,outintsurplus)
...{
            Debug.Assert((left
>0)&&(left<total));
            Debug.Assert((total
==32)||(total==36)||(total==40)||(total==44));
//分而为二以象两returnYiZhi(left, total-left,outsurplus);
        }

privateintYiZhi(intleft,intright,outintsurplus)
...{
//挂一以象三right--;
//揲之以四以象四时intleftMod=left%4;
if(leftMod==0) leftMod=4;
intrightMod=right%4;
if(rightMod==0) rightMod=4;
//归奇于扐以象闰intresult=leftMod+rightMod;
            result
++;
            surplus
=left+right+1-result;
returnresult;
        }
    }
}

有些词语不好翻译成英文,毕竟英文中没有对应的词汇。所以这里的易经术语就全用拼音了。

说个有意思的,那天查了一下《易经》这个书名在英文中怎么翻译,查出来的结果是"book of changes"。后来仔细一琢磨,确实找不到更好的了。但总不是那个味儿。

还比如说“道”这个字怎么翻译,怎么翻也不对,后来直接音译过去。像中国功夫也是同样的。

三、简易方法

后人觉得这样算卦太繁琐,于是有了掷钱法。用铜钱(现在可以用硬币)三个,随手抛掷落下。两面一背为少阳;两背一面为少阴;三背为老阳,三面为老阴。这样抛掷六次即可排出六爻。

当然,还有更简单的方法。有人直接拿六枚钱币,一次抛掷。背为阳,面为阴。一下就排出整个卦象了。不过这样不能算出变爻。和易经的思想没有太大关系了。

后面介绍的两个算法,用计算机来算也是非常简单的,只需要懂得取随机数就行。网上有很多算卦的小软件都是这种方法算出来的。大家看看玩玩就行,一笑而过,别当真。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1507719

读易[14]·远古卜卦算法分析与实现 1相关推荐

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

    <iframe align="top" marginwidth="0" marginheight="0" src="http ...

  2. MATLAB之易经卜卦程序+GUI

    MATLAB之易经卜卦程序+GUI   日月为易,刚柔相推. 是故易有太极,是生两仪,两仪生四象,四象生八卦,八卦定吉凶,吉凶生大业.是故法象莫大乎天地,变通莫大乎四时,悬象著明莫大乎日月.   本文 ...

  3. 八字易经算法之用JAVA实现硬币卜卦辅助工具

    世界上没有一种学问比预测未来更重要:而在全人类预测未来的学问中,没有一种比易经卜卦更重要:而在易经卜卦的所有方法中,用硬币卜卦是最简便.最常用的方法之一. -- 陈嘉珉(http://www.chin ...

  4. 读易[5]·做鸡头还是凤尾(小过卦)

    一年一度的应届毕业生找工作的事牵动了不少人的心.刚从学校出来,或踌躇满志.或茫然若失,不管怎么说找工作的事对于我们来讲都算是人生的一大波折. 在找工作的过程中我们会遇到不少的机会,怎样把握就要看具体情 ...

  5. 读易[3]·重视团队中的个性(睽卦)

    现在的软件开发管理中有着两种不同的思路.一是将人作为不同的资源,统一调配使用,按照规章制度来做事:二是强调不同的人差异,按照个性发挥每个人的优势. 两种方式各有特点,团队管理中的个性与规范是一个协调和 ...

  6. 读易[16]·领导要以德服人(坤卦)

    自从电影<方世玉>中的雷老虎讲出了"以德服人"这句经典对白后,这个词就成了很多人的口头禅了.当然,大多数情况都是搞笑的成分居多. 前两天读易经的时候又想到了这个词,和坤 ...

  7. 读易[17]·成功不需要一定当老板(坤卦)

    我们这一代年轻人比以往的老一辈都要敢想敢拼.尤其是网络上出现了大批同龄或者比自己更小的成功人士之后,大家的心都开始蠢蠢欲动,摩拳擦掌.这里我并不是要批判这种拼搏的精神,而是要批判另外一种错误的认识. ...

  8. [生存志] 第76节 孔子读易大哉乾元

            孔子读易大哉乾元                  孔子一生岁月,诸侯林立,难展雄才,周游列国,难入政坛,结果自然是让人忧伤,其中的道理却更是扑朔迷离,以致于孔子一生也没能解开为何&q ...

  9. 读易[15]·用软件的角度理解易经

    俗话说,隔行如隔山.一般我们会对自己领域内的东西比较敏感,也更加容易接受.这里不仅包括专业的术语,更多的是一种思想. 我写易经相关的文章也有十几篇了,有些文章很受欢迎,有些文章看的人比较少.不过不管是 ...

最新文章

  1. bitset优化+滚动优化dp ----- 2021牛客多校第8场 F Robot
  2. python 获取程序运行时间
  3. sew 31系列服务器报警12,SEW变频器MOVITRAC-31C系列故障代码表
  4. 半圆阴影_圆中阴影部分面积求法的常用方法
  5. Lua 函数、闭包、尾调用总结
  6. NYOJ 28 大数阶乘
  7. 指针06 - 零基础入门学习C语言46
  8. windows svn
  9. 在VC++中访问和修改系统注册表
  10. 如何实现高性能的在线 PDF 预览
  11. 计算机木材染色 配色技术的应用技术,木材怎么染色?木材染色剂电脑配色方法...
  12. EnjoyToShare | 考研英语复试口语
  13. 微信公众号开发系统入门教程之公众号与小程序、APP的区别
  14. Ubuntu 18.04 与 Win10 双系统
  15. 自定义View 实现圆形seekbar (音量旋钮)
  16. Java BIO的基本介绍
  17. 对二维数组的数组名取地址,a,a+1的理解
  18. 千寻位置服务器地址在哪打开,千寻位置服务器地址和端口
  19. 大学物理:CH3-振动
  20. 如何通过免填邀请码,实现App用户增长

热门文章

  1. 程序员面试金典——解题总结: 9.17中等难题 17.7给定一个整数,打印该整数的英文描述(例如 One Thousand,Two Hundred-Thirty Four)
  2. 每调用一次函数就增加1
  3. 解决IOS无法播放3gp视频, 出现无法编码问题
  4. 从零开始构建PHP版mud游戏(二)
  5. “抛砖引玉”晒Jncip-sp证书寻Jncie-sp战友
  6. 【愚公系列】2023年05月 攻防世界-Web(Web_php_include)
  7. 商业智能 BI 跟业务系统的思维差异
  8. 爬虫--简单woff文件的处理
  9. DES和3DES加密算法C语言实现
  10. linux查看磁带库设备,AIX中如何确定磁带库设备和操作系统设备文件的对应关系...