算法生成太极八卦图

前面一篇文章是通过算法生成一幅太极图,有道是:无极生太极,太极生两仪,两仪生四象,四象生八卦.那么这一节就为太极生成一个八卦图.八卦图衍生自汉族古代的《河图》与《洛书》,传为伏羲所作。其中《河图》演化为先天八卦,《洛书》演化为后天八卦。八卦各有三爻,“乾、坤、震、巽、坎、离、艮、兑”分立八方,象征“天、地、雷、风、水、火、山、泽”八种性质与自然现象,象征世界的变化与循环,分类方法如同五行,世间万物皆可分类归至八卦之中,亦是二进制与电子计算机的古老始祖。

太极就是一,是道,是天地未分时物质性的浑沌元气。太极动而生阳,静而生阴,是生两仪,一阴一阳就是两仪,故《易·系辞说》说:“一阴一阳之谓道”,古人观天下万物之变化,不外乎由太极而生阴阳,故画一奇以象阳,画一偶以象阴。阳就是阳爻,用"—"表示,单为阳之数;阴就是阴爻,用"--"表示,双为阴之数。这就是构成八卦的基本符号,是(阴阳)矛盾的形态和万物演变过程中的最基本的阴阳二气的基本符号。

虽然我对易经这种玄之又玄的哲学没多少研究,但至少八卦可以看做是二进制的鼻祖.根据二进制数的规定:有,用1表示;无,用0表示,可以得出八卦各卦阳爻和阴爻的二进制数。

下面写出八卦各卦阳爻的二进制数(即有阳爻为1,无阳爻为0):

坤:黑黑黑,卦符阴阴阴,二进制数为000

艮:黑黑白,卦符阴阴阳,二进制数为001

坎:黑白黑,卦符阴阳阴,二进制数为010

巽:黑黑白,卦符阴阳阳,二进制数为011

震:白黑黑,卦符阳阴阴,二进制数为100

离:白黑白,卦符阳阴阳,二进制数为101

兑:白白黑,卦符阳阳阴,二进制数为110

乾:白白白,卦符阳阳阳,二进制数为111。

同样,也可以写出八卦各卦阴爻的二进制数(即有阴爻为1,无阴爻为0):

坤:黑黑黑,卦符阴阴阴,二进制数为111

艮:黑黑白,卦符阴阴阳,二进制数为110

坎:黑白黑,卦符阴阳阴,二进制数为101

巽:黑黑白,卦符阴阳阳,二进制数为100

震:白黑黑,卦符阳阴阴,二进制数为011

离:白黑白,卦符阳阴阳,二进制数为010

兑:白白黑,卦符阳阳阴,二进制数为001

乾:白白白,卦符阳阳阳,二进制数为000

好吧,写了这么多云里雾里的话,还是帖代码实际一些,希望大家能看懂我的代码.

  1 struct Rect2 {3     float left;4     float right;5     float top;6     float bottom;7 };8 9 inline bool IsInRect(const Rect& rect, float x, float y)10 {11     return (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom);12 }13 14 unsigned int    CPixelTaijiEight::CalculatePixel(unsigned int x, unsigned int y)15 {16     float radius1 = 360.0f;17     float radius2 = 60.0f;18     float height = 18.0f;19 20     float rr = radius1*radius1;21 22     unsigned int black = 0xff000000;23     unsigned int white = 0xffffffff;24     unsigned int gray = 0xff404040;25     unsigned int dise = 0xffc0c0c0;26 27     float i = x - 512.0f;28     float j = y - 512.0f;29 30     const float sqrt2 = sqrtf(2.0f)*0.5f;31 32     if ((i*i + j*j) > rr)33     {34         // 八卦图35         Rect rt1 = {-radius1*0.4f, radius1*0.4f, -radius1 - height*7, -radius1 - height*6};36         Rect rt2 = {-radius1*0.4f, radius1*0.4f, -radius1 - height*5, -radius1 - height*4};37         Rect rt3 = {-radius1*0.4f, radius1*0.4f, -radius1 - height*3, -radius1 - height*2};38 39         Rect rtc1 = {-radius1*0.06f, radius1*0.06f, -radius1 - height*7, -radius1 - height*6};40         Rect rtc2 = {-radius1*0.06f, radius1*0.06f, -radius1 - height*5, -radius1 - height*4};41         Rect rtc3 = {-radius1*0.06f, radius1*0.06f, -radius1 - height*3, -radius1 - height*2};42 43         float list_sin[8] = {0.0f, sqrt2, 1.0f,  sqrt2,  0.0f, -sqrt2, -1.0f, -sqrt2};44         float list_cos[8] = {1.0f, sqrt2, 0.0f, -sqrt2, -1.0f, -sqrt2,  0.0f,  sqrt2};45         int list_eight[8] = {0, 1, 2, 3, 7, 6, 5, 4};46 47         float ti, tj;48         for (int m = 0; m < 8; m++)49         {50             ti = i*list_cos[m] - j*list_sin[m];51             tj = i*list_sin[m] + j*list_cos[m];52 53             if (IsInRect(rt1, ti, tj))54             {55                 if (list_eight[m] & 0x1)56                 {57                     if (IsInRect(rtc1, ti, tj))58                     {59                         return dise;60                     }61                 }62 63                 return gray;64             }65 66             if (IsInRect(rt2, ti, tj))67             {68                 if (list_eight[m] & 0x2)69                 {70                     if (IsInRect(rtc2, ti, tj))71                     {72                         return dise;73                     }74                 }75 76                 return gray;77             }78 79             if (IsInRect(rt3, ti, tj))80             {81                 if (list_eight[m] & 0x4)82                 {83                     if (IsInRect(rtc3, ti, tj))84                     {85                         return dise;86                     }87                 }88 89                 return gray;90             }91         }92 93         return dise;94     }95     else96     {97         // 太极阴阳图98 99         float t = j + radius1*0.5f;
100         float tt = t*t + i*i;
101         if (tt < radius2*radius2)
102         {
103             return white;
104         }
105         else if (tt < rr*0.25f)
106         {
107             return black;
108         }
109
110         t = j - radius1*0.5f;
111         tt = t*t + i*i;
112         if (tt < radius2*radius2)
113         {
114             return black;
115         }
116         else if (tt < rr*0.25f)
117         {
118             return white;
119         }
120
121         if (i < 0.0f)
122         {
123             return white;
124         }
125         else
126         {
127             return black;
128         }
129     }
130
131 }

