遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題。1)核心的子問題演算法。2)遞迴呼叫。3)給定遞迴出口。
遞迴設計使程式簡潔,也體現了設計思路在整體-區域性上結合的嚴謹,但仍不提倡程式設計使用,因為其執行效率低且占用棧的空間問題突出。作為解決思路的一種方式還是具有魅力。
分形的自我相似,自我複製和自我巢狀用遞迴演算法來實現是合適的,事實上經典分形圖的繪製大多數可採用遞迴演算法。
一.canto三分集。
**渲染框架上有方便繪製幾何圖形的shaperenderer類,它和batch畫筆都封裝了呼叫底層渲染的介面。
注:**標籤的段落無關分形演算法,是渲染框架上的一些筆記。
三分集遞迴演算法:
private void canto(int ax,int ay,int bx,int by)
else
dx=(float) (cx+math.cos(alfa+pi/3)*l);
dy=(float) (cy+math.sin(alfa+pi/3)*l);
koch(ax,ay,cx,cy,depth);
koch(ex,ey,bx,by,depth);
koch(cx, cy, dx, dy,depth);
koch(dx, dy, ex, ey,depth);
} }
最終效果:
比起三分集,妖魔曲線複雜一些,涉及到角度和方向上的計算,如果你把每條線段看成是有方向的向量,這些計算會更容易接受。演算法中的alpha是絕對角度,兩條線段的相對夾角不變,為60度但絕對角度是變化的,絕對角度的計算需要方向上的修正。見下圖可粗略體會下(圖作得粗糙別吐槽)
如果注釋修正絕對角度的**,結果會是這樣子
妖魔曲線基本的演算法就是這樣。它的基本圖元是一條直線,在此基礎上可以修改其基本圖元為乙個封閉的幾何圖形來模擬雪花。
待續...
分形的遞迴輸出
分形,具有以非整數維形式充填空間的形態特徵。通常被定義為 乙個粗糙或零碎的幾何形狀,可以分成數個部分,且每一部分都 至少近似地 是整體縮小後的形狀 即具有自相似的性質。乙個盒狀分形定義如下 度為1的盒分形為 x度為2的盒分形為 x x xx x依次類推,如果b n 1 表示n 1度的盒分形,則n度的...
分形的遞迴輸出
分形,具有以非整數維形式充填空間的形態特徵。通常被定義為 乙個粗糙或零碎的幾何形狀,可以分成數個部分,且每一部分都 至少近似地 是整體縮小後的形狀 即具有自相似的性質。乙個盒狀分形定義如下 度為1的盒分形為 x度為2的盒分形為 x xx x x依次類推,如果b n 1 表示n 1度的盒分形,則n度的...
遞迴 PTA分形的遞迴輸出
分形,具有以非整數維形式充填空間的形態特徵。通常被定義為 乙個粗糙或零碎的幾何形狀,可以分成數個部分,且每一部分都 至少近似地 是整體縮小後的形狀 即具有自相似的性質。乙個盒狀分形定義如下 度為1的盒分形為 x度為2的盒分形為 x xx x x依次類推,如果b n 1 表示n 1度的盒分形,則n度的...