摘要:特殊的遞迴圖形1
遞迴, 是一種很炫的東西, 我曾在藍色小舖有篇遞迴討論文章
不過那裏只是出一張嘴, 這裡來畫些圖看看,
以下的圖, 其實都來自同一個函數
先寫個函數
Private Function 繪製多邊形(ByVal sx As Single, ByVal sy As Single, ByVal dx As Single, ByVal dy As Single, ByVal 長度 As Single, ByVal 角度 As Single, ByVal 長度遞減值 As Single, ByVal 角度遞減值 As Single) As Boolean
'sx,sy,dx,dy ,長度 ,角度 ,長度遞減值 ,角度遞減值
If 長度 < 5 Then Return True
G.DrawLine(Pens.AliceBlue, sx, sy, dx, dy)
長度 -= 長度遞減值
角度 = (角度 + 角度遞減值) Mod 360 ' 角度 = (角度 + 角度遞減值) % 360
sx = dx
sy = dy
dx = sx + 長度 * Math.Cos(角度 * Math.PI / 180.0)
dy = sy + 長度 * Math.Sin(角度 * Math.PI / 180.0)
繪製多邊形(sx, sy, dx, dy, 長度, 角度, 長度遞減值, 角度遞減值)
End Function
'sx,sy,dx,dy ,長度 ,角度 ,長度遞減值 ,角度遞減值
If 長度 < 5 Then Return True
G.DrawLine(Pens.AliceBlue, sx, sy, dx, dy)
長度 -= 長度遞減值
角度 = (角度 + 角度遞減值) Mod 360 ' 角度 = (角度 + 角度遞減值) % 360
sx = dx
sy = dy
dx = sx + 長度 * Math.Cos(角度 * Math.PI / 180.0)
dy = sy + 長度 * Math.Sin(角度 * Math.PI / 180.0)
繪製多邊形(sx, sy, dx, dy, 長度, 角度, 長度遞減值, 角度遞減值)
End Function
在按鈕中分別加入以下的程式碼(一次加一行就好)
繪製多邊形(100, 100, 300, 100, 200, 0, 5, 90)
繪製多邊形(100, 100, 300, 100, 200, 0, 5, 60)
繪製多邊形(100, 100, 300, 100, 200, 0, 15, 120)
繪製多邊形(300, 100, 310, 100, 10, 0, 0.02, 5)
繪製多邊形(200, 100, 300, 100, 100, 0, 1, 30)
繪製多邊形(100, 100, 300, 100, 200, 0, 5, 60)
繪製多邊形(100, 100, 300, 100, 200, 0, 15, 120)
繪製多邊形(300, 100, 310, 100, 10, 0, 0.02, 5)
繪製多邊形(200, 100, 300, 100, 100, 0, 1, 30)
當然, 全域變數區需要一個
Dim G As Graphics
畫面的form_Load事件需要加一行
G = Me.PictureBox1.CreateGraphics
神奇吧, 所有的圖形其實說穿了長相都一樣的
都是繪製一條線以後, "旋轉某固定角度", "繼續繪製更短的線"
直到線的長度小於某數值為止
這種圖形可以做成漸漸變小, 也可以做成漸漸變大
未來還會多來幾種不同的想法, 慢慢帶各位看甚至高達上千行的遞迴喔
順著天賦做事,逆著個性做人生命, 就該浪費在美好的事物上