数学建模社区-数学中国

标题: MATLAB画二维树 [打印本页]

作者: chenjiahe    时间: 2015-1-14 15:30
标题: MATLAB画二维树
具体的要求跟出来的结果如两张图所示,之前查过了好像跟元胞数组有关,但是我自己没能理解,希望诸位大神帮帮忙。

QQ图片20140326203443.jpg (148.8 KB, 下载次数: 187)

出来的效果

出来的效果

QQ图片20140326203458.jpg (179.85 KB, 下载次数: 183)

要求

要求


作者: QYY1994    时间: 2015-1-14 22:00
function tree(n,a,b)
% tree(13,pi/3,pi/5),n为分形树迭代次数 %a,b为分枝与竖直方向夹角
%x1,y1,x2,y2为初始线段两端点坐标,nn为迭代次数
x1=0;y1=0;
x2=0;y2=1;
plot([x1,x2],[y1,y2])
hold on
[X,Y]=tree1(x1,y1,x2,y2,a,b);
hold on
W=tree2(X,Y);
w1=W(:,1:4);
w2=W(:,5:8);
% w为2^k*4维矩阵,存储第k次迭代产生的分枝两端点的坐标,
% w的第i(i=1,2,…,2^k)行数字对应第i个分枝两端点的坐标
w=[w1;w2];
for k=1:n
    for i=1:2^k
        [X,Y]=tree1(w(i,1),w(i,2),w(i,3),w(i,4),a,b);
        W(i,:)=tree2(X,Y);
    end
    w1=W(:,1:4);
    w2=W(:,5:8);
    w=[w1;w2];
end
%由每个分枝两端点坐标(x1,y1),(x2,y2)产生两新点的坐标(x3,y3),(x4,y4),画两分枝图形,并把
%(x2,y2)连同新点横、纵坐标分别存储在数组X,Y中
function [X,Y]=tree1(x1,y1,x2,y2,a,b)
L=sqrt((x2-x1)^2+(y2-y1)^2);
if (x2-x1)==0
    a=pi/2;
else if(x2-x1)<0
        a=pi+atan((y2-y1)/(x2-x1));
    else
        a=atan((y2-y1)/(x2-x1));
    end
end
x3=x2+L*2/3*cos(a+b);
y3=y2+L*2/3*sin(a+b);
x4=x2+L*1/2*cos(a-b);
y4=y2+L*1/2*sin(a-b);
a=[x3,x2,x4];
b=[y3,y2,y4];
plot(a,b)
axis equal
hold on
X=[x2,x3,x4];
Y=[y2,y3,y4];
%把由函数tree1生成的X,Y顺次划分为两组,分别对应两分枝两个端点的坐标,并存储在一维%数组w中
function w=tree2(X,Y)
a1=X(1);b1=Y(1);
a2=X(2);b2=Y(2);
a3=X(1);b3=Y(1);
a4=X(3);b4=Y(3);
w=[a1,b1,a2,b2,a3,b3,a4,b4];

你试一下这个程序,长度已经能控制了,不过角度控制似乎存在问题,如果你能调试出来,欢迎与我交流!



作者: 林灵锋    时间: 2015-1-14 22:49
MATLAB画二维树 真棒!

作者: 小金虫    时间: 2015-1-15 20:20
真棒啊!!洋洋!!

作者: 牙齿有颗痣    时间: 2015-1-16 23:34
6666666666666666





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5