python:turtle画图 塔

(52) 2024-05-09 21:01:01

截图:

python:turtle画图 塔 (https://mushiming.com/)  第1张

网址:

https://python123.io/index/turtles/5f277f1977034976bcae26f1

技术要点:

1.注意turtle自身的坐标系、坐标轴朝向。

2.每一层要确定一个海龟起点,我用的是一层图案的左下角位置,如下图所示。根据这个起始点,来计算每层的数据变化、设定画图距离。

红色位置就是每层图案的起点。

python:turtle画图 塔 (https://mushiming.com/)  第2张

3. 矩形、梯形、三角形,都可以做成函数。如果梯形可以任意指定高度参数,需要再加三角函数的计算。为了方便,我的梯形都用高度15、底角tan为15比30,这样上底的长度比下底少60. 梯形的模块,参数有多种设置方法,可以是长度、角度、斜边长度。

代码:

#20200803 钢七连
# python画图
import turtle
import math


mapx=-240
mapy=-240
level_h=60

def top_tri(size):
    turtle.begin_fill()
    turtle.fillcolor('#84c1ff')
    turtle.forward(15)
    for i in range(3):
         turtle.forward(size)
         turtle.left(120)
    turtle.end_fill()
    
def rect(w,h):
    turtle.begin_fill()
    turtle.fillcolor('#0f0')
    for x in range(4):
        if x % 2 == 1:
            n = h
        else:
            n = w
        turtle.forward(n)
        turtle.left(90)
    # end for
    turtle.end_fill()

# 梯形
def trapezoid(w1, w2 ):
    angle_c=27
    turtle.begin_fill()
    turtle.fillcolor('#00f')
    turtle.forward(w1)
    turtle.left(180-angle_c )
    turtle.forward(34)
    turtle.left(angle_c )
    turtle.forward(w2)
    turtle.left(angle_c )
    turtle.forward(34)
    turtle.end_fill()

def draw_level(size,level):
        turtle.penup()
        turtle.goto( (480- size)/2+ mapx ,mapy+ level* level_h)
        turtle.setheading(0)
        # 移动到矩形左下角
        turtle.penup()
        turtle.forward(15)
        #画一层
        turtle.pendown()
        rect(size-30, level_h-15)
        #先抬笔,再移动到房檐左下角
        turtle.penup()
        turtle.goto( (480- size)/2+ mapx ,mapy+ level* level_h+45)
        trapezoid(size, size-60 )

def main():
    draw_w=260
    turtle.speed(5)
    turtle.showturtle()
    # 画笔隐形
    # 画笔有效
    turtle.pendown()
    turtle.pensize(2)
    turtle.color('brown')

    for i in range(7):
        draw_level( draw_w ,i)
        draw_w-=30
    #塔尖    
    turtle.goto( (480- 260+ 7*30 )/2+ mapx ,mapy+ 7* level_h)
    turtle.setheading(0)
    top_tri(20) 
    turtle.hideturtle()
        
# unit test
#rect(90, 45)
#trapezoid(200, 140 )


main()


一个python的简单例子。学习的通病,学生只是会了这个答案,缺应用和变化。

THE END

发表回复