你必须先明白这一点:
z = z^2 + c
让我们来分解一下。
Both z
and c
是复数(最近的一个问题教会我强调这一点,它们have小数位,可以如下所示:c=-0.70176-0.3842i
)。复数可以有“非实数”的部分,正确的术语是假想部分,然后你写一个single复数的形式:
(a + bi)
与以下内容相同:(a + b*i)
如果 b 为 0,则有 aa + 0i
这就是简单的a
所以没有假想部分你有一个真实的号码。
您的链接没有提到复数最重要的属性,尤其是其属性假想部分那i == sqrt(-1)
。在实数领域,不存在负数的平方根,这就是复数的用武之地,它可以让你得到 -1 的平方根。让我们举起i
2 次方:i^2 == -1
,魔法!
虚部(i
) 必须由您处理(特殊平方),或者您使用的编程语言将提供一个 Complex 类型来为您处理它。
现在回到扩展z^2
:
z == (a+bi)
, 所以z^2 == (a+bi)^2
so z^2 == (a^2 + bi^2 + 2*a*bi)
.
我们也来分解一下:
-
a^2
=> 这很简单,它是一个实数
-
bi^2
=> 棘手的部分。这真的是b^2*i^2
。我们来到这里i^2
,即-1
这使得它b^2*-1
or : -b^2
。所以这也是一个real number.
-
2*a*b*i
=> 这将是假想 part
Result: z^2 = (a^2-b^2+2*a*bi)
示例(有点过于详细。您可以将其视为循环中的第一次迭代):
z = (5 + 3i)
z^2 = (5 + 3i)^2
= (5^2 + 3^2*i^2 + 2*5*3i)
= (25 + 9i^2 + 30i)
= (25 + 9*-1 + 30i)
= (25 - 9 + 30i)
= (16 + 30i)
现在,如果您了解复数的迭代和乘法,请了解曼德尔布罗特(以及关于c
value):
当您想要创建 Mandelbrot 集时,您实际上是在复杂平面上寻找点,如果使用上面讨论的迭代进行迭代(例如 50 次),则这些点永远不会达到无穷大。曼德尔布罗特集是black通常看到的“Mandelbrot”图片的一部分,而不是闪亮的彩色部分。
通常的工作流程是这样的:
- 在复平面上选择一个点,例如 (1.01312 + 0.8324i) => 这将是以下值
c
!
- 在第一次迭代之前将 (0, 0i) 放入
z
然后按照前面所述迭代多次=>z = z^2 + c
。是的,你正在计算一个点的平方并将相同的点添加到它上,这是一个非常重要的属性曼德尔布罗特集。对于初学者来说,这样做 50 次。这将为您提供一个复数结果。
- 如果所得复数的任何部分(实数或虚数)等于或大于 2,那么我们假设该点将趋于无穷大,并且我们考虑该点不存在曼德尔布罗特集*的一部分。当您需要为点着色时就会出现这种情况(这是曼德尔布罗集的彩色部分)。如果复数的两个部分都小于 2,我们假设该点永远不会达到无穷大(即使迭代无数次),并将该点视为 Mandelbrot 集的一部分,并且其颜色将为黑色。
- 重复(选择下一个点,将其值放入
c
,将零放入z
并计算)
*实际上,验证一个点是否是集合的一部分有点复杂,但这对于原型来说效果很好