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