基于Python中的turtle绘画星星和星空

作者:迪迦瓦特曼 时间:2022-10-31 08:57:41 

前言:

Python 中的画图工具——turtle(海龟绘图),turtle 是 Python 中自带的绘图模块,最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言。

使用 turtle 控制画笔在画板上画画。而这个画笔是有形状的,默认是一个小箭头,我们可以使用 turtle.shape('turtle') 将其设成一个小海龟。除了变成小海龟外,还支持传入 'arrow'(箭头),'circle'(圆),'square'(正方形),'triangle'(三角形)和 'classic'(经典).

画笔的颜色默认是黑色的,我们可以使用turtle.color('red') 改成红色的。当然,你也可以使用 turtle.color('yellow') 改成黄色,使用turtle.color('pink') 改成粉色等等。

一、画一个N边形

import turtle
 
turtle.color('red') #将画笔颜色设置成红色
turtle.hideturtle() #隐藏小海龟
 
#画一个n边形
def draw_polygon(n):
  for i in range(n):
    turtle.forward(100)
    turtle.right(360/n)
 
draw_polygon(5)     #画一个五边形
turtle.done()

基于Python中的turtle绘画星星和星空

二、画五角星

五角星每个角的度数都是 36 度,用 180 - 36 得到对应的补角为 144 度。

如下图所示:

基于Python中的turtle绘画星星和星空

五角星的五条线的长度是一样的,并且角度也一样。那么,我们就可以用循环来画五角星。五角星要画 5 条线,因此要循环 5 次。每次循环都除了画一条线,还要旋转特定的角度。从上图可知,每次向右旋转 144 度即可。

所以画五角星的代码如下:

import turtle
 
turtle.color('red')  # 画笔颜色和填充颜色都设为红色
turtle.hideturtle()  #隐藏小海龟
 
turtle.begin_fill()  #开始填充
for i in range(5):
  turtle.forward(100)#向前走100像素
  turtle.right(144)  #右转144度
turtle.end_fill()    #结束填充

基于Python中的turtle绘画星星和星空

打印出结果其实上图五角星不在画板中央,我们将它移动到画板中央

注意:(-50, 20) 只是针对边长 100 像素的五角星,不要随意修改边长。

import turtle
 
turtle.color('red')
turtle.hideturtle()
turtle.penup()
turtle.goto(-50,20)
turtle.pendown()
 
turtle.begin_fill()
for i in range(5):
  turtle.forward(100)
  turtle.right(144)
turtle.end_fill()
turtle.done()

三、一闪一闪亮晶晶

我们来画一堆星星,实现“一闪一闪亮晶晶,满天都是小星星”的效果~✨ 

因为画的星星比较多,我们先把之前画五角星的代码封装成一个函数:

import turtle
 
def draw_star():
  turtle.color('white')
  turtle.hideturtle()
  turtle.begin_fill()
  for i in range(5):
    turtle.forward(10)
    turtle.right(144)
  turtle.end_fill()

星星的光是白色的,因此我将颜色设置成了白色(white)。并且,因为是小星星,我将边长设成了 10 像素。画一个小星星的方法搞定了,接下来是画满天星,就画 50 个吧!

满天星的位置都是随机的,我们需要用到 random 模块生成随机位置。因为教学环境中显示区域有限,随机位置在 x 轴上的范围是 -150 到 150,在 y 轴上的范围是 -100 到 100。

随机画 50 颗小星星的代码如下:

import turtle
from random import randint
 
def draw_star():
  turtle.color('white')
  turtle.hideturtle()
  turtle.begin_fill()
  for i in range(5):
    turtle.forward(10)
    turtle.right(144)
  turtle.end_fill()
 
for i in range(50):
  turtle.speed(0)  # 最快速
  turtle.penup()
  x = randint(-150, 150)  # x 轴
  y = randint(-100, 100)  # y 轴
  turtle.goto(x, y)
  turtle.pendown()
  draw_star()

应该注意到了 turtle.speed(0) 这行代码,这是控制绘图速度的。因为画 50 颗小星星耗时较久,所以要加快绘图速度。 turtle.speed(0) 的参数是 0-10 的整数,其中 1-10 数字越大,绘图速度越快。1 最慢,10 最快,默认是 6。而 0 表示没有动画效果,因此 0 比 10 的速度还要快。

满天星画完了,我们最后再署个名。调用turtle.write() 可以在画板上写字,参数为要写的内容。我们还能设置字的字体、大小等,比如 turtle.write('By 黄帮主', font = ('SimHei', 12, 'bold'))。font 参数是个元组,其中第一个是字体,第二个是字体大小,最后一个是字重。

为了让文字更清晰可见,我将字体设置成了黑体!12 像素!加粗!完整的代码如下:

import turtle
from random import randint
 
def draw_star():
  # 补全画一颗星星的代码
  turtle.color('red')
  turtle.hideturtle()
  turtle.begin_fill()
  for i in range(5):
    turtle.forward(10)
    turtle.right(144)
  turtle.end_fill()
  
 
# 将 ??? 改成你想画的星星个数
for i in range(50):
  turtle.speed(0)
  turtle.penup()
  x = randint(-150, 150)
  y = randint(-100, 100)
  turtle.goto(x, y)
  turtle.pendown()
  draw_star()
 
turtle.penup()
turtle.goto(0, -130)
turtle.pendown()
turtle.write('一闪一闪亮晶晶',  font = ('SimHei', 12, 'bold'))
turtle.done()

最终结果:

基于Python中的turtle绘画星星和星空

来源:https://blog.csdn.net/weixin_43734080/article/details/123243039

标签:Python,turtle,星星,星空
0
投稿

猜你喜欢

  • 实例讲解如何利用crontab定时备份MySQL

    2009-01-04 13:06:00
  • Anaconda下Python中GDAL模块的下载与安装过程

    2022-08-30 04:49:54
  • selenium+python自动化测试之环境搭建

    2022-05-15 13:51:32
  • Python matplotlib画图时图例说明(legend)放到图像外侧详解

    2021-03-05 13:42:45
  • 动态加载JavaScript的小实践

    2009-11-12 12:38:00
  • Python随机生成数模块random使用实例

    2022-08-04 21:04:48
  • 在SQL Server中使用CLR调用.NET方法

    2008-12-24 15:43:00
  • Python pip 安装与使用(安装、更新、删除)

    2022-07-30 01:58:19
  • python列表中常见的一些排序方法

    2023-08-17 08:48:45
  • asp利用aspjpeg给图片生成PNG透明水印

    2009-03-20 14:01:00
  • Python3 实现爬取网站下所有URL方式

    2022-03-28 07:12:37
  • SqlServer参数化查询之where in和like实现之xml和DataTable传参介绍

    2012-05-22 18:38:49
  • mysql 获取表有多少列

    2010-10-14 13:44:00
  • PHP htmlentities()函数用法讲解

    2023-06-04 14:47:30
  • 如何使用Python+ChatGPT批量生成论文

    2023-10-01 20:30:17
  • sqlserver 脚本和批处理指令小结

    2012-05-22 18:56:55
  • Mysql的服务无法启动的1067错误解决

    2012-01-05 19:31:56
  • 浅析PHP中的字符串编码转换(自动识别原编码)

    2023-09-08 08:04:44
  • 清除代码异味

    2011-05-21 08:34:00
  • KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定

    2023-08-13 03:12:44
  • asp之家 网络编程 m.aspxhome.com