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使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操