Python绘制动态树形:实现分形树动画

news2024/11/17 16:27:34

文章目录

    • 引言
    • 准备工作
      • 前置条件
    • 代码实现与解析
      • 导入必要的库
      • 初始化Turtle
      • 绘制分形树函数
      • 动态绘制函数
      • 主函数
    • 完整代码

在这里插入图片描述

引言

分形树是一种通过递归生成的美丽图案,在数学和计算机图形学中有着重要的地位。在这篇博客中,我们将使用Python创建一个动态的分形树动画。通过利用Turtle库,我们可以实现一个逐步绘制分形树的动画效果。

准备工作

前置条件

在开始之前,你需要确保你的系统已经安装了Turtle库。Turtle库通常随Python标准库一起提供,无需额外安装。如果你还没有安装它,可以使用以下命令进行安装:

pip install PythonTurtle

Turtle是Python的一个标准绘图库,适合于初学者和儿童,用于绘制简单的图形和实现复杂的图案。

代码实现与解析

导入必要的库

我们首先需要导入Turtle库和其他必要的模块:

import turtle
import random
import time

初始化Turtle

我们需要初始化Turtle并设置屏幕的基本参数:

# 初始化Turtle
screen = turtle.Screen()
screen.setup(width=800, height=600)
screen.bgcolor("black")
screen.title("分形树动画")

# 初始化画笔
pen = turtle.Turtle()
pen.speed(0)
pen.color("green")
pen.hideturtle()
pen.left(90)
pen.up()
pen.goto(0, -250)
pen.down()

绘制分形树函数

我们定义一个递归函数来绘制分形树:

def draw_tree(branch_length, pen):
    if branch_length > 5:
        pen.forward(branch_length)
        angle = random.randint(15, 45)
        pen.right(angle)
        draw_tree(branch_length - random.randint(10, 20), pen)
        pen.left(2 * angle)
        draw_tree(branch_length - random.randint(10, 20), pen)
        pen.right(angle)
        pen.backward(branch_length)

动态绘制函数

我们定义一个函数来动态绘制分形树,使动画效果更加明显:

def draw_dynamic_tree(branch_length, pen):
    if branch_length > 5:
        pen.forward(branch_length)
        angle = random.randint(15, 45)
        pen.right(angle)
        draw_dynamic_tree(branch_length - random.randint(10, 20), pen)
        pen.left(2 * angle)
        draw_dynamic_tree(branch_length - random.randint(10, 20), pen)
        pen.right(angle)
        pen.backward(branch_length)
        time.sleep(0.02)  # 延迟以显示动画效果

主函数

我们在主函数中调用绘制分形树的函数:

def main():
    draw_dynamic_tree(100, pen)
    screen.mainloop()

if __name__ == "__main__":
    main()

完整代码

import turtle
import random
import time

# 初始化Turtle
screen = turtle.Screen()
screen.setup(width=800, height=600)
screen.bgcolor("black")
screen.title("分形树动画")

# 初始化画笔
pen = turtle.Turtle()
pen.speed(0)
pen.color("green")
pen.hideturtle()
pen.left(90)
pen.up()
pen.goto(0, -250)
pen.down()

# 绘制分形树函数
def draw_tree(branch_length, pen):
    if branch_length > 5:
        pen.forward(branch_length)
        angle = random.randint(15, 45)
        pen.right(angle)
        draw_tree(branch_length - random.randint(10, 20), pen)
        pen.left(2 * angle)
        draw_tree(branch_length - random.randint(10, 20), pen)
        pen.right(angle)
        pen.backward(branch_length)

# 动态绘制函数
def draw_dynamic_tree(branch_length, pen):
    if branch_length > 5:
        pen.forward(branch_length)
        angle = random.randint(15, 45)
        pen.right(angle)
        draw_dynamic_tree(branch_length - random.randint(10, 20), pen)
        pen.left(2 * angle)
        draw_dynamic_tree(branch_length - random.randint(10, 20), pen)
        pen.right(angle)
        pen.backward(branch_length)
        time.sleep(0.02)  # 延迟以显示动画效果

# 主函数
def main():
    draw_dynamic_tree(100, pen)
    screen.mainloop()

if __name__ == "__main__":
    main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1891852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】union 关键字

在C语言中,union关键字用于定义联合体。联合体是一种特殊的数据结构,它允许不同的数据类型共享同一段内存。所有联合体成员共享同一个内存位置,因此联合体的大小取决于其最大成员的大小。 定义和使用联合体 基本定义 定义一个联合体类型时…

【NOI-题解】1372. 活动选择1456. 淘淘捡西瓜1485. 接水问题

文章目录 一、前言二、问题问题:1372. 活动选择问题:1456. 淘淘捡西瓜问题:1485. 接水问题 三、感谢 一、前言 本章节主要对贪心问题进行讲解,包括《1372. 活动选择》《1456. 淘淘捡西瓜》《1485. 接水问题》题目。 二、问题 问…

Pandas函数详解:案例解析(第25天)

系列文章目录 Pandas函数详解排序函数聚合函数缺失值处理日期函数 文章目录 系列文章目录前言1 索引和列名操作1.1 查看索引和列名1.2 修改索引和列名 2 常用计算函数2.1 排序函数2.2 聚合函数2.3 练习 3 缺失值处理3.1 缺失值概念3.2 加载包含缺失值数据3.3 查看缺失值3.4 缺失…

无人机集群协同搜索研究综述

