首页 > 编程语言 >用 Python + turtle 模块绘制五星红旗

用 Python + turtle 模块绘制五星红旗

时间:2023-06-10 16:24:50浏览次数:36  
标签:turtle 函数 Python national flag 五星红旗 五角星 绘制

用 Python 绘制五星红旗

在这个代码示例中,我将介绍如何使用 Python 的 turtle 模块绘制五星红旗。turtle 模块是一个图形库,可以轻松地在 Python 中实现简单的绘图功能。

导入模块

首先,我们需要导入 turtle 模块和 math 模块,以便能够使用数学函数来计算五角星的边长、比例尺等参数。

import turtle
import math

创建画布和画笔对象

接下来,我们创建一个画笔对象,并设置画布大小、标题和背景颜色等属性。

t = turtle.Pen()
canvas_width = 1000
canvas_height = 700
t.speed(6)
screen = turtle.Screen()
screen.title('祖国万岁')
screen.setup(canvas_width, canvas_height)
screen.bgcolor('red')

在上述代码中,我们使用 turtle.Pen() 函数创建一个名为 t 的画笔对象,并设置其绘图速度为 6。然后,我们创建一个 Screen 对象,并设置其标题和背景颜色等属性。最后,我们使用 setup() 函数设置画布的宽度和高度。

定义函数

在本示例中,我们定义了三个函数:

  • side_length(diameter):该函数用于根据五角星直径计算出五角星的边长。
  • scale(diameter):该函数用于计算比例尺,以便在画布上绘制五角星。
  • star(diameter, angle):该函数用于绘制一个五角星。

我们可以使用这些函数来计算五角星的相关参数,并绘制五角星。

绘制五角星

接下来,我们定义一个名为 national_flag() 的函数来绘制五角星红旗。该函数接受四个参数:

  • x:大五角星的直径。
  • y:大五角星距离画布顶端的距离。
  • z:小五角星的直径。
  • h:小五角星与 x 轴正半轴之间的夹角。

函数内部通过调用 star() 函数来绘制五角星。最后,我们使用 national_flag() 函数来绘制五星红旗的所有五角星。

def national_flag(x, y, z, h):
    # 将画笔移动到指定位置并绘制五角星
    t.up()
    t.goto(-scale(x), scale(y))
    t.down()
    t.pencolor('yellow')  # 将画笔颜色设置为黄色
    star(z, h)

# 绘制五星红旗
national_flag(10, 5, 6, 180 - 18)  # 绘制大五角星
national_flag(5, 8, 2, spin(3, 5) + 180)  # 绘制第一颗小五角星
national_flag(3, 6, 2, spin(1, 7) + 180)  # 绘制第二颗小五角星
national_flag(3, 3, 2, 180 - spin(2, 7))  # 绘制第三颗小五角星
national_flag(5, 1, 2, 180 - spin(4, 5))  # 绘制第四颗小五角星

完成绘制

最后,我们使用 hideturtle() 函数隐藏画笔,并使用 turtle.done() 函数等待用户关闭窗口,即可完成五星红旗的绘制。

t.hideturtle()  # 隐藏画笔,完成绘制
turtle.done()  # 等待用户关闭窗口

完整代码

# 导入 turtle 模块和 math 模块
import turtle
import math

# 创建画笔对象并设置绘图速度、画布大小、窗口标题和背景颜色等
t = turtle.Pen()
canvas_width = 1000
canvas_height = 700
t.speed(6)
screen = turtle.Screen()
screen.title('祖国万岁')
screen.setup(canvas_width, canvas_height)
screen.bgcolor('red')


# 计算五角星边长和比例尺的函数
def side_length(diameter):
    return math.sin(math.radians(72)) * diameter * 30


def scale(diameter):  # 计算比例尺的函数
    return canvas_width / 30 * diameter


# 绘制五角星的函数
def star(diameter, angle):
    # 将画笔移动到五角星顶点处,并转向指定角度
    t.setheading(angle)
    t.forward(scale(diameter) / 2)
    t.setheading(angle - 180)
    t.left(18)

    # 开始填充黄色并绘制五角星轮廓
    t.begin_fill()
    t.fillcolor('yellow')  # 将填充颜色设置为黄色
    t.pencolor('yellow')  # 将线条颜色设置为黄色
    for i in range(5):
        t.forward(side_length(diameter))
        t.right(144)
    t.end_fill()


# 计算直线与 x 轴正半轴之间夹角的函数
def spin(x, y):
    return math.degrees(math.atan2(x, y))


# 绘制五角星的函数
def national_flag(x, y, z, h):
    # 将画笔移动到指定位置并绘制五角星
    t.up()
    t.goto(-scale(x), scale(y))
    t.down()
    t.pencolor('yellow')  # 将画笔颜色设置为黄色
    star(z, h)


# 绘制五星红旗
national_flag(10, 5, 6, 180 - 18)  # 绘制大五角星
national_flag(5, 8, 2, spin(3, 5) + 180)  # 绘制第一颗小五角星
national_flag(3, 6, 2, spin(1, 7) + 180)  # 绘制第二颗小五角星
national_flag(3, 3, 2, 180 - spin(2, 7))  # 绘制第三颗小五角星
national_flag(5, 1, 2, 180 - spin(4, 5))  # 绘制第四颗小五角星

t.hideturtle()  # 隐藏画笔,完成绘制
turtle.done()  # 等待用户关闭窗口

标签:turtle,函数,Python,national,flag,五星红旗,五角星,绘制
From: https://www.cnblogs.com/Hang666/p/17471445.html

相关文章

  • Python 九九乘法表的多种实现方式
    简介九九乘法表是初学者学习编程的必要练手题目之一,因此各种语言都有对应的实现方式,而Python也不例外。在Python中,我们可以使用多种方式来生成一个简单的九九乘法表。本文共介绍了七种Python实现九九乘法表的方法,包括:双重循环for-for、双重循环while-while、循环嵌套whi......
  • Python实现Excel与Word文件中表格数据的导入导出
    问题描述:Excel文件“测试文件.xlsx”中有3个worksheet,每个worksheet中的行数和列数都不相同,要求把这3个worksheet中的数据导入到一个Word文件中,每个worksheet生成一个单独的表格,每个表格的样式不同。在Excel和Word之间,是支持表格直接复制的,如果数量少,可以直接复制,如果多的话,可以参......
  • Python+matplotlib绘制背景色和坐标轴刻度变化的动态柱状图
    问题描述:已知某商品从2000年至2019年每年12个月的价格波动情况,要求绘制动态柱状图进行可视化,要求每年改变一次轴域背景色。参考代码:运行效果:公众号“Python小屋”......
  • Python正则表达式常用flag含义与用法详解
    Python正则表达式模块re中很多函数都支持一个flag参数,用来对正则表达式进行补充说明,例如findall(pattern,string,flags=0)match(pattern,string,flags=0)search(pattern,string,flags=0)sub(pattern,repl,string,count=0,flags=0)split(pattern,string,maxsplit=0,fla......
  • Python+matplotlib绘制动态折线图
    问题描述:动态绘制折线图。参考代码:运行效果:公众号“Python小屋”......
  • Python+matplotlib实现鼠标跟随的动态距离标注
    问题描述:显示一幅图像,鼠标左键按下后移动时实时显示当前位置与鼠标按下时初始位置的直线距离,同时显示一条从初始位置到当前位置的红色直线。参考代码:运行效果:公众号“Python小屋”......
  • Python+matplotlib绘图时显示中文的设置方法
    在使用Python+matplotlib绘图时,默认不能显示中文字符,会显示为方块,例如下面的代码:上面代码绘制的图像如下,所有中文字符都显示为方块:如果要正常显示中文,可以使用matplotlib的rcParams设置font.family的值来统一设置中文字体,例如修改后代码生成的图像如下:通过rcParams还可以修改和设置......
  • Python+pandas处理Excel文件案例一则
    问题描述:使用pandas读取Excel文件中的数据,输出关系最好的两个演员名称,也就是共同参演电影数量最多的两个演员的名称。数据格式请参考Python统计共同参演电影最多的演员组合,Python+pandas读取Excel文件并统计演员参演电影数量技术要点:pandas二维表格DataFrame的用法。参考代码:输出结......
  • Python视频处理案例六则:旋转视频、调整音量/播放速度、淡入淡出、插入转场素材...
    环境配置请参考:Python视频处理案例三则:剪辑与拼接、提取音频、添加字幕==============应用1、旋转视频运行结果:应用2、调整视频中的音量应用3、视频中颜色变换应用4、调整播放速度,1.5倍速应用5、淡入淡出并插入转场视频应用6、淡入淡出并插入转场图片公众号“Python小屋”......
  • Python 3.x对MySQL数据库的常用操作
    首先安装MySQL,然后使用pipinstallpymysql安装扩展库,最后执行下面的代码。运行结果:公众号“Python小屋”......