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',']'};
可以得到如下圖: