recurs_polygon3.m

来自「包括Koch曲线、Levy 曲线、分形树、Sierpinski三角形」· M 代码 · 共 56 行

M
56
字号
function [z,A]=recurs_polygon3(z,A,n); 
% 正多边形为构成元素的递归图形 
% Example: 
%    [z,A]=recurs_polygon3(0,-pi/2,1); 
if nargin==0;
    z=0;A=-pi/2;n=1;
end
axis off;
nr=3;  % 旋转对称次数 
N=7;  % 递归次数 
sc=0.63; % 缩小比例 
ang=2*pi/nr; 
hold on;
warning off ;
rand('state',n) ;
C=rand(1,3); 
if n<N ;
   r=sc^n; 
   [z,A,P]=polygonn(z,A,r); 
   fill(real(P),imag(P),C); 
   if abs(1-n)<1e-5; 
       m=nr; 
       k=0; 
   else 
       m=nr-1; 
       k=1; 
   end 
   for p=1:m; 
       A=A+pi; 
       A=A+(p+k-1)*ang; 
       z=z+(r*(1+sc))*exp(i*A); 
       [z,A]=recurs_polygon3(z,A,n+1); 
       A=A+pi; 
       z=z+r*(1+sc)*exp(i*A); 
       A=A-(p+k-1)*ang; 
   end 
end 
axis equal 
function [z,A,P]=polygonn(z,A,r); 
nr=3;  % 旋转对称次数 
ks=sin(pi/nr); 
ang=2*pi/nr; 

A=A+pi; 
z=z+r*exp(i*A); 
A=A+pi/2+ang/2; 
P=z; 
for k=1:nr 
%    plot([z,z+2*r*ks*exp(i*A)]); 
   z=z+2*r*ks*exp(i*A); 
   P=[P,z]; 
   A=A+ang;     
end 
A=A+pi/2-ang/2; 
z=z+r*exp(i*A);

⌨️ 快捷键说明

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