【中秋赏月】 Python Turtle画圆月星空图
前言
从古至今农历八月十五前后都是一年一度赏月最佳时节,我们在上学的时候就通过诗人们的诗句中,对月的美略窥一二:
- “明月出天山,苍茫云海间”,李白为我们描绘出月亮刚出来的壮丽场景🌒
- “可怜九月初三夜,露似珍珠月似弓”,白居易为我们描述了如弓形的月亮🌛
- “露从今夜白,月是故乡明”,王维吐露出了独在异乡游子们把家乡的思念寄托在月亮上🌔
不仅诗句对月亮寄托了各种情感,耳熟能详流传民间的传说如嫦娥奔月、玉兔捣药、貂蝉拜月等,到现代科技上对月亮的探索从未停下脚步🚀
如今,又到了中秋佳节了。在开心过节之前,我们本期用Python Turtle来画一幅星空月圆图吧~
1. Turtle 概述
Turtle 中文名叫“海龟”,是Python用于引导初学者进行编程学习的一个绘制图像库。
Python 形象地使用小海龟在横轴为x、纵轴为y的坐标原点(0,0)位置开始,在平面系统上中进行移动,它爬行的路径就是我们绘制的图形。
Turtle 语法格式:
# 导入turtle库
from turtle import *
# 创建Turtle对象
t = Turtle()
2. Turtle 组成部分
-
画布📃:画布就是turtle提供绘制的的区域
-
使用
turtle.setup()
screen = Screen() screen.setup(800,800)
-
使用
turtle.screensize(width,height,bg)
screen = Screen() screen.screensize(800,800,bg="black")
-
-
画笔🖌️:默认从原点(0,0)出发爬行的小乌龟
-
画笔动作
方法 作用 turtle.pendown() 画笔落下 turtle.penup() 画笔拾起 -
画笔属性
方法 作用 turtle.pensize() 设置画笔的宽度 turtle.pencolor() 没有参数传入,返回当前画笔颜色 turtle.speed(speed) 设置画笔移动速度,画笔绘制的速度范围[0,10]
-
-
绘图📊:
- 画笔运动
- 画笔控制
- 全局控制
2. Turtle 基本方法
👉 画笔运动方法
方法 | 说明 |
---|---|
turtle.forward(distance) | 向当前画笔方向移动distance像素长度 |
turtle.backward(distance) | 向当前画笔相反方向移动distance像素长度 |
turtle.right(degree) | 顺时针移动degree° |
turtle.left(degree) | 逆时针移动degree° |
turtle.goto(x,y) | 将画笔移动到坐标为x,y的位置 |
turtle.circle() | 画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆 |
setx( ) | 将当前x轴移动到指定位置 |
sety( ) | 将当前y轴移动到指定位置 |
setheading(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.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是字体的参数,分别为字体名称 |
1. 圆月星空图
使用Turtle画简易版的圆月星空图如下:
📣 重要说明:
-
首先创建一个画布
-
画布的长宽分别为1200*900
-
画布背景色为黑色
-
画布的颜色模式切换成RGB格式
screen = Screen() width,height = 1200,900 screen.setup(width,height) screen.bgcolor("black") screen.delay() screen.colormode(255)
-
-
画一轮明月
- 首先定义一个Turtle对象
- 画笔的颜色和填充颜色都是白色
- 最后使用turtle.circle(120)画一个大小为120的圆
def moon(): m = Turtle(visible=False, shape="circle") m.pensize(10) m.pencolor("white") m.penup() m.fillcolor("white") m.goto(width/3,120) m.pendown() m.begin_fill() m.circle(120) m.end_fill()
-
画小小星
- 创建Turtle对象
- 定义画笔和填充颜色为随机色
- 最后使用绘画步骤:penup、pendown、goto
def stars(x,y,left,edge): t = Turtle(visible=False, shape="turtle") t.pensize(2) t.pencolor(randomcolor()) t.fillcolor(randomcolor()) t.speed(0) t.penup() t.goto(x,y) t.pendown() t.left(left) for _ in range(5): t.forward(edge) t.right(144) t.end_fill() t.left(-left)
-
我们使用for 循环创建位置随机的小小星
for _ in range(100): x = random.randint(-450,450) y = random.randint(0,400) edge = random.randint(3,8) left = random.randint(0,180) stars(x,y,left,edge)
-
最后完整的代码如下:
from turtle import *
import random
screen = Screen()
width,height = 1200,900
screen.setup(width,height)
screen.bgcolor("black")
screen.delay()
screen.colormode(255)
def stars(x,y,left,edge):
t = Turtle(visible=False, shape="turtle")
t.pensize(2)
t.pencolor(randomcolor())
t.fillcolor(randomcolor())
t.speed(0)
t.penup()
t.goto(x,y)
t.pendown()
t.left(left)
for _ in range(5):
t.forward(edge)
t.right(144)
t.end_fill()
t.left(-left)
def moon():
m = Turtle(visible=False, shape="circle")
m.pensize(10)
m.pencolor("white")
m.penup()
m.fillcolor("white")
m.goto(width/3,120)
m.pendown()
m.begin_fill()
m.circle(120)
m.end_fill()
def randomcolor():
R = random.randint(0, 255)
G = random.randint(0, 255)
B = random.randint(0, 255)
moon()
for _ in range(100):
x = random.randint(-450,450)
y = random.randint(0,400)
edge = random.randint(3,8)
left = random.randint(0,180)
stars(x,y,left,edge)
总结
本期,我们学习使用turtle 海龟图像库组成部分和相关的方法使用,并上手实操画出简版的圆月星空图,来迎接中秋佳节的到来~
以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心🌹🌹🌹
转载自:https://juejin.cn/post/7006537552869982244