算法生成太极八卦图
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法生成太极八卦图
算法生成太极八卦图
前面一篇文章是通过算法生成一幅太极图,有道是:无
极生太极,太极生两仪,两仪生四象,四象生八卦.那么这一节就为太极生成一个八卦图.八卦图衍生自汉族古代的《河图》与《洛书》,传为伏羲所作。其中《河图》演化为先天八卦,《洛书》演化为后天八卦。八卦各有三爻,“乾、坤、震、巽、坎、离、艮、兑”分立八方,象征“天、地、雷、风、水、火、山、泽”八种性质与自然现象,象征世界的变化与循环,分类方法如同五行,世间万物皆可分类归至八卦之中,亦是二进制与电子计算机的古老始祖。
太极就是一,是道,是天地未分时物质性的浑沌元气。太极动而生阳,静而生阴,是生两仪,一阴一阳就是两仪,故《易·系辞说》说:“一阴一阳之谓道”,古人观天下万物之变化,不外乎由太极而生阴阳,故画一奇以象阳,画一偶以象阴。阳就是阳爻,用"—"表示,单为阳之数;阴就是阴爻,用"--"表示,双为阴之数。这就是构成八卦的基本符号,是(阴阳)矛盾的形态和万物演变过程中的最基本的阴阳二气的基本符号。
虽然我对易经这种玄之又玄的哲学没多少研究,但至
少八卦可以看做是二进制的鼻祖.根据二进制数的规定:有,
用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