%随机钻石方块法――一维
clear;clc;
%(一)字符解释
m=5;
n=2^m+1;
H=0.5;%系数Hurst=1~0,H=0.5是纯布朗运动;大就光滑,小就粗燥;
C=1/2^H;
%
XY=zeros(n,2);
for I=1:n;XY(I,1)=-1+(I-1)*2/(n-1);end
%
for I=m:-1:1 %倒排序
if I<m;C=C*C;end
nI=2^I; %步长
for J=1:nI:n
if J<n
s1=(rand-1/2)*C;
XY(J+(nI)/2,2)=(XY(J,2)+XY(J+(nI),2))/2+s1;
end
end
end
%天空:山谷Y0-天空Y1
Ya=max(XY(:,2));
[Y0,X0]=min(XY(:,2));X0=XY(X0,1);
Y1=Ya+(Ya+abs(Y0))/2;
Xs=[ XY(n,1) XY(n,1) XY(1,1) XY(1,1)];
Ys=[ Y0 Y1 Y1 Y0];
%山体:山谷Y0-山顶XY(:,2)
Xm=[XY(:,1)' XY(n,1) XY(n,1) XY(1,1) XY(1,1)];
Ym=[XY(:,2)' XY(n,2) Y0 Y0 XY(1,2)];
Ym1=Ym*0.3+0.05-abs(Y0);
%水面:Y0-水面-Y2
Y2=Y0-(Ya-(Y0))/1;
Xe=[XY(1,1) XY(n,1) XY(n,1) XY(1,1)];
Ye=[Y0 Y0 Y2 Y2];
%倒影:山谷Y0-倒山顶Yd
Y0=min(XY(:,2));
Xd=[XY(:,1)' XY(n,1) XY(n,1) XY(1,1) XY(1,1)];
Yd=-0.5*([XY(:,2)' XY(n,2) Y0 Y0 XY(1,2)]+abs(Y0))-abs(Y0);
Yd1=-0.1*([XY(:,2)' XY(n,2) Y0 Y0 XY(1,2)]+abs(Y0))-abs(Y0);
%
t=0:0.1:pi;
xt=.2*cos(t)+X0;yt=.2*sin(t)+Y0;
t=0:-0.1:-pi;
xp=.2*cos(t)+X0;yp=.1*sin(t)+Y0;
%
fill(Xs,Ys,[0.2,0.5,0.6]);hold on;%RGB(红-黄-蓝)
fill(xt,yt,[1,0.95,1]);
fill(Xm,Ym,[0.0,0.8,0.5]);hold on;%RGB(红-黄-蓝)
fill(Xm,Ym1,[0.0,0.5,0.2]);hold on;%RGB(红-黄-蓝)
fill(Xe,Ye,[0.5,0.8,1.0]);hold on;%RGB(红-黄-蓝)
fill(xp,yp,[1,0.9,1]);
fill(Xd,Yd,[0.2,0.5,0.5]);hold on;%RGB(红-黄-蓝)
fill(Xd,Yd1,[0.2,0.2,0.5]);hold on;%RGB(红-黄-蓝)
%
axis([-1 1 Y2 Y1]);
b=num2str(m);c=num2str(H);
a=['(m=',b,') ',' (H=',c,')'];
title(a);
评论