📄 mountain.m
字号:
n=128;%设置初始矩阵大小
m=4;%设置迭代次数
for i=1:n
for j=1:n
a(i,j)=0;
end
end
a(1,1)=unidrnd(100,1,1);
a(n,1)=unidrnd(100,1,1);
a(n,n)=unidrnd(100,1,1);
a(1,n)=unidrnd(100,1,1);%对四个角点赋随机z轴值
for k=0:m;
d=n/(2.^k);
for i=d/2+1:d:(n-d/2);
for j=d/2+1:d:(n-d/2);
a(i,j)=(a(i-d/2,j-d/2)+a(i+d/2,j-d/2)+a(i+d/2,j+d/2)+a(i-d/2,j+d/2))/4+unidrnd(100,1,1);
if(a(i-d/2,j)==0)a(i-d/2,j)=(a(i,j)+a(i-d/2,j+d/2)+a(i-d/2,j-d/2))/4+unidrnd(100,1,1);
if(a(i+d/2,j)==0)a(i+d/2,j)=(a(i,j)+a(i+d/2,j+d/2)+a(i+d/2,j-d/2))/4+unidrnd(100,1,1);
if(a(i,j-d/2)==0)a(i,j-d/2)=(a(i,j)+a(i-d/2,j-d/2)+a(i+d/2,j-d/2))/4+unidrnd(100,1,1);
if(a(i,j+d/2)==0)a(i,j+d/2)=(a(i,j)+a(i-d/2,j+d/2)+a(i+d/2,j+d/2)/4)+unidrnd(100,1,1);
end
end
end
end
end
end
end%利用角点产生中心点,而后产生边中点,进行迭代
c=0;
for i=1:n
for j=1:n
if(a(i,j)~=0)c=c+1;
end
end
end%统计生成点数
d=round(sqrt(c)+0.5);
z=zeros(d,d);
l=1;k=1;
for i=1:n
for j=1:n
if(a(i,j)~=0)
if(k==d)z(l,k)=a(i,j);l=l+1;k=1;
else z(l,k)=a(i,j);k=k+1;
end
end
end
end%利用数据点生成满值矩阵
x=[1:1:d];
y=x;
surf(x,y,z)
x1=1:0.025:d;
y1=1:0.025:d;
[x2,y2]=meshgrid(x1,y1);
t=interp2(x,y,z,x2,y2,'cubic');
mesh(x1,y1,t)%利用插值生成分形山
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -