【问题标题】:Mandelbrot set defined by a specific function由特定函数定义的 Mandelbrot 集
【发布时间】:2015-05-17 11:12:21
【问题描述】:

我正在试验画布,我正在尝试修改 this piece of code,但不幸的是我不明白其中的某些部分。

我的问题是 - 如何自定义上述代码,例如由

f(z) = c^e(-z) 

(公式取自一本有分形例子的书)?

我知道我需要更改这部分代码:

function computeRow(task) {
    var iter = 0;
    var c_i = task.i;
    var max_iter = task.max_iter;
    var escape = task.escape * task.escape;
    task.values = [];
    for (var i = 0; i < task.width; i++) {
        var c_r = task.r_min + (task.r_max - task.r_min) * i / task.width;
        var z_r = 0, z_i = 0;

        for (iter = 0; z_r*z_r + z_i*z_i < escape && iter < max_iter; iter++) {
            // z -> z^2 + c
            var tmp = z_r*z_r - z_i*z_i + c_r;
            z_i = 2 * z_r * z_i + c_i;
            z_r = tmp;
        }
        if (iter == max_iter) {
            iter = -1;
        }
        task.values.push(iter);
    }
    return task;
}

但不知道 z_i、z_r、c_i、c_r 的真正含义以及我如何将它们绑定到上述公式。

任何帮助将不胜感激。

【问题讨论】:

  • 复数有两部分:实数和虚数。所以z = z_r + z_i*i
  • 对不起,我真的不明白如何实现它。在上面的代码中 z=z^2 + c 但看不到 z 的确切使用位置和方式:(

标签: javascript canvas pseudocode fractals mandelbrot


【解决方案1】:

复数有两部分:实数和虚数。
所以z = a + b*i,其中a 是实部,b*i 是虚部。
在为z=z^2+c 提供的示例中,其中z=z_r+z_i*i

注意: i*i = -1
所以z^2 = (z_r+z_i*i)*(z_r+z_i*i) = z_r*z_r+2*z_r*z_i*i + z_i*i*z_i*i = z_r*z_r+2*z_r*z_i*i - z_i*z_i
现在添加c:z_r*z_r+2*z_r*z_i*i - z_i*z_i + c_r + c_i*i 分组

z_r*z_r+2*z_r*z_i*i - z_i*z_i + c_r + c_i*i = (z_r*z_r - z_i*z_i + c_r) + (2*z_r*z_i + c_i)*i

所以我们从代码中得到tmp var - 是新z 的真实部分

tmp = z_r*z_r - z_i*z_i + c_r

和虚部

2*z_r*z_i + c_i

由于z = z_r + z_i * i,我们需要赋值

z_r = z_r*z_r - z_i*z_i + c_r
z_i = 2*z_r*z_i + c_i

更新:f(z) = e^z - c

首先,几个复杂的形式:x = a+b*i = |x|(cos(p)+i*sin(p)) = |x|*e^(i*p)
其中|x| = sqrt(a*a + b*b)p = b/a

在我们的例子中:p=z_i/z_r|z| = sqrt(z_r*z_r+z_i*z_i)

e^z = e^(z_r+z_i*i) = e^z_r * (e^z_i*i) = e^z_r * (cos(p)+i*sin(p)) = (e^z_r * cos(p)) + i * (e^z_r * sin(p))

减去c:

(e^z_r * cos(p)) + i * (e^z_r * sin(p)) - c_r - c_i*i = (e^z_r * cos(p) - c_r) + i * (e^z_r * sin(p) - c_i)

所以 新 z

z_r = (e^z_r * cos(p) - c_r) = (e^z_r * cos(z_i/z_r) - c_r)
z_i = (e^z_r * sin(p) - c_i) = (e^z_r * sin(z_i/z_r) - c_i)

【讨论】:

  • 很好的解释,现在我明白了,谢谢:)。 p.s.本教程还很好地解释了复平面的实际外观 - youtube.com/watch?v=0YaYmyfy9Z4
  • 我能问你更多吗?如果我理解正确,主要思想是将表达式分组为 A + B*i。但这种分组时如何进行并不明显。以上述方程为例,作为 E 的幂 - e^(z^2 + c)
  • @user3845133 相同:复数有几种形式,因此您可以在此处查看例如:tutorial.math.lamar.edu/Extras/ComplexPrimer/Forms.aspx
  • @user3845133 我回答:可能你的意思是不同的功能?
  • 就像我现在一样,e^(ix) 中的x真实的,但在你的公式中e^zz复杂的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
相关资源
最近更新 更多