用Python标准GUI库Tkinter绘制分形图

用Python标准GUI库Tkinter绘制分形图

分形图是一种通过迭代规则生成自相似图案的艺术形式。

分形图包括曼德勃罗集、科赫曲线、谢尔宾斯基三角等代码等。

Tkinter是Python的标准GUI库,可以用于创建窗口、控件和其他图形界面元素。绘制分形图像,如曼德勃罗集或科赫曲线,通常需要利用递归和迭代的数学原理。需要注意的是,绘制分形图可能需要一些时间,尤其是当分形的迭代等级变高时。

下面使用Python的标准GUI库Tkinter实现曼德勃罗集、科赫曲线、谢尔宾斯基三角。

一、曼德勃罗集

先给出效果图

源码如下:

import tkinter as tk

# 设置画布大小和坐标范围
width, height = 400, 400
x_min, x_max = -2.0, 1.0
y_min, y_max = -1.5, 1.5

# 定义颜色映射函数
def color_map(n, max_iter):
    r, g, b = 0, 0, 0
    if n < max_iter:
        r = int((n / max_iter) * 255)
        g = int((n / max_iter) * 255)
        b = int((n / max_iter) * 255)
    return "#{:02x}{:02x}{:02x}".format(r, g, b)

# 绘制曼德勃罗集
def mandelbrot(canvas):
    max_iter = 100  # 最大迭代次数

    for x in range(width):
        for y in range(height):
            zx, zy = 0, 0
            cx = x_min + (x / width) * (x_max - x_min)
            cy = y_min + (y / height) * (y_max - y_min)
            c = complex(cx, cy)

            for i in range(max_iter):
                if abs(zx + zy) > 2.0:
                    break
                zx, zy = zx * zx - zy * zy + cx, 2.0 * zx * zy + cy

            # 绘制像素点并填充颜色
            color = color_map(i, max_iter)
            canvas.create_rectangle(x, y, x + 1, y + 1, fill=color, outline="")

# 创建窗口和画布
window = tk.Tk()
canvas = tk.Canvas(window, width=width, height=height)
canvas.pack()

# 调用绘制函数
mandelbrot(canvas)

# 运行窗口主循环
window.mainloop()

提示:这个分形图从运行到出图有点慢——需要一些时间。

二、科赫曲线

先给出效果图

源码如下:

# 科赫曲线
import tkinter as tk
from math import sqrt

def koch_line(canvas, p1, p2, level):
    if level == 0:
        canvas.create_line(p1, p2)
    else:
        dx = (p2[0] - p1[0]) / 3
        dy = (p2[1] - p1[1]) / 3
        
        p3 = (p1[0] + dx, p1[1] + dy)
        p5 = (p1[0] + 2*dx, p1[1] + 2*dy)
        x = p3[0] + (dx - dy * sqrt(3)) / 2
        y = p3[1] + (dx * sqrt(3) + dy) / 2
        p4 = (x, y)
        
        koch_line(canvas, p1, p3, level - 1)
        koch_line(canvas, p3, p4, level - 1)
        koch_line(canvas, p4, p5, level - 1)
        koch_line(canvas, p5, p2, level - 1)

def draw_koch_snowflake():
    root = tk.Tk()
    root.title("Koch Snowflake")
    canvas = tk.Canvas(root, width=650, height=650, bg="white")
    canvas.pack()
    
    p1 = (100, 500)
    p2 = (500, 500)
    p3 = (300, 500 - (400 * sqrt(3) / 2))
    
    koch_line(canvas, p1, p2, 4)
    koch_line(canvas, p2, p3, 4)
    koch_line(canvas, p3, p1, 4)
    
    root.mainloop()

draw_koch_snowflake()

三、谢尔宾斯基三角

先给出效果图

源码如下:

# 谢尔宾斯基三角
import tkinter as tk

