Javascript 生成Mandelbrot集的几个问题
我编写了一个处理程序来生成mandelbrot集,并取得了成功,但一旦我将c更改为常数复数,我就无法用我的程序获得任何模式。我一定是有一个盲点,因为我似乎无法调试我的程序。大家能给我一些建议吗?谢谢 在mand函数中注释掉的行是我试图改变c值的方式,但到目前为止,除了生成Mandelbrot集之外,我从未获得任何类型的模式Javascript 生成Mandelbrot集的几个问题,javascript,processing,p5.js,mandelbrot,Javascript,Processing,P5.js,Mandelbrot,我编写了一个处理程序来生成mandelbrot集,并取得了成功,但一旦我将c更改为常数复数,我就无法用我的程序获得任何模式。我一定是有一个盲点,因为我似乎无法调试我的程序。大家能给我一些建议吗?谢谢 在mand函数中注释掉的行是我试图改变c值的方式,但到目前为止,除了生成Mandelbrot集之外,我从未获得任何类型的模式 function setup() { createCanvas(600, 600); background(200); noLoop(); } function
function setup() {
createCanvas(600, 600);
background(200);
noLoop();
}
function draw() {
translate(width/2, height/2);
loadPixels();
for (let x=0; x<=width; x++) {
for (let y=0; y<=height; y++) {
a=map(x, 0, width, -2.5, 1);
b=map(y, 0, height, -1, 1);
z=new Complex(a, b);
f = (mand(z))
//i = map(f,1,100,0,255);
pixels[(x+y*width)*4]=sqrt(f/100);
pixels[(x+y*width)*4+1]=255;
pixels[(x+y*width)*4+2]=150;
}
}
updatePixels();
}
var Complex = function(a, b) {
this.re=a;
this.im=b;
this.modSq=(a*a+b*b);
}
Complex.prototype.square = function() {
a=sq(this.re)-sq(this.im);
b=2*this.re*this.im;
return new Complex(a, b);
}
function mand(c) {
oldZ=new Complex(0, 0);
for (let i=1; i<=100; i++) {
newZ=oldZ.square();
newZ.re+=c.re;
newZ.im+=c.im;
//newZ.re+= -0.70176;
//newZ.im+= -0.3842;
oldZ=newZ;
if (oldZ.modSq>=4) {
return i
}
}
return 0
}
函数设置(){
createCanvas(600600);
背景(200);
noLoop();
}
函数绘图(){
平移(宽度/2,高度/2);
loadPixels();
对于(设x=0;x颜色通道的值必须在[0255]的范围内)。分形函数的结果f
是任意数字,大多数结果是低于1.0的数字,但函数返回的数字也非常高。
您必须将该值映射到像素颜色的颜色
我建议计算[0.0,1.0]范围内的颜色值:
cR=Math.min(sqrt(f/100.0),1);
cG=数学最小值(sqrt(f/50.0),1);
cB=数学最小值(sqrt(f/10.0),1);
最后将它们映射到范围[0255]:
像素[(x+y*宽度)*4]=cR*255;
像素[(x+y*宽度)*4+1]=cG*255;
像素[(x+y*宽度)*4+2]=cB*255;
请参见示例,其中我将更改应用于原始代码:
函数设置(){
createCanvas(600600);
背景(200);
noLoop();
}
函数绘图(){
平移(宽度/2,高度/2);
loadPixels();
对于(设x=0;x目前,每个像素颜色之间的变化是不可察觉的,因为mand()的返回值是1或0,因此,最终,像素的红色值只能是0或0.1。我们还缺少其他代码吗?@Julian No.mad
的结果是任何数字。大多数数字都在[0,1]范围内土地的结果是0到100,然后除以100,再除以sqrt.Sri,最后的颜色是修饰语0或1@HimChan你说得对!这是一个i,我以为是一个1。尽管如此,这一点仍然成立。这是一个很好的答案,具体涵盖了所问的问题。我认为值得指出的是,为了在场景中使用像素阵列如果像素密度大于1,则在每个x y坐标上也必须考虑1个以上的像素。例如,如果像素密度为2,则如果我们将高度和宽度乘以2,则上述代码将正常工作。