Python Mandelbrot 集绘制代码及注释 - 探索数学之美
以下是绘制 Mandelbrot 集的 Python 代码和注释:
import numpy as np
from PIL import Image
# 设置图像大小和复数平面区域
width, height = 1000, 1000
xmin, xmax = -2, 1
ymin, ymax = -1.5, 1.5
# 创建一个空白图像
img = Image.new('RGB', (width, height), color='white')
# 迭代计算每个像素点的颜色
for x in range(width):
for y in range(height):
# 将像素坐标转换为复数平面坐标
z = complex(xmin + (xmax - xmin) * x / width, ymin + (ymax - ymin) * y / height)
c = z
# 最多迭代 100 次
for i in range(100):
if abs(z) > 2:
# 如果复数平面上的点 z 距离原点的距离大于 2,那么它一定不在 Mandelbrot 集合内,退出循环
break
z = z ** 2 + c
# 用迭代次数作为像素点的颜色值
color = (i * 255 // 100, i * 255 // 100, i * 255 // 100)
# 将像素点的颜色设置到图像上
img.putpixel((x, y), color)
# 保存图像
img.save('mandelbrot.png')
代码解释:
- 导入必要的库:numpy 和 PIL
- 设置图像大小和复数平面区域的范围
- 创建一个空白图像
- 使用双重循环迭代计算每个像素点的颜色
- 将像素坐标转换为复数平面坐标
- 设置初始迭代值 c 为当前像素点的复数平面坐标 z
- 对该点进行最多 100 次迭代计算
- 如果复数平面上的点 z 距离原点的距离大于 2,那么它一定不在 Mandelbrot 集合内,退出循环
- 用迭代次数作为像素点的颜色值,越多次迭代的点颜色越亮
- 将像素点的颜色设置到图像上
- 保存图像
最终生成的图像是 Mandelbrot 集合的可视化,其中黑色部分是 Mandelbrot 集合内的点,白色部分是不在集合内的点。
原文地址: https://www.cveoy.top/t/topic/oRqb 著作权归作者所有。请勿转载和采集!