分形树

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;
%--------------------------------------------------------------------------
%这是一个显示平面中点的运动的函数,它的输入为起始点的坐标、
%将要运动的方位角、将要运动的长度
%参见函数antmove
%与antmove不同的是,该函数的返回值中多了两个变量
%这两个变量r2,theata2为下一

步点的移动准备了数据
%theata角减小,表示点向右移动
function [x2,y2,r2,theata2]=antmoveright(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;
%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!
%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!
%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!
%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!
%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!
%注意:把这些程序全部保存在名为tree的M文件中再运行!!!!!!!!

相关文档
最新文档