分形树__Matlab
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
%--------------------------------------------------------------------------