《数学实验》报告
学 院: 电子与信息学院
专业班级: 通信工程4班 学 号: 201130301443 姓 名: 李腾辉 实验名称: 迭代与分形 实验日期: 2013.04.7
第三次实验
1. 实验内容
1.对一个等边三角形,每条边按照Koch曲线的方式进行迭代,产生的分形图称为Koch雪花。编制程序绘制出它的图形,并计算Koch雪花的面积,以及它的分形维数。
2. 实验过程
方法一
仿照Koch曲线代码对三角形的每条边进行Koch曲线化,函数的输入参数有三角形的边长R和迭代次数k,输出Koch雪花图形以及雪花所围面积S.
KochSnow面积推导如下所示:
迭代次数k 面积S
32r40: S=
1: S=32312
R+ (R)*3 4433231231222
R+ (R)*3 + (()R)*3443432: S=3: S=`````` N: S=3231231222 31323 R+ (R)*3 + (()R)*3+ (()R)*344343433231231222 31323R+ (R)*3 + (()R)*3+ (()R)*3+… 4434343
31n2n (()R)*343如此相加下去,当N?无穷时,S将为无穷大
源代码如下:
function kochsnow(R,k) %R为正三角形边长,k为迭代次数 p01=[0,0];p02=[R/2,sqrt(3)*R/2];p03=[R,0]; %3个起始点 S = 0; % S为面积,开始设为0 for line=0:2 %依次对3条边进行Koch曲线运算 if line==0; p=[p01;p02]; elseif line==1; p=[p02;p03]; else line==2; p=[p03;p01]; end
n=1; %存放线段的数量,初始值为1
A=[cos(pi/3),-sin(pi/3);sin(pi/3),cos(pi/3)]; %变换矩阵 用于计算新的结点 for s=1:k
j=0; % j为行数 for i=1:n
q1=p(i,:); %目前线段的起点坐标 q2=p(i+1,:); %目前线段的终点坐标 d=(q2-q1)/3;
j=j+1;r(j,:)=q1; %原起点存入r j=j+1;r(j,:)=q1+d; %新1点存入r j=j+1;r(j,:)=q1+d+d*A'; %新2点存入r j=j+1;r(j,:)=q1+2*d; %新3点存入r end
n=4*n; %全部线段迭代一次后,线段数量乘4 clear p %清空p ,注意:最后一个终点q2不在r中 p=[r;q2]; %一条边的全部结点 clear r
end
if line==0; %把第一条边的全部结点放在a a=p;
elseif line==1; %把第二条边的全部结点放在b b=p;
else line==2; %把第三条边的全部结点放在c c=p; end end
all=[a;b;c]; %三条边全部结点放入all plot(all(:,1),all(:,2)) %连接各个结点 fill(all(:,1),all(:,2),'g')%填充所围区域
for i=0:k %计算KochSnow的面积 S = S + (3^(0.5-i))*0.25*(R^2); end S
axis equal
Koch雪花图形 输入 半径R=2
K=0时 是正三角形 此时面积为 1.7321
K=1时 是正六边形 此时面积为 2.3094