我正在尝试在HTML5画布中创建一个Mandelbrot set。但它在布景周围给我带来了噪音。请看小提琴: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();发布于 2018-08-19 17:33:15
您正在通过对a + b求和来测试函数的转义值,这是不正确的。更常见的方法是测试2.0的大小,在该大小之后,已知函数最终会转义。这很容易测试。
a * a + b * b >= 4.0尤其是在你需要调整a和b的时候。
https://stackoverflow.com/questions/51913272
复制相似问题