源自:指挥控制与仿真 作者:刘圣洋, 宋婷, 冯浩龙, 孙玥, 韩飞 注:若出现无法显示完全的情况,可 V 搜索“人工智能技术与咨询”查看完整文章 摘要 无人机集群协同区域搜索能够有效地获取任务区域地面信息,降低环境不确定度。基…

【操作系统】操作系统运行环境——处理器的运行模式

处理器的运行模式 导读一、内核程序和应用程序二、特权指令与非特权指令三、用户态与核心态四、内核4.1 时钟管理4.2 中断机制4.3 原语4.4 系统控制的数据结构及处理 结语 导读 大家好,很高兴又和大家见面啦!!! 在上一篇内容中我…

高校教师教学质量评估系统-计算机毕业设计源码03344

摘要 在高等教育中,教学质量是培养优秀人才的关键。为了提高教学质量,高校需要建立一套科学、有效的教师教学质量评估系统。本研究采用 SSM技术框架,旨在开发一款高校教师教学质量评估系统。 SSM框架作为一种成熟的Java开发框架,具…

echarts--Tree的label上添加图片

使用echarts的rich富文本,配合lable的formatter去实现 主要代码:label里 rich: {img1: {backgroundColor: {image: Cloudy,},height: 40}},formatter: function (param) {var res "";res {img1|} param.name;return res;}, 如果想要哪一节…

基于贝叶斯优化的卷积神经网络-循环神经网络混合模型的的模拟股票时间序列预测(MATLAB R2021B)

将机器学习和深度学习方法运用到股市分析中, 不仅具有一定的理论价值, 也具有一定的实践价值。从理论价值上讲, 中国的量化投资技术(投资观念、方法与决策等)还不够成熟, 尚处在起步阶段, 能够将量化投资技术运用到投资决策中的公司寥寥无几。目前, 国内…

程序员学CFA——经济学(五)

经济学(五) 货币政策与财政政策基本术语货币政策货币货币的功能货币的定义货币的创造过程货币的供给和需求费雪效应 中央银行中央银行的职能中央银行的目标与通货膨胀的成本中央银行的有效性 货币政策工具货币传导机制货币政策的目标与形式货币政策的目标…

AIGC时代算法工程师的面试秘籍(2024.6.10-6.23第十六式) |【三年面试五年模拟】

写在前面 【三年面试五年模拟】旨在整理&挖掘AI算法工程师在实习/校招/社招时所需的干货知识点与面试方法,力求让读者在获得心仪offer的同时,增强技术基本面。也欢迎大家提出宝贵的优化建议,一起交流学习💪 欢迎大家关注Rocky…

还以网站建设为主营?赶紧转!除非你的网站做比他们还漂亮

案例一:某上市公司2019年找A公司做了一个官网,网站做了三年多,到现在没有上线,该公司业务没受任何影响,一直蒸蒸高日上。案例二:我公司也有自己官网,这么多年页面啥流量,一样不影响我…

001:开源交易系统开发实战开篇

本专栏采用融入【主力思维】的方法学,包含数据抓取、特征模型开发、历史验证回归测试、每日动态风险评估管理等技术,较大的增强股票投资胜率,让IT开发者拥有一套实用的属于自己思路的专用交易软件。 先简要介绍下系统运行的成果和项目架构&a…

这玩意终于有免费的了———Navicat Premium Lite

免费啦!!!X!!! 免费啦!!!X!!! 免费啦!!!X!!! 去下载吧&…

uniapp应用如何实现传感器数据采集和分析

UniApp是一种跨平台的应用开发框架,它支持在同一份代码中同时开发iOS、Android、H5等多个平台的应用。在UniApp中实现传感器数据采集和分析的过程可以分为以下几个步骤: 引入相关插件或库 UniApp通过插件或库的形式扩展功能。对于传感器数据采集和分析&…

无人机对地面运动目标定位---获取目标的移动方向和速度

目录 一、引子 我们利用单目无人机通过等时间间隔拍照的形式对地面某移动目标进行定位,当前,我们已经获得了每张相片上该目标的三维坐标,并且知道该无人机在飞行过程中拍照的时间间隔,那么我们就可以通过一定的计算,得…

Docker学习笔记(一)概念理解

一、什么是docker容器 Docker容器是一种轻量级、可移植的软件封装技术,它允许开发者将应用程序及其依赖、配置文件、运行环境等打包到一个独立的、自包含的执行单元中。容器与虚拟机相似,都提供了隔离的运行环境,但容器更加轻量级&#xff0c…

职业本科扩容:教育改革的新篇章与挑战

高考结束后,李文莉同学并没有如释重负的感觉,因为她正在为选学校、选专业而纠结。幸运的是,今年我国职业本科院校又增加了十多所,这对学习成绩稍差、但动手能力较强的她来说,无疑是个好消息。这几天,她已将…

《数字图像处理与机器视觉》案例四 基于分水岭算法的粘连物体的分割与计数

一、引言 分水岭算法(Watershed Algorithm),是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影…

【Python123题库】#判断闰年 #判断奇偶数 #分段函数A

禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/140079827 参考教程:B站视频讲解——https://space.bilibili.com/3546616042621301 有帮助麻烦点个赞 ~ ~ Python123题库 判断闰年判断奇偶数分段函数A 判断闰年 类型&am…

静态方法与实例方法的区别

静态方法与实例方法的区别 1、静态方法(Static Methods)1.1 调用方式1.2 访问权限 2、实例方法(Instance Methods)2.1 调用方式2.2 访问权限 3、总结 💖The Begin💖点点关注,收藏不迷路&#x1…