⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 random_center.m

📁 该程序为matlab环境下程序
💻 M
字号:
%中点位移法生成分形曲面的步骤如下: 
%(1)从初始的三角形出发,求出各边中点(M1,M2,M3); 
%(2)在该中点处,沿铅垂方向向上产生一个位移W,该位移 ... 
  %量与边长成比例,比例因子可以随机产生,或由一些均 
  %匀分布的随机数组成的集中取出,三条边中点处产生位
  %移,得到三个新的点(D,E,F,其中是AB线段得到的,E是 
  %BC线段得到的,F是AC线段得到的); 
%(3)将三个新点和原三角形的三个顶点相联接,产生四个新 
  %的三角形,即ΔADF,ΔBDE,ΔCEF,ΔDEF; 
%(4)对每个子三角形做同样的操作,如此不断迭代(递归)循 
  %环,直到满足终止条件为止。 
%一般说来,中点位移量是一个随机变量,并且必须随三角形 
%的子分而不断变小。 
  %在上述分形曲面的生成过程中,通过三角形的不断被子分 
%而整个表面弄成皱折,产生类似于山脉的形状——分形山。 

%matlab对应程序如下:
function random_center(Z,N); 
% 三角形中点位移法分形曲面生成[均匀] 
% Z is the position of three points. 
% N is the times of recursion. 
% Example: 
%   random_center([0,6,3+4i],4); 
% Author's email:zjliu2001@163.com 
% 2005.05.22 
% 

Z=random_center_C(Z,0,N); 
Z(:,4)=Z(:,1); 
hold on 
for k=1:size(Z,1); 
   plot(Z(k,1:end)) 
end                % 根据数据绘图 

function [Z,T]=random_center_C(Z,n,N); 
% 计算数据 
if n<N; 
   zz=[]; 
   R=rand; 
   for k=1:size(Z,1); 
       L=sum(abs(diff([Z(k,1:end),Z(k,1)])));; 
       ze=mean([Z(k,1),Z(k,2)])+abs(Z(k,1)-Z(k,2))*R*i/L; 
       zf=mean([Z(k,3),Z(k,2)])+abs(Z(k,3)-Z(k,2))*R*i/L; 
       zg=mean([Z(k,3),Z(k,1)])+abs(Z(k,3)-Z(k,1))*R*i/L; 
       zz=[zz;[ze,zf,zg]]; 
       zz=[zz;[Z(k,1),ze,zg]]; 
       zz=[zz;[Z(k,2),ze,zf]]; 
       zz=[zz;[Z(k,3),zf,zg]]; 
   end 
   Z=zz; 
   Z=random_center_C(Z,n+1,N); 
end 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -