赞
踩
截图:
网址:
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的简单例子。学习的通病,学生只是会了这个答案,缺应用和变化。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。