Koch雪花曲線的MATLAB實現
阿新 • • 發佈:2018-12-29
Koch曲線是分形圖案的一個代表,對其研究很有意義,在此不敢多說。請見matrix67的部落格:
對於它的實現MATLAB可以用一個複數向量首尾相連而成,再在此基礎上不斷細分每條邊,由於點和線段都用複數表示,乘以一個模值為1的複數可以改變其輻角,從而改變方向。這個程式用MATLAB實現是極其簡單的。
Koch曲線程式碼
y=[1 (1+sqrt(3)*1i)/2 0 1];
slice=6;
for k=1:slice;%這裡是迭代次數,一般選定6次。由圖可見次數再高的也不可分辨了
x=y;n=length(x)-1;
h(x)-1;
for s=0:n-1%第二層迭代,這是對於上一次每條邊[y1,y2]而言的
dz=(x (s+2)-x(s+1))/3;y(4*s+1)=x(s+1);
y(4*s+2)=x(s+1)+dz;
y(4*s+3)=y(4*s+2)+dz*(1/2-sqrt(3)*1i/2);
y(4*s+4)=x(s+1)+2*dz;
end
y(4*n+1)=x(n+1);%結束回到開始點
end
plot(y),axis equal;
類似地對程式碼稍作改動可以繪製以下圖案
3次迭代
6次迭代
程式碼如下
y=[1 1i+1 1i 0 1];
slice=5;
for k=1:slice;
x=y;n=length(x)-1;
for s =0:n-1
dz=(x(s+2)-x(s+1))/3;
y(5*s+1)=x(s+1);y(5*s+2)=x(s+1)+dz;
y(5*s+3)=y(5*s+2)-dz*1i;y(5*s+4)=y(5*s+3)+dz;
y(5*s+5)=y(5*s+4)+dz*1i;
end
y(5*n+1)=x(n+1);
end
plot(y),axis equal;
以上程式碼中y向量的初始值改成了正方形圖案;dz沒有變,仍然是原x向量三等分的值;但dz所乘的單位複數變為了-1i和1i,表示在dz方向上右偏或左偏90度;最後由於分割時原來一段上出現了5個點,最後要加上一個點 y(5)。
此外因為編寫失誤還出現了這個圖案
/****/萌新第一次發帖,配圖很多,解釋可能不清楚,但這都是很基礎的內容,很容易就能理解的。希望不要被噴啊/