Mandelbrot集中的噪音

时间:2018-08-18 23:30:30

标签: javascript html5-canvas mandelbrot

我正在尝试在HTML5画布中创建一个Mandelbrot集。但这给了我周围的声音。参见小提琴:https://jsfiddle.net/k1f9phw7/

我尝试使用所有设置,并尝试将亮度映射到迭代计数,但没有成功。

let pixelSize = 1;
let width = 500;
let height = 500;
let maxIterations = 400;
let mandelMin = -2.5;
let mandelMax = 2.5;
let infinity = 15;

function draw() {

let ctx = document.getElementById('canvas').getContext('2d');

for (var y = 0; y < height; y++) {

    for (var x = 0; x < width; x++) {

        var map = function (num, in_min, in_max, out_min, out_max) {
            return (num - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
        };

        var a = map(x, 0, width, mandelMin , mandelMax);
        var b = map(y, 0, width, mandelMin, mandelMax);

        var initialA = a;
        var initialB = b;

        var iterationCount = 0;

        while(iterationCount < maxIterations){

            //Echt
            var aa = (a * a) - (b * b);

            //Complex
            var bb = (2 * a * b);

            //De initiele waarde zijn c
            a = aa + initialA;
            b = bb + initialB;

            var result = Math.abs(a + b);

            //Is het oneindig?
            if( result >= infinity){
                break;
            }else{

                var brightness = 0;

                ctx.fillStyle = 'rgb('+ brightness +', '+ brightness +', '+ brightness +')';
                //Teken de pixel
                ctx.fillRect( map(a ,mandelMin, mandelMax, 0, width )  * pixelSize, map(b, mandelMin, mandelMax, 0, height) * pixelSize, pixelSize, pixelSize);
            }

            iterationCount++;

        }
    }
}
}
draw();

1 个答案:

答案 0 :(得分:0)

您正在通过对不正确的a + b求和来测试函数的转义值。更常见的是测试幅值2.0,然后知道该函数最终将转义。这很容易测试

a * a + b * b >= 4.0

尤其是您需要将ab平方的时候。