def sierpinski_triangle(canvas, vertices, level):
    x1, y1 = vertices[0]
    x2, y2 = vertices[1]
    x3, y3 = vertices[2]
    
    if level == 0:
        canvas.create_polygon(x1, y1, x2, y2, x3, y3, fill="black")
    else:
        x12 = (x1 + x2) / 2
        y12 = (y1 + y2) / 2
        x23 = (x2 + x3) / 2
        y23 = (y2 + y3) / 2
        x31 = (x3 + x1) / 2
        y31 = (y3 + y1) / 2
        
        sierpinski_triangle(canvas, [(x1, y1), (x12, y12), (x31, y31)], level - 1)
        sierpinski_triangle(canvas, [(x12, y12), (x2, y2), (x23, y23)], level - 1)
        sierpinski_triangle(canvas, [(x31, y31), (x23, y23), (x3, y3)], level - 1)

root = tk.Tk()
root.title("Sierpinski Triangle")
canvas = tk.Canvas(root, width=600, height=520, bg="white")
canvas.pack()
sierpinski_triangle(canvas, [(300, 20), (20, 500), (580, 500)], 5)
root.mainloop()

附录

Python 分形算法__代码里开出来的艺术之花https://zhuanlan.zhihu.com/p/489274872

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库---------完全备份和增量备份的数据恢复,以及断点恢复

目录 一、在数据库表中&#xff0c;分三次录入学生考试成绩 1.1先创建库&#xff0c;创建表&#xff0c;完成三次数据的录入 1.2首次录入成绩后&#xff0c;做该表的完全备份 1.3第二次插入后 做增量备份 1.4第三次插入后 做增量备份 二、模拟数据丢失&#xff0c;并使用…

【Ubuntu】用 VMware 安装 macOS

本教程使用 Ubuntu 20.04.6 LTS&#xff0c;VMware Workstation Pro 17.5.1&#xff0c;macOS Sonoma 14.4。文中所有需要的下载链接均以 Markdown 的形式体现在文字上。 下载 VMware Workstation Pro&#xff0c;目前最新版本是 17.5.1。 使用密钥&#xff0c;进行破解。 VM…

苹果应用上架流程解析

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍&#xff1a;1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…

如何使用免费的ChatGpt3.5

如何使用免费的ChatGpt 最近免费的gpt3.5很多都不怎么行了实在是太给力了尾声 最近免费的gpt3.5很多都不怎么行了 原因是什么呢&#xff1f;因为openai已经取消了免费的5刀赠送&#xff0c;那么这些人手上的免费的sses-key 用完后&#xff0c;就基本上全军覆没了&#xff0c;再…

