📄 random_centerqqq.m
字号:
function random_centerqqq(Z,N);
% 三角形中点位移法分形曲面生成[法向交叉、劈裂]
% Z is the position of three points.
% N is the times of recursion.
% Example:
% random_centerqqq([0,6,3+4i],4);
% Author's email:zjliu2001@163.com
% 2005.05.22
%
Z=random_center_Cccc(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_Cccc(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=conutliuvv(Z(k,1),Z(k,2),Z(k,3),n,R);
zf=conutliuvv(Z(k,3),Z(k,2),Z(k,1),n,R);
zg=conutliuvv(Z(k,1),Z(k,3),Z(k,2),n,R);
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_Cccc(Z,n+1,N);
end
function yp=conutliuvv(x,y,z,n,R);
s=sign(imag(z-mean([y,x])));
s=(-1)^((s+1)/2);
A=angle(y-x)+s*pi/2; % 法向交叉的偏转角
% A=angle(y-x)-s*pi/2;时向两侧劈裂
if mod(n,2) % 计算交叉点位置
yp=mean([x,y])+abs(y-x)*R*exp(i*A)/(1+max(abs([x,y])))/3;
else
yp=mean([x,y])+abs(y-x)*R*exp(i*A)/(1+min(abs([x,y])))/3;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -