tag:C,分形,L-System,GD库
/* Create by zyzx
* Created 2008-07-15
* Modified 2008-07-16
*/
前些天,在博客园晃点,自信心颇受打击。。。看看几年前在一个起跑线上的同学,比如3D方面的,现在都牛起了;而咱因为各种原因,停滞不前,各个方面都是浅尝则止。。。下定决心,好好看看书温习温习。。。
要看的书太多了哦,,,数字图像相关,图像编解码,基础信息数学,ARM体系等等啊。。。想静下心来还真不容易。。。
于是,先从比较小的开源库开始学起,比较好玩。。。GD库是用C写的小巧而且比较容易移植到嵌入式,呵呵,那就从它学起了。关于GD库网上有一些教材,还有环境配置,http://www.libgd.org/Main_Page这里是它的主页。。。
只绘制个点线啊,啥的没啥意思。。想起了大学学分形学时,曾经做过一些小的试验,是基于L-System的,就拿来稍微修改了下。。
关于分形,这里有很强大的东西http://www.fractal.net.cn/。。
生成了如下的图片。关于L-System原理可以去网上找找,这里只有代码实现。
全部源代码:
修改程序的如下部分:
float length= 10 ; //树枝段长度,length=LENGTH/2^N
#define CONSTN 20 //SS的个数
char ss[CONSTN]={'f','f','-','[','-', // 生长法则
'f','+','f','+','f',
']','+','[','+','f',
'-','f','-','f',']'};
//* 配色调整
r = abs( (x1 << 2 ) % 255 );
g = abs( (y1 << 2 ) % 255 );
b = abs( (x2 << 2 ) % 255 );
a = abs( (y2 << 2 ) % 127 - 70);
x2=int(x1-length*sin(jiaodu*thita*PAI/180.0)); //上面的 -角度 控制生长方向
y2=int(y1-length*cos(jiaodu*thita*PAI/180.0)); //现在是向上生长
可以得到如下图:
修改程序的如下部分:
#define NN 9 //分形树的阶数N'= N+2;
float length= 12 ; //树枝段长度,length=LENGTH/2^N
float thita= 90; //偏转角度
#define CONSTN 16 //SS的个数
char ss[CONSTN]={'f','f','-','[','-',
'f','+','f',
']','+','[','+','f',
'-','f',']'};
可以得到如下图: