20212301 郭張煬 python繪圖項目


一,turtle的使用方法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二 需要繪畫的40張圖片

 

 

 

 

可以先對圖形進行分類:

 

1 簡單圖形(1,2,3,4,5,9,10,11,12,13,14,15)

包括了:

正多邊形(1,9,10,11,12,13)#代碼中我寫了polygon()函數

其他(2,3,4,5,14,15)#又另寫函數rectangle(2)/cave(4)/cross(5)/star(14)

特點:一筆畫出的圖形,是復雜圖形的基礎

 

 

2 簡單圖形經過旋轉后形成的幾何圖形

組合圖形(多個簡單圖形):(6,7,8)

利用for循環,turtle.right()來旋轉

旋轉圖形(簡單圖形旋轉得到):(16,17,18,19,20,21,22,23,25,26,27,28,29,30,32,33,34,35)

其他(需要單獨寫代碼,很難用簡單幾何圖形旋轉得到)(31,36,37,40)

特點:不可以一筆畫出

 

作圖難點:
1.圖形的起始位置:

以18為例

(圖片在下面)圖形的起始位置是左上角,每一次循環都需要重新找到新的起始位置可以將其調整到圖形右下角,再循環作圖,即可得到所求圖形。

 

 這是要繪制的圖形,畫筆此時就在起始位置

 

 

 

 繪制第一個圖形,可以看見起始位置在左上角

 

 

 

 繪制第二個圖形,重新調整了起始位置

 

2.圖形旋轉

以20為例

在下圖中,旋轉中心不是正方形的角,每一次做完正方形以后都要調整一下畫筆位置,將其調整到正方形一邊中點,接着進行旋轉操作

 

 

 

 

3.特殊圖形的處理(31,37,38)

  以37為例:

經過觀察, a圖形是由4個b圖形所組成的。

b圖形可以用5筆畫出。

故可以寫出繪制b圖形的代碼,再將畫筆方向調整,再重復4次,即可得到a圖形。

 a圖形

 

 

 

 b圖形

 

4.復雜圖形的分解(36,40)

  將復雜圖形分解為小的圖形,旋轉,得到復雜圖形

 以40為例

經過觀察,a是由8個b所組成的。

可以先畫出b,再旋轉8次,重復作圖,即可得到a

 

 a圖形

 

 

 

 b圖形

代碼運行

輸入1000,連續作圖(1—40)

 

 

輸入指定序號,單獨作圖

 

運行結束,輸入continue,重復運行

 

運行結束,輸入break,手動關閉窗口,程序結束

 

import turtle as pic

pic.pensize(2)#初始化畫筆
pic.speed(10)


def walk_r(a,b):#前進與旋轉一般有先后關系,捆綁
    pic.forward(a)
    pic.right(b)

def walk_l(a,b):
    pic.forward(a)
    pic.left(b)



def polygon(a,n):#a邊長,n邊數  1 9 10 11 12
    t=360/n
    for i in range (n):
        walk_r(a,t)

def rectangle(a,b):#繪制矩形,a長,b寬  2
    for i in range(2):
        walk_r(a,90)
        walk_r(b,90)

def convex(a=200,b=30,c=50,d=100):#3
    pic.left(90)
    walk_l(d+b, 90)
    walk_l(c, 90)
    walk_r(b, 90)
    walk_l(a-c, 90)
    walk_l(d,90)
    pic.forward(a)




def cave(a,b):#a是大正方形邊長,b是寬度   4
    for i in range(3):
        walk_r(a,90)
    walk_r(b, 90)
    walk_l(a-b, 90)
    walk_l(a-2*b, 90)
    walk_r(a-b, 90)
    pic.forward(b)

def cross(a,b):#5
    for i in range(4):
        pic.forward(a)
        pic.left(90)
        pic.forward(b)
        pic.right(90)
        pic.forward(b)
        pic.left(90)

def six():#6
    rectangle(200, 200)
    pic.penup()
    pic.goto(20,-20)
    pic.pendown()
    rectangle(160,160)

def seven():#7
    for i in range(8):
        walk_l(28.8,135)
        walk_l(20,90)
        walk_l(20, 135)
        walk_r(28.8,45)

def eight():#8
    polygon(100,4)
    pic.penup()
    pic.goto(50,-50)
    pic.pendown()
    polygon(100, 4)

def star(a):#14
    for i in range(8):
        pic.forward(a)
        pic.left(45)
        pic.forward(a)
        pic.right(90)

def fifteen():#15 ok
    for i in range(10):
        pic.forward(100)
        pic.right(144)


def sixteen():# 16
    for i in range(4):
        rectangle(200, 20)
        pic.right(90)


def seventeen():  # 17
    for i in range(6):
        polygon(200, 3)
        pic.right(60)


def eighteen():  # 18
    for i in range(4):
        cave(100, 10)
        pic.right(90)
        walk_r(100,90)
        walk_r(100,180)

def nineteen():# 19
    for i in range(4):
        cross(50,50)
        pic.left(90)

def twenty():#20
    polygon(100,4)
    pic.left(90)
    pic.backward(50)
    pic.right(72)
    pic.backward(50)
    for i in range(4):
        polygon(100,4)
        pic.forward(50)
        pic.right(72)
        pic.backward(50)

def twenty_one():
    for i in range(4):
        walk_r(50,90)
        walk_r(100, 90)
        walk_r(10, 90)
        walk_l(90, 90)
        walk_l(80, 90)
        walk_r(90, 90)
        walk_r(10, 90)
        walk_r(100, 90)
        walk_r(50, 90)


def twenty_two():#22 ok
    for i in range(8):
        polygon(80, 6)
        pic.right(45)

def twenty_three():#23 ok
    for i in range(8):
        polygon(80, 3)
        pic.right(45)

def twenty_four():#24 ok
    for i in range(6):
        polygon(100,3)
        walk_r(100,60)
        polygon(100, 3)
        pic.right(120)
        walk_r(100, 60)
        pic.right(60)

def twenty_five():
    for i in range(8):
        rectangle(100, 20)
        pic.right(90)
        walk_l(20,45)

def twenty_six():
    polygon(100,3)
    pic.left(120)
    pic.backward(50)
    pic.right(72)
    pic.backward(50)
    for i in range(4):
        polygon(100,3)
        pic.forward(50)
        pic.right(72)
        pic.backward(50)

def twenty_seven():
    for i in range(4):
        cross(50,50)
        pic.right(90)
    pic.right(45)
    for i in range(4):
        cross(50,50)
        pic.right(90)

def twenty_eight():
    for i in range(4):
        convex(100,50,50,50)
        pic.right(90)
    pic.right(45)
    for i in range(4):
        convex(100, 50, 50, 50)
        pic.right(90)

def twenty_nine():#29
    for i in range(10):
        polygon(80, 5)
        pic.right(36)

def thirty():#30
    for i in range(6):
        polygon(80, 6)
        pic.right(60)

def thirty_one(a=100,b=10):#31 ok
    for i in range(4):
        pic.forward(a+3*b)
        pic.right(90)
        pic.forward(a+b)
        pic.right(90)
        pic.forward(a+2*b)
        pic.right(90)

def thirty_two():#32
    for i in range(8):
        polygon(80, 8)
        pic.right(45)

def thirty_three():
    twenty_one()
    pic.right(45)
    twenty_one()

def thirty_four():#34
    for i in range(4):
        cross(70,50)
        pic.right(90)

def thirty_five():#35
    for i in range(6):
        polygon(80, 6)
        pic.right(60)
    pic.right(30)
    for i in range(6):
        polygon(80, 6)
        pic.right(60)

def thirty_six():
    t=0
    for i in range(8):
        pic.pendown()
        walk_l(20,45)
        for i in range(6):
            walk_r(20,90)
        pic.left(135)
        walk_l(20,90)
        walk_r(20,45)
        walk_r(20,135)
        walk_l(20,45)
        walk_r(20,90)
        walk_l(20,45)
        walk_r(20,135)
        walk_r(20,45)
        walk_r(20,45)
        pic.penup()
        pic.home()
        t+=1
        pic.right(45*t)



def thirty_seven():#37
    for i in range(4):
        walk_l(20,90)
        walk_l(80,90)
        walk_l(70,90)
        walk_l(40,90)
        walk_l(50,90)

def up():#38的輔助函數
    pic.penup()
    pic.forward(100)
    pic.pendown()
    pic.right(90)

def thirty_eight():#38 ok
    for i in range (36):
        up()
        for i in range(2):
            pic.forward(100)
            pic.right(90)
        up()
        pic.right(10)

def thirty_nine():
    for i in range(4):
        cave(100, 10)
        pic.backward(100)
        cave(100, 10)
        pic.backward(100)
        pic.right(90)
def fourty():
    t=0
    for i in range(8):
        pic.pendown()
        walk_l(20,90)
        walk_r(10,135)
        walk_r(14.4,90)
        walk_r(14.4,135)
        walk_r(20, 135)
        walk_l(14.4,45)
        walk_r(20,90)
        walk_l(19,90)
        walk_l(15, 90)
        walk_l(38, 90)
        walk_l(15, 90)
        walk_l(38,90)
        walk_l(15, 90)
        walk_r(19, 45)
        walk_l(20,90)
        walk_r(20,45)
        walk_l(20,90)
        walk_r(20, 90)
        pic.penup()
        pic.home()
        t+=1
        pic.right(45*t)

def judge(i):
    if i == "40":
        fourty()
    elif i == "39":
        thirty_nine()
    elif i == "38":
        thirty_eight()
    elif i == "37":
        thirty_seven()
    elif i == "36":
        thirty_six()
    elif i == "35":
        thirty_five()
    elif i == "34":
        thirty_four()
    elif i == "33":
        thirty_three()
    elif i == "32":
        thirty_two()
    elif i == "31":
        thirty_one()
    elif i == "30":
        thirty()
    elif i == "29":
        twenty_nine()
    elif i == "28":
        twenty_eight()
    elif i == "27":
        twenty_seven()
    elif i == "26":
        twenty_six()
    elif i == "25":
        twenty_five()
    elif i == "24":
        twenty_four()
    elif i == "23":
        twenty_three()
    elif i == "22":
        twenty_two()
    elif i == "21":
        twenty_one()
    elif i == "20":
        twenty()
    elif i == "19":
        nineteen()
    elif i == "18":
        eighteen()
    elif i == "17":
        seventeen()
    elif i == "16":
        sixteen()
    elif i == "15":
        fifteen()
    elif i == "14":
        star(50)
    elif i == "13":
        pic.circle(100)
    elif i == "12":
        polygon(50, 8)
    elif i == "11":
        polygon(70, 6)
    elif i == "10":
        polygon(80, 5)
    elif i == "9":
        polygon(100, 3)
    elif i == "8":
        eight()
    elif i == "7":
        seven()
    elif i == "6":
        six()
    elif i == "5":
        cross(50, 50)
    elif i == "4":
        cave(100, 10)
    elif i == "3":
        convex()
    elif i == "2":
        rectangle(300, 50)
    elif i == "1":
        polygon(100, 4)

print("輸入1000,可以連續作圖")
print("輸入指定序數,繪畫指定序數")
print("作圖完畢,輸入‘continue’,繼續作圖")
print("作圖完畢,輸入‘break’,結束作圖")
while 1:
    t = input()#數據輸入
    if t=="1000":
        for i in range(1,41):
            judge(str(i))
            pic.reset()
    else:
        judge(t)
        print("請輸入下一條指令")

    b = input()
    if b == "continue":
        pic.reset()
    elif b == "break":
        print("請手動關閉窗口")
        break

pic.mainloop()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM