mountain.m

来自「用来生成分形山的matlab程序」· M 代码 · 共 61 行

M
61
字号
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 + =
减小字号Ctrl + -
显示快捷键?