从零开始学Python数据分析:菜鸟也能成高手(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

分类预测 | Matlab实现CNN-GRU-Mutilhead-Attention卷积神经网络-门控循环单元融合多头注意力机制多特征分类预测

分类预测 | Matlab实现CNN-GRU-Mutilhead-Attention卷积神经网络-门控循环单元融合多头注意力机制多特征分类预测 目录 分类预测 | Matlab实现CNN-GRU-Mutilhead-Attention卷积神经网络-门控循环单元融合多头注意力机制多特征分类预测分类效果基本介绍模型描述程序设计参考资料…

Proteus 12V to 5V buck电路仿真练习及遇到的一些问题汇总

基础电路仿真实验记录贴&#xff01;&#xff01;&#xff01;如有写的不对的地方欢迎交流指正&#xff01;&#xff01;&#xff01; 平台&#xff1a;PC win10 软件&#xff1a;Proteus8.10 仿真目标&#xff1a;buck降压电路&#xff08;PWM控制输出电压&#xff09; 写在…

zabbix通过jmx监控Tongweb7企业版(by lqw)

一.tongweb配置相关启动参数 参考Zabbix 监控 Tomcat 服务 可以在控制台页面&#xff0c;或者在tongweb的安装目录的bin目录下&#xff0c;找到external.vmoptions&#xff0c;进行配置&#xff1a; 配置内容如下&#xff1a; -Dcom.sun.management.jmxremote -Dcom.sun.mana…

邀请媒体采访报道对企业宣传有何意义?

传媒如春雨&#xff0c;润物细无声的&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 邀请媒体采访报道对企业宣传具有多重意义&#xff1a; 提升品牌知名度和曝光度&#xff1a;媒体是信息传播的重要渠道&#xff0c;通过媒体的报道&#xff0c;企业及其活动、产品能够…

Methotrexate ELISA kit(甲氨蝶呤ELISA试剂盒),比色竞争法免疫测定试剂盒

甲氨蝶呤(Methotrexate)是一种治疗癌症和自身免疫性疾病的药物&#xff0c;可以通过抑制叶酸代谢阻止细胞代谢。甲氨蝶呤有两种不同的作用机制。在癌症治疗中&#xff0c;甲氨蝶呤通过阻断叶酸的结合&#xff0c;竞争性地抑制二氢叶酸还原酶(DHFR)。DHFR将二氢叶酸转化为活性四…

干货分享|PyTorch 2.0 GPU开发环境搭建

在搭建PyTorch深度学习开发环境时&#xff0c;Python运行环境安装完毕后&#xff0c;接下来的重点就是安装PyTorch 2.0。由于CPU版本的PyTorch相对GPU版本的PyTorch来说&#xff0c;运行速度较慢&#xff0c;我们推荐安装GPU版本的PyTorch。 1. Nvidia 10/20/30/40系列显卡选择…

java数据结构与算法刷题-----LeetCode127. 单词接龙

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 广度优先双分裂蛇 广度优先双分裂蛇 解题思路&#xff1a;时间复…

前端学习<二>CSS基础——15-Sass入门

Sass简介 大家都知道&#xff0c;js 中可以自定义变量&#xff0c;css 仅仅是一个标记语言&#xff0c;不是编程语言&#xff0c;因此不可以自定义变量、不可以引用等等。 面对这些问题&#xff0c;我们现在来引入 Sass&#xff0c;简单的说&#xff0c;他是 css 的升级版&am…

1.10 类、方法、封装、继承、多态、装饰器

一、介绍类 类(class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例 实例化&#xff1a;创建一个类的实例&#xff0c;类的具体对象。 对象&#xff1a;通过类定义的数据结构实例。对象包括两个数据成员&#x…

mysql 本地电脑服务部署

前提&#xff1a; 下载mysql 新建配置文档 在安装mysql目录新建 my.ini [mysqld] # 设置3306端口 port3306#设置mysql的安装目录 basedirC:\Program Files\MySQL\MySQL Server 8.3 #切记此处一定要用双斜杠\\,单斜杠我这里会出错&#xff0c;不过看别人的教程&#xff0c;有…

使用Pilotfish扩展Sui执行能力

Pilotfish第一个多机智能合约执行引擎&#xff0c;使Sui网络的验证节点可以利用多台机器&#xff0c;并在负载增加时自动扩展以执行更多的交易。这一目标实现不会影响可靠性或功能完整性。 Pilotfish可以从内部执行机器的故障中恢复&#xff0c;并支持Sui的全面动态操作。其流…

openstack云计算(一)————openstack安装教程,创建空白虚拟机,虚拟机的环境准备

1、创建空白虚拟机 需要注意的步骤会截图一下&#xff0c;其它的基本都是下一步&#xff0c;默认的即可 ----------------------------------------------------------- 2、在所建的空白虚拟机上安装CentOS 7操作系统 &#xff08;1&#xff09;、在安装CentOS 7的启动界面中…

杨元庆:AI是创新者的赛跑,必须打造自研自创产品

在2024/25财年誓师大会上&#xff0c;联想集团董事长兼CEO杨元庆宣布公司未来十年的新使命——引领人工智能变革。在杨元庆看来&#xff0c;这次誓师大会吹响了联想第五个十年征程集结号&#xff1a;在联想稳健穿越周期、恢复增长&#xff0c;迎来成立40周年的里程碑时刻&#…

【嵌入式智能产品开发实战】(十二)—— 政安晨:通过ARM-Linux掌握基本技能【C语言程序的安装运行】

目录 程序的安装 程序安装的本质 在Linux下制作软件安装包 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 嵌入式智能产品开发实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xf…

机器学习 -- 随机森林DEMO

场景 之前看一些歌手或者演员选取节目的时候&#xff0c;上面不是一个评委&#xff0c;少则三五个&#xff0c;多则几十个&#xff0c;当做重要决定时&#xff0c;大家可能都会考虑吸取多个专家而不只是一个人的意见。机器学习也是一样的&#xff0c;机器学习中分为两种&#…