Python 中的 Julia 分形
Python 中的 Julia 分形:简介
分形是有趣的数学实体,具有复杂且重复的模式。以法国数学家 Gaston Julia 命名的 Julia 分形就是这样一种迷人的分形。对复杂的整数迭代一个简单的数学函数会创建 Julia 分形。在数学和计算机图形学领域,它一直是研究和调查的主题。在本文中,我们将探索 Julia 分形的世界,并了解如何使用 Python 制作它们。
Python 中的 Julia 分形
定义
一个复杂的迭代函数充当 Julia 分形的公式。它是通过反复求解复平面上每个点的方程来创建的,如下所示 -
Z_{n+1} = Z_{n}^2 + C
此处,"Z_n"是迭代 n 时的复数,"Z_n+1"表示迭代 (n+1) 时的复数,"C"是指定分形结构的固定复数。由此产生的分形是通过根据达到给定幅度阈值所需的迭代次数对每个点进行颜色编码来创建的。使用不同的颜色来区分逃逸到无穷远处的点和仍然限制在一定范围内的点。
算法
步骤 1 - 定义最终图像的宽度和高度。
步骤 2 - 要更改分形的位置和放大倍数,请更改缩放级别、x 和 y 偏移量。
步骤 3 - 指定逃逸阈值和最大迭代次数。
步骤 4 - 应使用指定的参数调用"julia_fractal()"函数。
步骤 5 - 使用命令"plt.show()"查看已构建。
方法
方法 1 - 使用 matplotlib 库生成曼德布洛特集的图像。
方法 2 - 使用正弦函数通过 matplotlib 库生成曼德布洛特集的图像。
方法 1:使用 matplotlib 库生成曼德布洛特集的图像
示例
import numpy as np
from matplotlib import pyplot as plt
image_x = 400
image_y = 300
mesh_x = np.linspace(-2.5,1.5, num= image_x + 1)
mesh_y = np.linspace(-1.5,1.5, num= image_y + 1)
image = np.zeros((len(mesh_y), len(mesh_x)))
for i,y in enumerate(mesh_y):
for j, x in enumerate(mesh_x):
cr, ci = x,y
zr, zi = 0,0
count = 0
color = ‘black’
while count<= 50:
count = count + 1
z_mod_sq = zr*zr + zi*zi
if z_mod_sq > 4:
color = ‘white’
break
#zr + I zi = zr^2 – zi^2=2zrziI+ cr +I ci
zr, zi = (zr*zr – zi*zi + cr), (2*zr*zi + ci)
if color != ‘white’:
image[i][j] = 1
else:
image[i][j] = count
plt.imshow(image)
plt.show()
输出
代码中实现了曼德布洛特集,这是一种著名的数学分形。将函数迭代应用于复数并确定结果是逃逸到无穷大还是保持有界会产生曼德布洛特集。在此代码中,图像中的每个像素都由复平面上的复整数表示。对于每个像素,算法确定迭代函数是否可以在预定的迭代次数(本例中为 50 次)内达到无穷大。如果函数成功,则相关像素为白色;否则,为黑色。结果显示了曼德布洛特集的复杂和重复模式。
方法 2:使用 matplotlib 库和正弦函数生成曼德布洛特集的图像
示例
import numpy as np
from matplotlib import pyplot as plt
image_x = 400
image_y = 300
mesh_x = np.linspace(-2.5,1.5, num= image_x + 1)
mesh_y = np.linspace(-1.5,1.5, num= image_y + 1)
image = np.zeros((len(mesh_y), len(mesh_x)))
for i,y in enumerate(mesh_y):
for j, x in enumerate(mesh_x):
cr, ci = x,y
zr, zi = 0,0
count = 0
color = 'black'
while count<= 50:
count = count + 1
z_mod_sq = zr*zr + zi*zi
if z_mod_sq > 4:
color = 'white'
break
#zr + I zi = zr^2 – zi^2=2zrziI+ cr +I ci
zr, zi = (zr*zr – zi*zi + cr), (2*zr*zi + ci)
if color != ‘white’:
image[i][j] = 1
else:
import math
image[i][j] = int(math.sin(count) * 10)
plt.imshow(image)
plt.show()
输出
曼德布洛特集仍在代码中实现,尽管对未达到无穷大的像素的颜色分配进行了微小更改。更改后的代码根据迭代计数的值而不是使用二进制黑白配色方案为这些像素分配各种灰度。要创建一系列灰度值,计数值乘以 10,然后通过正弦函数发送。这将曼德布洛特集变成视觉上美观的灰度表示,强调分形的精细特征。
正在进行的代码现在根据迭代次数为像素提供灰度值,使图像具有渐变外观。重写的代码使用正弦函数将迭代计数转换为 -1 和 1 之间的值,而不是简单地使用二进制黑白颜色。乘以 10 并变成整数后,该值会产生各种灰色。通过以视觉方式突出显示与曼德布洛特集的不同偏差程度,此更新旨在生成更细致入微且更美观的图像。
结论
朱利亚分形为了解数学的无限复杂性和精妙性提供了一个迷人的窗口。在本教程中,我们将朱利亚分形视为一个概念,并学习了如何使用 Python 制作它们。定义了朱利亚分形函数,解释了其语法,并介绍了生成朱利亚分形的分步算法。此外,我们提供了两种不同的方法以及可执行代码和结果。您可以通过使用不同的设置(包括缩放、偏移、最大迭代次数、逃逸阈值和常量值)来生成各种迷人的朱利亚分形图案。交互式方法使实时调查成为可能,这有助于更深入地理解朱利亚分形的底层数学思想和独特品质。
Python 提供了创建和显示分形的强大环境,因为它拥有广泛的科学库,包括 NumPy 和 Matplotlib。因此,请深入朱利亚分形的世界,让您的想象力自由驰骋,踏上穿越分形几何无限辉煌的永恒冒险。
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

