今天无意间在折腾JavaScript曼得尔布集分形算法搞随机艺术图顺带来讲解一下,用一个具体的例子来追踪 JavaScript 曼德尔布罗集分形算法的算术过程。 选取一个复数 c 并跟踪迭代过程中的 z 值。

1. 选择一个复数 c:

假设选择 c = 0.3 + 0.4i。 记住,i 代表虚数单位 (√-1)。

2. 初始化 z:

迭代开始时,z 被初始化为 0 + 0i (即 z = {re: 0, im: 0})

3. 迭代过程 (使用复数运算):

将进行几次迭代,以观察 z 的值是如何变化的。 记住复数的加法和乘法规则:

  • (a + bi) + (c + di) = (a + c) + (b + d)i
  • (a + bi) * (c + di) = (ac - bd) + (ad + bc)i
  • 迭代 1:

    z_1 = z_0² + c = (0 + 0i)² + (0.3 + 0.4i) = 0.3 + 0.4i

  • 迭代 2:

    z_2 = z_1² + c = (0.3 + 0.4i)² + (0.3 + 0.4i)

    首先计算 (0.3 + 0.4i)²

    (0.3 + 0.4i) * (0.3 + 0.4i) = (0.3*0.3 - 0.4*0.4) + (0.3*0.4 + 0.4*0.3)i = -0.07 + 0.24i

    然后加上 c

    z_2 = -0.07 + 0.24i + 0.3 + 0.4i = 0.23 + 0.64i

  • 迭代 3:

    z_3 = z_2² + c = (0.23 + 0.64i)² + (0.3 + 0.4i)

    首先计算 (0.23 + 0.64i)²

    (0.23 + 0.64i) * (0.23 + 0.64i) = (0.23*0.23 - 0.64*0.64) + (0.23*0.64 + 0.64*0.23)i = -0.3477 + 0.2944i

    然后加上 c

    z_3 = -0.3477 + 0.2944i + 0.3 + 0.4i = -0.0477 + 0.6944i

  • 迭代 4、5...等等: 这个过程会继续下去。

4. 模的计算:

在每次迭代之后,需要计算 z 的模(绝对值):|z| = √(z.re² + z.im²)

  • |z_1| = √(0.3² + 0.4²) = √0.25 = 0.5
  • |z_2| = √(0.23² + 0.64²) ≈ √0.4605 ≈ 0.6787
  • |z_3| = √((-0.0477)² + 0.6944²) ≈ √0.4866 ≈ 0.6976

5. 发散判断:

如果在任何迭代中,|z| 超过 2,则 c 不属于曼德尔布罗集,并且迭代过程停止。 如果迭代次数达到预设的最大迭代次数,仍然没有超过 2,则 c 属于曼德尔布罗集。

可以确定一个给定的复数 c 是否属于曼德尔布罗集,以及它距离集合边界的远近(通过迭代次数来表示)。 这个过程在计算机程序中被大量重复执行,以生成曼德尔布罗集的图像。 每次迭代都基于上一次迭代的结果进行计算。 这就是曼德尔布罗集分形算法的算术基础。

标签:曼得尔布集, 分形算法

Typecho如何开发一个主题-Hello World
你的评论