分形树__Matlab

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%这是一个生成树的主函数,它的输入分别为每叉树枝的缩短比、树枝的偏角、生长次数. %注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!

%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!

%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!

%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!

%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!

%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!

%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!

%%小提示:若用做函数,请将虚线框内语句删去。

function f=tree(w,dtheata,NN)

%%%--------------------虚线框--------------------%%%

clear;clc;clf;w=0.8;dtheata=pi/6;NN=8;%建议生长次数NN不要超过10

%%%--------------------虚线框--------------------%%%

n=2^NN;%从主枝算起,共需生成2^NN个树枝

for NNK=1:n

x1=0;

y1=0;

r1=1;

theata1=pi/2;

dataway=ten2twoN(NNK,NN); %把每一个树枝的编号转化为一个NN位的二进制数

for NNL=1:NN

if dataway(NNL)==0

[x2,y2,r2,theata2]=antmoveleft(x1,y1,r1,theata1,w,dtheata);%若路径数组上对应的数字为0,则向左生长

x1=x2;

y1=y2;

r1=r2;

theata1=theata2;

hold on

%pause(eps)

else

[x2,y2,r2,theata2]=antmoveright(x1,y1,r1,theata1,w,dtheata);%否则,数字为1,向右生长

x1=x2;

y1=y2;

r1=r2;

theata1=theata2;

hold on

%pause(eps)

end

end

end

hold off

%--------------------------------------------------------------------------

%这是一个十进制转换为二进制的函数,适用于正整数

function yushu=ten2two(x)

yushu=[];

shang=2;

if x==1

yushu=[1];

else

while shang>1

shang=fix(x/2);

yushu=[mod(x,2),yushu];

x=shang;

end

yushu=[1,yushu];

end

%-------------------------------------------------------------------------- %该函数的功能是将十进制转化为指定位数(NN)的二进制数

function dataway=ten2twoN(NNK,NN);

dataway=ten2two(NNK);

[a,b]=size(dataway);

Ncc=NN-b;%需要补充的0的个数

for cc=1:Ncc

dataway=[0,dataway];

end

%-------------------------------------------------------------------------- %这是一个显示平面中点的运动的函数,它的输入为起始点的坐标、

%将要运动的方位角、将要运动的长度

function [x2,y2]=antmove(x1,y1,r1,theata)

x2=x1+r1*cos(theata);

y2=y1+r1*sin(theata);

plot([x1,x2],[y1,y2])

%-------------------------------------------------------------------------- %这是一个显示平面中点的运动的函数,它的输入为起始点的坐标、

%将要运动的方位角、将要运动的长度

%参见函数antmove

%与antmove不同的是,该函数的返回值中多了两个变量

%这两个变量r2,theata2为下一步点的移动准备了数据

%theata角增大,表示点向左移动

function [x2,y2,r2,theata2]=antmoveleft(x1,y1,r1,theata1,w,dtheata)

x2=x1+r1*cos(theata1);

y2=y1+r1*sin(theata1);

plot([x1,x2],[y1,y2]);

r2=r1*w;

theata2=theata1+dtheata;

%--------------------------------------------------------------------------

相关文档
最新文档