1. 程式人生 > >Koch雪花曲線的MATLAB實現

Koch雪花曲線的MATLAB實現

6次迭代的Koch曲線
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次迭代
3次迭代
6次迭代
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)。
一次迭代分析

此外因為編寫失誤還出現了這個圖案
bug shape
/****/萌新第一次發帖,配圖很多,解釋可能不清楚,但這都是很基礎的內容,很容易就能理解的。希望不要被噴啊/