生成图像如下:

之前我曾经见过这样的代码注释:

/*_ooOoo_o8888888o88" . "88(| -_- |)O\  =  /O____/`---'\____.'  \\|     |//  `./  \\|||  :  |||//  \/  _||||| -:- |||||-  \|   | \\\  -  /// |   || \_|  ''\---/''  |   |\  .-\__  `-`  ___/-. /___`. .'  /--.--\  `. . __."" '<  `.___\_<|>_/___.'  >'"".| | :  `- \`.;`\ _ /`;.`/ - ` : | |\  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^佛祖保佑       永无BUG
*/

我觉得:相比于佛祖,八卦和程序的关系更近一些.

最后愿这幅八卦图保佑我们写的程序绝无BUG,永不修改,同意的请点推荐.

相关文章:

算法之美---100幅由程序生成的图像,总有一幅让你感到惊艳[上]

算法之美---100幅由程序生成的图像,总有一幅让你感到惊艳[下]

--------------------------------------------

36楼

谈天才是专家,看来绝无BUG,永不修改只能是一厢情愿的事

 1 unsigned int    CPixelTaijiYinyang::CalculatePixel(unsigned int x, unsigned int y)2 {3     float radius1 = m_params[0];4     float radius2 = radius1*m_params[1];5 6     float rr = radius1*radius1;7 8     unsigned int black = 0xff000000;9     unsigned int white = 0xffffffff;
10     unsigned int gray = 0xff808080;
11
12     float i = x - 512.0f;
13     float j = y - 512.0f;
14
15     if ((i*i + j*j) > rr)
16     {
17         return gray;
18     }
19
20     float t = j + radius1*0.5f;
21     float tt = t*t + i*i;
22     if (tt < radius2*radius2)
23     {
24         return black;
25     }
26     else if (tt < rr*0.25f)
27     {
28         return white;
29     }
30
31     t = j - radius1*0.5f;
32     tt = t*t + i*i;
33     if (tt < radius2*radius2)
34     {
35         return white;
36     }
37     else if (tt < rr*0.25f)
38     {
39         return black;
40     }
41
42     if (i < 0.0f)
43     {
44         return white;
45     }
46     else
47     {
48         return black;
49     }
50 }

原文地址:http://www.cnblogs.com/WhyEngine/p/4059266.html#3053962

转载于:https://www.cnblogs.com/JueYingHuang/p/9130357.html

