下载频道> 资源分类> matlab源码> 数学建模> Koch分形曲线数学建模题目

标题:Koch分形曲线数学建模题目
分享到:

所属分类: 数学建模 资源类型:程序源码 文件大小: 66.11 KB 上传时间: 2019-07-11 20:20:51 下载次数: 5 资源积分:1分 提 供 者: zhangsan456 Koch分形曲线数学建模题目
内容:
Koch分形曲线
1.1 分形原理
这是一类复杂的平面曲线,可用算法描述。从一条直线段开始,将线段中间三分之一部分用等边三角形的两条边代替,形成具有5个结点的图形(图1);在新的图形中,又将图中每一直线段中间的三分之一部分都用一等边三角形的两条边代替,再次形成新的图形(图2),这时,图形中共有17个结点。
 
这种迭代继续进行下去可以形成Koch分形曲线。在迭代过程中,图形中的点将越来越多,而曲线最终显示细节的多少将取决于迭代次数和显示系统的分辩率。
1.2 算法分析
算法分析:考虑由直线段(2个点)产生第一个图形(5个点)的过程。设和分别为原始直线段的两个端点。现在需要在直线段的中间依次插入三个点 产生第一次迭代的图形(图1)。显然,位于点右端直线段的三分之一处, 位于点右端直线段的三分之二处;而点的位置可以看成是由点绕旋转60度(逆时针方向)而得到的,故可以处理为向量经正交变换而得到向量。算法如下:
 
    在(3)中, A为正交矩阵:
                            
算法根据初始数据(和点的坐标),产生图1中5个结点的坐标。结点的坐标数组形成一个5×2矩阵,矩阵的第一行为的坐标,第二行为的坐标,……,第五行为的坐标。矩阵的第一列元素分别为5个结点的X坐标,第二列元素分别为5个结点的Y坐标。
进一步考虑Koch曲线形成过程中结点数目的变化规律。设第k次迭代产生结点数为,第k+1次迭代产生结点数为,则和之间的递推关系式为。
1.4 MATLAB实现
p=[0  0;10  0];n=2;
A=[cos(pi/3)  -sin(pi/3);sin(pi/3)  cos(pi/3)];
for  k=1:5
    d=diff(p)/3;m=4*n-3;
    q=p(1:n-1,:);p(5:4:m,:)=p(2:n,:);
    p(2:4:m,:)=q+d;        
    p(3:4:m,:)=q+d+d*A';
    p(4:4:m,:)=q+2*d;
    n=m;
end
plot(p(:,1),p(:,2),'k')
axis equal
axis off
 
程序运行后,可得如下分形曲线图形:
1.5 附源程序
l  第一种树形源程序:
p=[0 0;10 10];n=2;
line(p(:,1),p(:,2),'Color','k');
A=[cos(pi/6) -sin(pi/6);sin(pi/6) cos(pi/6)];
for k=1:4
    i=1;
    for j=1:2:n
        p1=p(j,:);p2=p(j+1,:);
        d=(p2-p1)/3;
        r(i,:)=p1;i=i+1;
        q1=p1+d;
        r(i,:)=q1;i=i+1;
        r(i,:)=q1;i=i+1;
        q2=q1+d*A';
        r(i,:)=q2;i=i+1;
        r(i,:)=q1;i=i+1;
        q3=p1+2*d;
        r(i,:)=q3;i=i+1;
        r(i,:)=q3;i=i+1;
        q4=q3+d*A;
        r(i,:)=q4;i=i+1;
        r(i,:)=q3;i=i+1;
        r(i,:)=p2;i=i+1;
        xy=[q1;q2];
        line(xy(:,1),xy(:,2),'Color','k');
        xy=[q3;q4];
        line(xy(:,1),xy(:,2),'Color','k');
    end
    p=r;
    n=5*n;
end
axis equal
axis off
l  第二种树形源程序
clear
p=[0 0;0 15];
b=pi/8;e=1.5;
a=[cos(b) -sin(b);sin(b) cos(b)];
n=2;
for k=1:4
    i=1;
    for j=1:2:n
        p1=p(j,:);
        p2=p(j+1,:);
        d=(p2-p1)/3;
        new(i,:)=p1;i=i+1;
        q1=p1+d;
        new(i,:)=q1;i=i+1;
        new(i,:)=q1;i=i+1;
        new(i,:)=p1+d+e*d*a';i=i+1;
        new(i,:)=q1;i=i+1;
        new(i,:)=p1+d+e*d*a;i=i+1;
        new(i,:)=p1+d;i=i+1;
        q2=p1+2*d;
        new(i,:)=q2;i=i+1;
        new(i,:)=q2;i=i+1;
        new(i,:)=p1+2*d+d*a;i=i+1;
        new(i,:)=q2;i=i+1;
        new(i,:)=p1+2*d+d*a';i=i+1;
        new(i,:)=p1+2*d;i=i+1;
        new(i,:)=p2;i=i+1;
    end
    n=n*7;p=new;
end
for m=1:2:n
    line([p(m,1) p(m+1,1)],[p(m,2) p(m+1,2)],'Color','k');
end
axis equal
axis off
l  矩形生成元第一种曲线
p=[0 0;10 0];n=2;
A=[0 -1;1 0];
for k=1:4
    d=diff(p/3);m=5*n-4;
    q=p(1:n-1,:);
    p(6:5:m,:)=p(2:n,:);
    p(2:5:m,:)=q+d;
    p(3:5:m,:)=q+d+1*d*A';
    p(4:5:m,:)=q+2*d+1*d*A';
    p(5:5:m,:)=q+2*d;
    n=m;
end
plot(p(:,1),p(:,2),'k')
axis equal
axis off
l  矩形生成元第二种曲线
p=[0 0;10 0];n=2;
A=[0 -1;1 0];
for k=1:4
    d=diff(p/3);m=5*n-4;
    q=p(1:n-1,:);
    p(6:5:m,:)=p(2:n,:);
    p(2:5:m,:)=q+d;
    p(3:5:m,:)=q+d+.7*d*A';
    p(4:5:m,:)=q+2*d+.7*d*A';
    p(5:5:m,:)=q+2*d;
    n=m;
end
plot(p(:,1),p(:,2),'k')
axis equal
axis off

文件列表(点击上边下载按钮,如果是垃圾文件请在下面评价差评或者投诉):

Koch分形曲线数学建模题目.doc

关键词: Koch 分形曲线 数学建模题目

Top_arrow
回到顶部
联系方式| 版权声明| 招聘信息| 广告服务| 银行汇款| 法律顾问| 兼职技术| 付款方式| 关于我们|
网站客服网站客服 程序员兼职招聘 程序员兼职招聘 博客客服
沪 ICP 证 14049794 号
谷速代码 版权所有
Copyright © 1999-2014, GUSUCODE.COM, All Rights Reserved