- Dragon 曲線的生成規則
變化的起始是一條原始直線段。第一步是將該直線段由中間點隆起,使其變成一個等腰直角三角形的兩腰。接下去再分別對兩腰作和前面同樣的變化,如此不斷進行。
不難看出,Dragon 曲線完全是由長度相等的線段組成,且兩兩相交處都成直角。另外,每次分形後,曲線的長度是原來曲線長度的 根號2倍。因此,經過無數次變化,Dragon 曲線也將變成無限長。這一點正符合分形曲線的特點。
下面我們來分析 Dragon 曲線的生成規則:
假如我們從線段 1 開始,順着曲線前進,那麼在這個過程中,每到一個線段末端拐角處,就必須向左或向右轉90º 。於是,待要解決的關鍵問題就是如何確定是向左轉還是向右轉。
如果用代碼 1 表示向左轉90º ,用 3 表示向右轉90º 。並且對於第 i 段線段,以T ( i )來表示其轉向代碼。
則 對於上圖有:
T ( 1 )=1 T ( 5 )=1
T ( 2 )=1 T ( 6 )=3
T ( 3 )=3 T ( 7 )=3
T ( 4 )=1
因此,對於第 i 段線段末了的轉角:A ( i )=T ( i )*90º 。
因爲向右轉90º 就等於向左轉270º 。對於 i 的任意整數值,其T ( i )的
值可由下式確定:
T ( i )=T ( i / 2 ) ; 對於 i 是偶數
T ( i )=T ( i % 4 ) ; 對於 i 是奇數
- 生成 Dragon 曲線的程序
Dragon 曲線可以用分步判別繪線的方法繪製出來。其主要的程序段如下:
for ( i=1; i<=n; i++)
{
j = i ;
while(( j&1 )==0) j>>1 ;
j=j % 4 ;
a=(a+j) % 4 ;
x1= x1+d*cos( a*PI ) ;
y1= y1- d*sin( a*PI ) ;
x=(int)(x1+0.5) ; y=(int)(y1+0.5) ;
lineto( x , y ) ;
}
同樣,Dragon曲線也是不自相交的,但是在圖形上它沒有如 Koch 曲線那樣可明顯看出。但只要把曲線中 90º的拐角改畫一個小的倒角,情況就清楚了。
- 其他分形實例
用 分形 可以構造很多自然界的形體,下面是幾種常見的例子:
(1)分枝
Koch 曲線和Dragon曲線都是連續的,
分枝結構是不連續的,它的生成元類
似於圖:
F : F [ L F ] F [ R F ] F
(2)粒子模型
(3)岩石
這種分形由平面多邊形(如三角形、四邊形等)用隨機插值法迭代生成,可模擬山巒。
以四邊形爲例:分割原始四邊形爲四個小四邊形,此時要求出每條邊上的中點和四邊形的中點共 5 個點。設每條邊的兩端點爲P0i (i=1,2),中點爲Pu,四邊形的中點爲Pv。
則可給出計算方法爲:
式中:n 爲遞歸深度。
t 爲變位係數。
r 爲呈正態分佈的隨機數。
Pui 爲前四條邊的中點。
這是一隻編程小喵,經常出沒在喵屋[AudioMiao]中,挖挖[喵的Github],瞧瞧世界。