收藏了,挺有意思的生成太极图相关推荐

  1. 程序猿有话说:计算机,学着挺有意思的,就是头冷

    程序猿,一个互联网高速发(cui)展(can)下的新生物种,不仅拥有较高的智商,还有无限的忍耐力,日常敲代码,加班已成为了常态,一个高薪与秃头并存的群体- 据说程序员的日常是这样的: 当然大家一提起程 ...

  2. 计算机系专用表情包,计算机学起来挺有意思的表情包 - 计算机学起来挺有意思的微信表情包 - 计算机学起来挺有意思的QQ表情包 - 发表情 fabiaoqing.com...

    这世界挺有意思的没意思的是我!(熊猫头)_挺有_没意思_熊猫_意思_世界表情 这世界挺有意思的没意思的是我(熊猫头)_挺有_没意思_熊猫_意思_世界表情 电子城轨通信计算机:快看!那个学会计的上吊了_ ...

  3. [创意]使用Processing生成太极图(阴阳鱼)

    使用Processing生成太极图(阴阳鱼) 使用Processing 可以非常方便地将图形创意绘制出来,下面的代码就是使用此脚本制作的阴阳鱼,呵呵. //steven yin-yang fish / ...

  4. 网易工作经验,这篇博文挺有意思的

    看到一网友发的网易工作经验,感觉挺有意思的,整理如下: 1.先做人,后做事;对事不对人. 人品做好了,自然好办事,事情出问题了,不要针对某人,应当分析问题,找出原因,在事后总结.防范,真相出来来,该承 ...

  5. 一句话,全国方言N种說法,挺有意思。

    一句话,全国方言N种說法,挺有意思. 北京话:"今儿爷就站这儿了,你丫动我一试试.别看你丫个儿不小,逼急了老子拿板砖hai(一声)你丫挺的!" 天津话:"近儿我揍赞借害儿 ...

  6. 医生和强盗,挺有意思

    QQ群里分享的,医生与强盗,挺有意思. 强盗通常只在晚上作案,医生可以全天候抢钱: 强盗风里来雨里去四处流窜,医生冬天暖夏天凉环境优雅: 你把钱交给强盗是为了活命,你为了活命而把钱交给医生: 强盗只能 ...

  7. 转载】泡MM与GOF的23种模式(看着挺有意思)

    [转载]泡MM与GOF的23种模式 1.FACTORY?追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说" ...

  8. 一件挺有意思的事,关于数据校验

    说个有意思的事,我妈晚上打电话向我求助,说她请了个人帮他收账,问我有不有什么办法能让她知道哪些账收回来了,哪些没有收回来.我一听就笑了,你要收哪些账都一条条列出来,收回来一笔就用红笔划掉,最后没有划掉 ...

  9. 20个非常有趣的网站,挺有意思。

    20个有趣的网站.闲来无事的时候可以弄弄. 1.My Mini City / 我的迷你城市 你可以创建并命名属于你自己的城市,看着他发展,每次有人访问你的城市,你的城市的人口就会增加. 2.You F ...

最新文章

  1. (转载)adb模拟按键事件KeyCode
  2. 【Apache Mina2.0开发之二】自定义实现Server/Client端的编解码工厂(自定义编码与解码器)!...
  3. java jxl 写 excel文件_java采用jxl写入一个Excel文件
  4. .net 特性 Attribute
  5. 通过 User-Agent 请求头判断设备类型
  6. php larval开发规范,Laravel 开发规范摘要
  7. Java后端开发流程
  8. 嵌入式c语言编程,嵌入式C语言编程集萃.pdf
  9. java毕业设计网站ssm医院医药药品管理系统
  10. 中央民族大学教授赵小兵:少数民族语言信息化关乎民众福祉,需要各界的更多支持...
  11. 4.1.14 Flink-流处理框架-Flink流处理API之数据重分区操作
  12. 天梯赛 - 一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字
  13. HigherHRNet代码复现问题集(assert isinstance(orig, torch.nn.Module))
  14. opcode php 缓存,深入理解PHP Opcode缓存原理
  15. Qt开发经验总结之武林秘籍
  16. 00.敏捷项目管理——前序笔记
  17. 1525D. Armchairs
  18. android自动切换图片,Android应用中图片浏览时实现自动切换功能的方法详解
  19. 0ada5c.html,打造创新的GS重点工作管理系统
  20. 通达信l2数据接口如何开通?

热门文章

  1. 小程序如何引用阿里巴巴图标
  2. 北大计算机科学与技术教材,北京大学计算机科学与技术参考书目
  3. 贝勒大学计算机专业,贝勒大学计算机科学贝勒大学计算机科学.pdf
  4. [转]个人知识管理-Web2.0技术下的一个热点
  5. 计算机网络(2)--- 因特网的发展阶段与组织
  6. 人脑拆机三部曲:为什么我支持马斯克,而人类应该畏惧人工智能
  7. 全球光刻机龙头是怎样炼成的
  8. kmeans及模型评估指标_如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数...
  9. 浅谈电子配线架智能布线管理系统(二)
  10. Ubuntu18.04 搜狗输入法不能输入中文问题、