博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
收藏了,挺有意思的生成太极图
阅读量:7199 次
发布时间:2019-06-29

本文共 6475 字,大约阅读时间需要 21 分钟。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1 struct Rect  2 {  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     else 96     { 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         else126         {127             return black;128         }129     }130 131 }

生成图像如下:

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

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

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

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

相关文章:

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

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     else47     {48         return black;49     }50 }

 

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

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

你可能感兴趣的文章
期末总结
查看>>
腾讯云服务器安装宝塔面板快速配置LNMP/LAMP网站系统
查看>>
Log4Net配置
查看>>
137. Single Number II
查看>>
多态的理解
查看>>
狗蛋来为您通报时间啦
查看>>
jQuery原理系列-工具函数
查看>>
***常见复杂SQL语句(含统计类SQL)
查看>>
在Mac OS X 10.8中配置Apache + PHP + MySQL
查看>>
linux查看及修改文件权限以及相关
查看>>
代码的抽象三原则
查看>>
lua c函数注册器
查看>>
Entity Framework Code-First(7):Inheritance Strategy
查看>>
Python_tuple部分功能介绍
查看>>
八款优秀Linux浏览器推荐
查看>>
WebApp之Meta标签
查看>>
QT-opencv小结
查看>>
完美兼容IE、Opera、Firefox、360、搜狗的“添加收藏”的最精简代码
查看>>
销毁session
查看>>
【待续】翻译:jQuery Mobile: 他能为你做什么?
查看>>