Python绘制分形图

2024-03-29 22:44
文章标签 python 绘制 分形

本文主要是介绍Python绘制分形图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Python绘制分形图

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

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

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, 0if 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, 0cx = 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:breakzx, 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 sqrtdef koch_line(canvas, p1, p2, level):if level == 0:canvas.create_line(p1, p2)else:dx = (p2[0] - p1[0]) / 3dy = (p2[1] - p1[1]) / 3p3 = (p1[0] + dx, p1[1] + dy)p5 = (p1[0] + 2*dx, p1[1] + 2*dy)x = p3[0] + (dx - dy * sqrt(3)) / 2y = p3[1] + (dx * sqrt(3) + dy) / 2p4 = (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 tkdef 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) / 2y12 = (y1 + y2) / 2x23 = (x2 + x3) / 2y23 = (y2 + y3) / 2x31 = (x3 + x1) / 2y31 = (y3 + y1) / 2sierpinski_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

这篇关于Python绘制分形图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859839

相关文章

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re