算法生成太极八卦图

前面一篇文章是通过算法生成一幅太极图,有道是:无极生太极,太极生两仪,两仪生四象,四象生八卦.那么这一节就为太极生成一个八卦图.虽然我对易经这种玄之又玄的哲学没什么研究,但至少八卦可以看做是二进制的鼻祖.愿太极八卦保佑我们的程序绝无BUG,永不修改.

根据二进制数的规定:有,用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         else
126         {
127             return black;
128         }
129     }
130
131 }

生成图像如下:

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

相关文章:

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

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

时间: 2024-09-29 04:50:52

算法生成太极八卦图的相关文章

使用CSS3生成一个会旋转的太极八卦图

学习了CSS3 后,可以做出很多炫酷的效果,但是基本功需要打扎实,就从学习使用纯CSS技术生成太极八卦图学起. 第一步,先使用HTML进行一下简单的布局,如下,只需要一个DIV即可: <body> <div></div> </body> 第二步,插入了DIV之后, 就需要为其添加样式,以及设置其为圆形,我们宽要设置的是高的2倍,这样在为底边框添加了宽度后,保证DIV出来后是圆形,如下: div { width:500px; height:250px; bor

Tweetable Mathematical Art 太极八卦图

从Matrix67 blog里面看到了Tweetable Mathematical Art. 使用C++实现3个函数RD(i, j), GR(i, j), BL(i, j)分别返回像素(i, j)的R/G/B值,最终生成1幅1024*1024的图片.要求是每个函数代码不超过140字符,即Tweetable. 来个太极八卦图,娱乐一下. unsigned char RD(int i,int j){ // YOUR CODE HERE #define LEFT (i < DIM/2) #define

太极八卦图

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <canvas id="canvas" width="800px" height="800px"></canvas> <script ty

算法生成卐和卍字图

前面讲了算法生成道教的太极八卦图,这一节发个与佛教有关的卍字图.卍梵文Svastika,武则天定音为万字:意译为吉祥海云,吉祥喜旋,为佛三十二相之一,也是八十种好之一:此为显现于佛及十地菩萨胸臆等处之德相.长阿含经卷一大本经.大萨遮尼乾子所说经卷六.大般若经卷三八一等均记载佛之胸前.手足.腰间等处有卍字.于今印度阿摩罗婆提(Ama-ravati)出土之佛足石,亦刻有数个卍字.纳粹德国的纳粹党标志为希特勒借用的标致,但纳粹党标志的方向是斜的和黑色,而传统信仰中代表吉祥美好的卍字符多是明亮的色彩.

算法生成N芒星

前面两个图像生成算法是:道教的太极八卦图和佛教的卐和卍字图.这一节整个洋气的图像:芒星.但愿我别召唤出什么恐怖的禁忌.平时看玄幻小说,经常读到有关六芒星,七芒星,九芒星的技法.芒星是由几个完全的等腰三角形(有时是正三角形)和一个正多边形组成的二维图形.等腰三角形的个数与正多边形的边数相等.由五个等腰三角形和正五边形组成的图形叫“五芒星”(俗称:五角星).由六个等腰三角形和正六边形组成的图形叫“六芒星”……依此类推.芒星在美学.历史和占卜都有着很大的用处. 芒星在生活中与我们息息相关,我们常说的“

旋转太极八卦

太极八卦图,以同圆内的圆心为界,画出相等的两个阴阳鱼表示万物相互关系.阴鱼用黑色,阳鱼用白色,这是白天与黑夜的表示法.阳鱼的头部有个阴眼,阴鱼的头部有个阳眼,表示万物都在相互转化,互相渗透,阴中有阳,阳中有阴,阴阳相合,相生相克,即现代哲学中和矛盾对立统一规律表示法. 哈哈,装了个逼.其实我就是想教大家用css3画出旋转太极八卦.仅此而已. 实现效果如下图: Html的代码很简单,就一行代码,如下图: 下面对div.tl标签进行一系列属性设置,变化如下图: ............ ......

太阳崇拜---64幅由算法生成的八芒星图像

八芒星与卐字符号是遍布于我国广大地域多个民族的文化符号.有学者认为神秘的卐字符号其实是八角星纹的简化变体,它们都代表了太阳在一个回归年的视循环运动,即一年四季的循环变化.八角星纹集中发现于长江中下游与黄河下游的中国东部地区, 在红山和良渚文化也有发现.与从赤峰到香港的中国东面沿海人面岩画分布带之间是否存在关联值得关注.如今,八芒星与卐字符号是遍布于我国广大地域多个民族的文化符号. 再发些从网上收集的八芒星相关资料,原址为:http://blog.sina.com.cn/s/blog_6a4e1c

三生万物---算法生成的25幅三角形图像

<道德经>第四十二章:“道生一,一生二,二生三,三生万物.万物负阴而抱阳,冲气以为和.”这是老子对宇宙起源的一种探索和认识,其含义是说宇宙最初有道,有物混成,先天地生.老子的这话是对伏曦八卦和<易经>的总结.太极生两仪,谓阴阳:两仪生四象,谓太阴,少阳,少阴,太阳:四象生八卦,谓乾.兑.离.震.巽.坎.艮.坤.八卦及六十四卦,过于繁复,老子贯通易理,总结为三生万物. 太极是阴中有阳,阳中有阴的混沌状态.太极生两仪,谓阴阳.阴阳是对立的无限的两极,是理想状态,构不成客观存在.阴阳相济

基于torch学汪峰写歌词、聊天机器人、图像着色/生成、看图说话、生成字幕

手把手教你基于torch玩转 学汪峰写词.自动聊天机器人.图像着色.图像生成.看图说话.生成字幕 作者:骁哲.李伟.小蔡.July.说明:本教程出自七月在线开发/市场团队.及七月在线5月深度学习班学员之手,有何问题欢迎加Q群交流:472899334.时间:二零一六年十月十二日. 前言 我们教梵高作画的教程发布之后,国庆7天,上百位朋友一一陆续动手尝试,大有全民DL.全民实验之感.特别是来自DL班的小蔡同学,国庆7天连做10个开源实验,并把这10个实验的简易教程(含自动聊天机器人)发布在社区上:h