程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python與分形0019 - 【教程】Stack of Circles

編輯:Python

stack of circles效果圖

STEP 1:畫一個圓

代碼:

turtle.circle(30)

圖略。

STEP 2:畫2層

效果圖:

這裡面需要一點數學知識。

這三個圓的相對位置構成了一個等邊三角形,假設第一個圓的起始位置為(x0, y0),那麼,第二個圓的起始位置為(x0-r, y0+sqrt(3)r),第三個圓的起始位置為(x0-r+2r,y0+sqrt(3)r)。

知道了相對位置畫法就簡單了。

先畫第一個圓,代碼為:

r = 30
x0 = 0
y0 = 300
turtle.penup()
turtle.goto(x0, y0)
turtle.pendown()
turtle.circle(r)

再找第二個圓的起始位置:

x0 -= r
y0 -= math.sqrt(3)*r

再畫第二個圓:

turtle.penup()
turtle.goto(x0, y0)
turtle.pendown()
turtle.circle(r)

再畫第三個圓:

turtle.penup()
turtle.goto(x0+2*r, y0)
turtle.pendown()
turtle.circle(r)

搞定,眼尖的同學一定看出來了可以重構,我們再等等。

STEP 2:畫3層

效果圖:

已經由1層衍生到了2層,那麼,由2層衍生到3層就比較簡單了,直接再增加代碼。

x0 -= r
y0 -= math.sqrt(3)*r
turtle.penup()
turtle.goto(x0, y0)
turtle.pendown()
turtle.circle(r)
turtle.penup()
turtle.goto(x0+2*r, y0)
turtle.pendown()
turtle.circle(r)
turtle.penup()
turtle.goto(x0+4*r, y0)
turtle.pendown()
turtle.circle(r)

STEP 3:重構

我們發現,1->2,2->3的邏輯是一樣的,代碼也基本上差不多,重構一把。

def stack_circles(x0, y0, r, stacks):
    turtle.penup()
    turtle.goto(x0, y0)
    turtle.pendown()
    turtle.circle(r)
    if stacks > 1:
        for s in range(1, stacks):
            x0 -= r
            y0 -= math.sqrt(3)*r
            for _ in range(s+1):
                turtle.penup()
                turtle.goto(x0 + 2*_*r, y0)
                turtle.pendown()
                turtle.circle(r)
                turtle.update()

pefect。

視頻


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved