企业如何利用HarmonyOS开发工具提升小程序开发效率与合规性
841
2022-09-12
画一个心送给心爱的小姐姐,Python绘图库Turtle
Turtle介绍
Turtle是Python内嵌的绘制线、圆以及其他形状(包括文本)的图形模块。
一个Turtle实际上是一个对象,在导入Turtle模块时,就创建了对象,然后,可以调用Turtle对象的各种方法完成不同的操作。
当创建一个Turtle对象时,它的位置被设定在(0,0)处——窗口的中心,而且它的方向被设置为向右。Turtle模块用笔来绘制图形,就像在现实的纸上画图写字。当移动笔的时候就会按着移动方向画线。
海龟图坐标详解
海龟图画图定位采用坐标系,坐标系的(0,0)位置在图纸的中间点。其他的跟我们在数学中学的坐标是一样的,分成四个象限。
如下图所示:
Turtle基础
1. 画布
设置画布大小与背景颜色
方法1:
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
参数:分别为画布的宽(单位像素), 高, 背景颜色。
方法2:
turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
参数:width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例,(startx, starty): 这一坐标表示矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心
2. 画笔
画笔设置:
画笔宽度 turtle.pensize(int) 参数是一个整形
画笔颜色turtle.pencolor("black") 参数可以是字符串如"green", "red",也可以是RGB 3元组
画笔速度 turtle.speed(speed) 设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。
3. 绘图命令
海龟绘图命令可以划分为3种:一种为画笔运动命令,一种为画笔控制命令,还有一种是全局控制命令。
画笔运动命令:
命令
说明
turtle.forward(distance)/fd()
向当前画笔方向移动distance像素长度
turtle.backward(distance)
向当前画笔相反方向移动distance像素长度
turtle.right(degree)
顺时针移动degree°
turtle.left(degree)
逆时针移动degree°
turtle.pendown()
移动时绘制图形,缺省时也为绘制
turtle.goto(x,y)
将画笔移动到坐标为x,y的位置
turtle.penup()
提起笔移动,不绘制图形,用于另起一个地方绘制
turtle.circle()
画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆
setx( )
将当前x轴移动到指定位置
sety( )
将当前y轴移动到指定位置
setheading(angle)/seth(angle)
设置当前朝向为angle角度
home()
设置当前画笔位置为原点,朝向东。
dot(r)
绘制一个指定直径和颜色的圆点
画笔控制命令:
命令
说明
turtle.fillcolor(colorstring)
绘制图形的填充颜色
turtle.color(color1, color2)
同时设置pencolor=color1, fillcolor=color2
turtle.filling()
返回当前是否在填充状态
turtle.begin_fill()
准备开始填充图形
turtle.end_fill()
填充完成
turtle.hideturtle()
隐藏画笔的turtle形状
turtle.showturtle()
显示画笔的turtle形状
turtle.begin_poly()
记录画笔的位置
turtle.get_poly()
获取画笔的位置
全局控制命令:
命令
说明
turtle.clear()
清空turtle窗口,但是turtle的位置和状态不会改变
turtle.reset()
清空窗口,重置turtle状态为起始状态
turtle.undo()
撤销上一个turtle动作
turtle.isvisible()
返回当前turtle是否可见
stamp()
复制当前图形
turtle.write(s ,font=("font-name",font_size,"font_type")])
写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项
turtle.mainloop()
绘制完成后不关闭窗口
案例:五角星
五角星画法:
五角星每一个内角为36°,假如以海龟所在位置为起点先画一条横线,那么画到第一个角的时候需要拐弯可以使用 turtle.right()顺时针,turtle.left() 逆时针旋转画笔
如果使用顺时针旋转 则180°-36°=144°
如果使用逆时针旋转 则 180°+36°=216°
五个角即循环五次即可
import turtle
turtle.pensize(3) # 画笔大小
turtle.pencolor("yellow") # 画笔颜色
turtle.fillcolor("red") # 填充颜色
turtle.begin_fill() # 开始填充
for _ in range(5): # 五角星循环五次
turtle.forward(200) # 五角星的边长200像素
turtle.left(144) # 画笔旋转角度
turtle.end_fill() # 填充完成
turtle.mainloop() # 不关闭窗口
案例:爱心
说明:桃心画法
def draw_heart(r, angle=45):
"""
:param r: 桃心圆的半径
:param angle: 起始画笔角度
:return: 返回桃心底部尖点坐标
"""
turtle.begin_fill() # 开始填充
turtle.seth(0)
turtle.seth(angle) # 设置画笔方向
turtle.circle(-r, 180) # 逆时针画半圆
turtle.fd(2 * r) # 向前移动
turtle.begin_poly() # 记录画笔的位置
x, y = turtle.get_poly()[0] # 获取画笔的位置
turtle.right(90) # 逆时针旋转画笔
turtle.fd(2 * r) # 向前移动
turtle.circle(-r, 180)
turtle.end_fill() # 填充结束
return x, y
完整代码查看附件
import turtle
turtle.setup(1200, 600) # 窗口大小
# 画心
turtle.color("black", "red")
turtle.pensize(2)
turtle.speed(10)
turtle.up() # 提起画笔
turtle.goto(0, 50)
turtle.down()
def draw_heart(r, angle=45):
"""
:param r: 桃心圆的半径
:param angle: 起始画笔角度
:return: 返回桃心底部尖点坐标
"""
turtle.begin_fill() # 开始填充
turtle.seth(0)
turtle.seth(angle) # 设置画笔方向
turtle.circle(-r, 180) # 逆时针画半圆
turtle.fd(2 * r) # 向前移动
turtle.begin_poly() # 记录画笔的位置
x, y = turtle.get_poly()[0] # 获取画笔的位置
turtle.right(90) # 逆时针旋转画笔
turtle.fd(2 * r) # 向前移动
turtle.circle(-r, 180)
turtle.end_fill() # 填充结束
return x, y
# 画桃心
x_y = []
start_x = 0
for _ in range(4):
turtle.goto(start_x, 50)
turtle.down() # 放下笔
x_y.append(draw_heart(8))
start_x += 50
turtle.up() # 提起画笔
# 画叶子
def draw_flower(x, y):
"""
画桃心下的花
:param x: 桃心尖底的x轴
:param y: 桃心尖底的y轴
:return:
"""
turtle.up()
turtle.goto(x, y)
turtle.seth(0) # 恢复画笔向右
turtle.seth(-90)
turtle.down()
turtle.fd(60)
turtle.goto(x, y)
turtle.right(60)
turtle.fd(20)
turtle.left(90)
turtle.fd(10)
turtle.left(120)
turtle.fd(20)
turtle.up()
turtle.goto(x, y)
turtle.seth(0) # 恢复画笔向右
turtle.seth(-115)
turtle.down()
turtle.fd(25)
turtle.up()
turtle.goto(x, y)
turtle.seth(0) # 恢复画笔向右
turtle.seth(-10)
turtle.down()
turtle.fd(20)
turtle.right(90)
turtle.fd(8)
turtle.right(120)
turtle.fd(20)
turtle.goto(x, y)
turtle.seth(-60)
turtle.fd(20)
turtle.up()
for x, y in x_y:
draw_flower(x, y)
# 画小人物
turtle.up()
turtle.goto(-200, -50)
turtle.down()
turtle.seth(0) # 恢复画笔向右,好控制方向
turtle.seth(45)
turtle.fd(40)
turtle.begin_poly() # 记录画笔的位置,脚叉的位置
x, y = turtle.get_poly()[0] # 获取画笔的位置
turtle.right(90)
turtle.fd(35)
turtle.goto(x, y)
turtle.left(135)
turtle.fd(90)
turtle.seth(0)
turtle.circle(30) # 画圆
turtle.goto(x, y + 60) # 手的位置
turtle.fd(40)
turtle.circle(30, 70) # 画圆,拿花手的弧度
turtle.seth(0)
turtle.up()
turtle.goto(x, y + 50) # 手的位置
turtle.down()
turtle.fd(50)
turtle.begin_poly() # 记录手的位置等下画花需要用
f_x, f_y = turtle.get_poly()[0]
# 眼睛
turtle.up()
turtle.goto(x - 15, y + 120) # 眼睛的位置
turtle.down()
turtle.pensize(4)
turtle.seth(45)
turtle.circle(-10, 70) # 画圆弧,拿花手的弧度
turtle.dot(10) # 眼睛画圆
turtle.up()
turtle.goto(x + 10, y + 120) # 眼睛的位置
turtle.down()
turtle.pensize(4)
turtle.seth(45)
turtle.circle(-10, 70) # 画圆弧,拿花手的弧度
turtle.dot(10) # 眼睛 画圆
turtle.up()
# 嘴巴
turtle.goto(x, y + 105) # 眼睛的位置
turtle.down()
turtle.circle(10, 70) # 画圆弧,拿花手的弧度
# 画里拿的花叶子部分
turtle.pensize(3) # 将画笔大小
turtle.up()
turtle.goto(f_x, f_y) # 手的位置
turtle.left(20)
turtle.down()
turtle.fd(60)
turtle.pensize(2) # 将画笔调小
turtle.begin_poly() # 记录手的位置等下画花需要用
x, y = turtle.get_poly()[0]
turtle.backward(80)
turtle.up()
turtle.goto(x, y)
turtle.down()
turtle.right(90)
turtle.fd(20)
turtle.right(90)
turtle.fd(8)
turtle.right(120)
turtle.fd(25)
turtle.right(200)
turtle.fd(25)
turtle.up()
turtle.goto(x, y)
turtle.down()
turtle.right(60)
turtle.fd(25)
turtle.goto(x, y)
turtle.right(40)
turtle.fd(25)
turtle.left(90)
turtle.fd(8)
turtle.left(110)
turtle.fd(25)
turtle.goto(f_x + 34, f_y + 75)
draw_heart(8, angle=20) # 手里拿的桃心
# 写文字
turtle.up()
turtle.goto(150, 200)
turtle.pencolor("PINK") # 画笔颜色
turtle.write("TO: 所有同学", font=("方正舒体", 30, 'normal'))
turtle.goto(180,140)
turtle.write("送给棒棒的你", font=("方正舒体", 30, 'normal'))
turtle.hideturtle()
turtle.mainloop()
喜欢Python的同学扫码加我哟!!!!!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~