截图:
网址:
https://python123.io/index/turtles/5f277f1977034976bcae26f1
技术要点:
1.注意turtle自身的坐标系、坐标轴朝向。
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的简单例子。学习的通病,学生只是会了这个答案,缺应用和变化。