分形图制作两例
?牐?#include “math.h”
?牐?//将树枝的切分点定义为黄金分割点
?牐?#define CUT_RATE 0.618
?牐?//左侧树枝相对于主枝的张开度
?牐?#define LEFT_BRANCH_ANGLE 80
?牐?//右侧树枝相对于主枝的张开度
?牐?#define RIGHT_BRANCH_ANGLE 20
?牐?//树的主枝长度
?牐?#define BRANCH_LENGTH 300
?牐?//最小分支的长度,改变这个值可以控制树叶的浓度
?牐?#define LAST_BRANCH_LENGTH 0.1
?牐?//树枝上的节点数,改变这个值可以控制树枝的浓度
?牐?#define BRANCH_NUM 40
?牐?/*DrawBranch函数的功能:从点(x,y)到点(Lengh*cos(StartAngle*3.14/180),y-Lengh*sin(StartAngle*3.14/180))之间画一条直线
?牐燣engh:直线的长度
?牐燬tartAngle:直线的倾斜度
?牐爌DC:绘直线时使用的设备环境句柄
?牐?*/
?牐爒oid DrawBranch?煟╥nt x,int y,float Lengh,int StartAngle,CD C*pDC)??
?牐爗??
?牐爁loat x1,y1,nx,ny,count;??
?牐爁loat nLengh;??
?牐?//从树枝的起点计算树枝的终点
?牐爔1=x+Lengh*cos(StartAngle*3.14/180);?牔?
?牐爕1=y-Lengh*sin(StartAngle*3.14/180);?牔?
?牐?//绘制树枝,实际就是画一条线
?牐爌DC->MoveTo(x,y);?牔?
?牐爌DC->LineTo(x1,y1);?牔?
?牐?//pDC->SetPixel(x1,y1,RGB(255,0,0));?牐牔?
?牐?//如果树枝的长度小于预定的树枝长度最小值,则返回
?牐?//这一步很重要,否则递归就会陷入死循环
?牐爄f(Lengh<LAST_BRANCH_LENGTH)??
?牐爎eturn;??
?牐爊Lengh=Lengh;??
?牐爊x=x;??
?牐爊y=y;??
?牐爁or(count=0;count<BRANCH_NUM;count++)??
?牐爗??
?牐?//改变树枝的起点
?牐爊x+=nLengh*(1-CUT_RATE)*cos(StartAngle*3.14/180);?牔?
?牐爊y-=nLengh*(1-CUT_RATE)*sin(StartAngle*3.14/180);?牔?
?牐?//递归调用DrawBranch,画树枝的左边部份
?牐燚rawBranch(nx,ny,nLengh*1-CUT_RATE),StartAngle+LEFT_BRANCH_ANGLE,pDC);?牔?
?牐?//画树枝的右边部份
?牐燚rawBranch(nx,ny,nLengh*1-CUT_RATE),StartAngle-RIGHT_BRANCH_ANGLE,pDC);?牔?
?牐爊Lengh*=CUT_RATE;??
?牐爙??
?牐爙??
?牐爒oid CFractalView::OnDraw(CDC*pDC)??
?牐爗??
?牐燙Rect rect;??
?牐爐his->GetClientRect(&rect);?牔?
?牐燘eginWaitCursor();?煟牔?
?牐燚rawBranch(rect.left+rect.Width()/2,rect.bottom,BRANCH_LENGTH,90,this->GetDC());?煟牐牔?
?牐燛ndWaitCursor();?煟牔?
?牐燙FractalDoc*pDoc=GetDocument();?煟牔?
?牐燗SSERT_VALID(pDoc);?牔?
?牐爙??
?牐牶昧耍嘁肷厦娴某绦颍谠诵惺保慊岱⑾忠豢檬鞔有〉酱蟮纳す蹋苡腥ぁS捎诔绦虿捎玫氖堑莨榈饔玫姆绞剑绦蛟诵械乃俣扔行┞H绻牖嬷萍?冠花图片,只需要将预定义部分的代码替换成下面所示的代码。
?牐?#include “math.h”
?牐?#define CUT_RATE 0.3
?牐?#define LEFT_BRANCH_ANGLE 9
?牐?#define RIGHT_BRANCH_ANGLE 9
?牐?#define BRANCH_LENGTH 100
?牐?#define LAST_BRANCH_LENGTH 0.8
?牐?#define BRANCH_NUM 3
?牐犕苯厦娲胫械摹皃DC->LineTo(x1,y1);”换成“pDC->SetPixel(x1,y1,RGB(255,0,0));”即可。如果你还想得到更丰富的分形图片,你只须不断地更改上面的预定义部分代码。会得到什么样的精彩结果?我不知道,因为:没有两幅分形图片是一样的!
?牐犗嘈糯蠹蚁衷诙苑中瓮加辛烁羁痰娜鲜读税桑炕共豢炜於种谱鞒鲎约喝衔蠲览龅耐及福?