收藏了,挺有意思的生成太极图
算法生成太极八卦图
前面一篇文章是通过算法生成一幅太极图,有道是:无极生太极,太极生两仪,两仪生四象,四象生八卦.那么这一节就为太极生成一个八卦图.八卦图衍生自汉族古代的《河图》与《洛书》,传为伏羲所作。其中《河图》演化为先天八卦,《洛书》演化为后天八卦。八卦各有三爻,“乾、坤、震、巽、坎、离、艮、兑”分立八方,象征“天、地、雷、风、水、火、山、泽”八种性质与自然现象,象征世界的变化与循环,分类方法如同五行,世间万物皆可分类归至八卦之中,亦是二进制与电子计算机的古老始祖。
太极就是一,是道,是天地未分时物质性的浑沌元气。太极动而生阳,静而生阴,是生两仪,一阴一阳就是两仪,故《易·系辞说》说:“一阴一阳之谓道”,古人观天下万物之变化,不外乎由太极而生阴阳,故画一奇以象阳,画一偶以象阴。阳就是阳爻,用"—"表示,单为阳之数;阴就是阴爻,用"--"表示,双为阴之数。这就是构成八卦的基本符号,是(阴阳)矛盾的形态和万物演变过程中的最基本的阴阳二气的基本符号。
虽然我对易经这种玄之又玄的哲学没多少研究,但至少八卦可以看做是二进制的鼻祖.根据二进制数的规定:有,用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楼
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
收藏了,挺有意思的生成太极图相关推荐
- 程序猿有话说:计算机,学着挺有意思的,就是头冷
程序猿,一个互联网高速发(cui)展(can)下的新生物种,不仅拥有较高的智商,还有无限的忍耐力,日常敲代码,加班已成为了常态,一个高薪与秃头并存的群体- 据说程序员的日常是这样的: 当然大家一提起程 ...
- 计算机系专用表情包,计算机学起来挺有意思的表情包 - 计算机学起来挺有意思的微信表情包 - 计算机学起来挺有意思的QQ表情包 - 发表情 fabiaoqing.com...
这世界挺有意思的没意思的是我!(熊猫头)_挺有_没意思_熊猫_意思_世界表情 这世界挺有意思的没意思的是我(熊猫头)_挺有_没意思_熊猫_意思_世界表情 电子城轨通信计算机:快看!那个学会计的上吊了_ ...
- [创意]使用Processing生成太极图(阴阳鱼)
使用Processing生成太极图(阴阳鱼) 使用Processing 可以非常方便地将图形创意绘制出来,下面的代码就是使用此脚本制作的阴阳鱼,呵呵. //steven yin-yang fish / ...
- 网易工作经验,这篇博文挺有意思的
看到一网友发的网易工作经验,感觉挺有意思的,整理如下: 1.先做人,后做事;对事不对人. 人品做好了,自然好办事,事情出问题了,不要针对某人,应当分析问题,找出原因,在事后总结.防范,真相出来来,该承 ...
- 一句话,全国方言N种說法,挺有意思。
一句话,全国方言N种說法,挺有意思. 北京话:"今儿爷就站这儿了,你丫动我一试试.别看你丫个儿不小,逼急了老子拿板砖hai(一声)你丫挺的!" 天津话:"近儿我揍赞借害儿 ...
- 医生和强盗,挺有意思
QQ群里分享的,医生与强盗,挺有意思. 强盗通常只在晚上作案,医生可以全天候抢钱: 强盗风里来雨里去四处流窜,医生冬天暖夏天凉环境优雅: 你把钱交给强盗是为了活命,你为了活命而把钱交给医生: 强盗只能 ...
- 转载】泡MM与GOF的23种模式(看着挺有意思)
[转载]泡MM与GOF的23种模式 1.FACTORY?追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说" ...
- 一件挺有意思的事,关于数据校验
说个有意思的事,我妈晚上打电话向我求助,说她请了个人帮他收账,问我有不有什么办法能让她知道哪些账收回来了,哪些没有收回来.我一听就笑了,你要收哪些账都一条条列出来,收回来一笔就用红笔划掉,最后没有划掉 ...
- 20个非常有趣的网站,挺有意思。
20个有趣的网站.闲来无事的时候可以弄弄. 1.My Mini City / 我的迷你城市 你可以创建并命名属于你自己的城市,看着他发展,每次有人访问你的城市,你的城市的人口就会增加. 2.You F ...
最新文章
- (转载)adb模拟按键事件KeyCode
- 【Apache Mina2.0开发之二】自定义实现Server/Client端的编解码工厂(自定义编码与解码器)!...
- java jxl 写 excel文件_java采用jxl写入一个Excel文件
- .net 特性 Attribute
- 通过 User-Agent 请求头判断设备类型
- php larval开发规范,Laravel 开发规范摘要
- Java后端开发流程
- 嵌入式c语言编程,嵌入式C语言编程集萃.pdf
- java毕业设计网站ssm医院医药药品管理系统
- 中央民族大学教授赵小兵:少数民族语言信息化关乎民众福祉,需要各界的更多支持...
- 4.1.14 Flink-流处理框架-Flink流处理API之数据重分区操作
- 天梯赛 - 一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字
- HigherHRNet代码复现问题集(assert isinstance(orig, torch.nn.Module))
- opcode php 缓存,深入理解PHP Opcode缓存原理
- Qt开发经验总结之武林秘籍
- 00.敏捷项目管理——前序笔记
- 1525D. Armchairs
- android自动切换图片,Android应用中图片浏览时实现自动切换功能的方法详解
- 0ada5c.html,打造创新的GS重点工作管理系统
- 通达信l2数据接口如何开通?
热门文章
- 小程序如何引用阿里巴巴图标
- 北大计算机科学与技术教材,北京大学计算机科学与技术参考书目
- 贝勒大学计算机专业,贝勒大学计算机科学贝勒大学计算机科学.pdf
- [转]个人知识管理-Web2.0技术下的一个热点
- 计算机网络(2)--- 因特网的发展阶段与组织
- 人脑拆机三部曲:为什么我支持马斯克,而人类应该畏惧人工智能
- 全球光刻机龙头是怎样炼成的
- kmeans及模型评估指标_如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数...
- 浅谈电子配线架智能布线管理系统(二)
- Ubuntu18.04 搜狗输入法不能输入中文问题、