分形(Fractals)是一种在自然界中普遍存在的复杂图形,它们具有自相似性和递归性,这里我们以经典的曼德勃罗特集(Mandelbrot set)为例,给出一个使用Python编写的简单分形生成源码。
我们需要安装numpy
和matplotlib
库,可以使用以下命令安装:
pip install numpy matplotlib
我们编写代码:
import numpy as np import matplotlib.pyplot as plt def mandelbrot_set(xmin, xmax, ymin, ymax, width, height, max_iter): """ 计算曼德勃罗特集 :param xmin: x轴最小值 :param xmax: x轴最大值 :param ymin: y轴最小值 :param ymax: y轴最大值 :param width: 图像宽度 :param height: 图像高度 :param max_iter: 最大迭代次数 :return: 返回一个包含图像数据的二维数组 """ # 初始化图像数据 image = np.zeros((height, width)) # 计算每个像素点的坐标范围 x_range = np.linspace(xmin, xmax, width) y_range = np.linspace(ymin, ymax, height) # 遍历每个像素点 for i in range(width): for j in range(height): # 获取当前像素点的坐标 x, y = x_range[i], y_range[j] # 初始化复数 z 的值 zx, zy = 0, 0 # 迭代计算 for k in range(max_iter): # 更新 z 的值 zx, zy = zx * zx zy * zy + x, 2 * zx * zy + y # z 的模长大于 2,跳出循环 if zx * zx + zy * zy > 4: break # 根据迭代次数设置像素值 image[j, i] = k return image def plot_image(image): """ 绘制图像 :param image: 包含图像数据的二维数组 """ plt.imshow(image, cmap='hot', extent=[2.5, 1.5, 1.5, 1.5]) plt.colorbar() plt.show() if __name__ == '__main__': # 设置参数 xmin, xmax = 2.5, 1.5 ymin, ymax = 1.5, 1.5 width, height = 800, 600 max_iter = 256 # 计算曼德勃罗特集 image = mandelbrot_set(xmin, xmax, ymin, ymax, width, height, max_iter) # 绘制图像 plot_image(image)
这段代码首先定义了一个mandelbrot_set
函数,用于计算曼德勃罗特集,然后定义了一个plot_image
函数,用于绘制图像,最后在主程序中调用这两个函数,生成并显示曼德勃罗特集图像。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1080000.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复