zyzx的小窝

C/C++,GUI,个人移动存储,zyzx_lsl@163.com

 

N(5) 桧树分形小枝:学习GD库

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原理可以去网上找找,这里只有代码实现。
fenxing-testgd-pic.png

全部源代码:

fenxing-testgd-src.jpg


修改程序的如下部分:
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));           //现在是向上生长

可以得到如下图:
fenxing-testgd-pic-2.png


修改程序的如下部分:
#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',']'};
可以得到如下图:
fenxing-testgd-pic-3.png

posted on 2009-04-27 17:12 zyzx 阅读(710) 评论(0)  编辑 收藏 引用 所属分类: C/C++体会


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

常用链接

搜索

最新评论

阅读排行榜

评论排行榜