 As imagens mostram ampliações sucessivas do Mandelbrot modificado.
As imagens mostram ampliações sucessivas do Mandelbrot modificado.
Explore Explain S6 E3: Liuhuaying Yang
Há 6 dias
Desobediência tecnológica
function mandel(x,y) {
  var c=0;
  var r=0;
  var i=0;
  var MAXITER=1000;
  while(r*r+i*i<4 && c<MAXITER) {
    var nr=r*r-i*i+x;
    var ni=2*r*i+y;
    r=nr;
    i=ni;
    c+=1;
  }
  return c;
}

return (c/MAXITER)*256;
return c + 1 - Math.log(Math.log(r*r+i*i))/Math.log(2);

return (Math.log(c)/Math.log(MAXITER))*256;
 
<html>
  <head>
  <style>canvas {border:2px solid black; margin: 1px};</style>
  </head>
  <body>
<script>
function mandel(x,y) {
  var c=0;
  var r=0;
  var i=0;
  var MAXITER=1000;
  while(r*r+i*i<4 && c<MAXITER) {
    var nr=r*r-i*i+x;
    var ni=2*r*i+y;
    r=nr;
    i=ni;
    c+=1;
  }
  return c;
}
  
var body=document.getElementsByTagName("body")[0];
var canvas, ctx, imageData;
var minx=-2;
var miny=-2;
var maxx=2;
var maxy=2;
function prepare() {
  if(canvas) {
    canvas.onclick=null;
  }
  canvas=document.createElement("CANVAS");
  canvas.setAttribute("width", 256);
  canvas.setAttribute("height", 256);
  body.appendChild(canvas);
  ctx=canvas.getContext("2d");
  imageData=ctx.getImageData(0,0,256,256);
  canvas.onclick=zoom;
}
function plot() {
  var deltax=(maxx-minx)/256;
  var deltay=(maxy-miny)/256;
  var deltay=(maxy-miny)/256;
  prepare();
  for(var x=0; x<256; x++) {
    for(var y=0; y<256; y++) {
      var c=mandel(minx+x*deltax, miny+y*deltay);
      var red=(c*8)%255;
      var green=(c*9)%255;
      var blue=(255-c*4)%255;
      var index=(x+y*imageData.width)*4;
      imageData.data[index+0]=red;
      imageData.data[index+1]=green;
      imageData.data[index+2]=blue;
      imageData.data[index+3]=0xff;
    }
  }
  ctx.putImageData(imageData,0,0);
}
plot();
function zoom(e) {
  var x=minx+(maxx-minx)*((e.clientX-canvas.offsetLeft)/256);
  var y=miny+(maxy-miny)*((e.clientY-canvas.offsetTop)/256);
  var dx=(maxx-minx)/4;
  var dy=(maxy-miny)/4;
  minx=x-dx;
  maxx=x+dx;
  miny=y-dy;
  maxy=y+dy;
  plot();
}
  </script>
  </body>
</html>

<html>
  <head>
  </head>
  <body>
    <canvas id="canvas" width="256" height="256"></canvas>
    <script>
function mandel(x,y) {
  var c=0;
  var r=0;
  var i=0;
  var MAXITER=1000;
  while(r*r+i*i<4 && c<MAXITER) {
    var nr=r*r-i*i+x;
    var ni=2*r*i+y;
    r=nr;
    i=ni;
    c+=1;
  }
  return c;
}
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var imageData=ctx.getImageData(0,0,256,256);
   
var minx=-2;
var miny=-2;
var maxx=2
var maxy=2;
   
  
function plot() {
  var deltax=(maxx-minx)/256;
  var deltay=(maxy-miny)/256;
 
  for(var x=0; x<256; x++) {
    for(var y=0; y<256; y++) {
      var c=mandel(minx+x*deltax, miny+y*deltay);
      var red=(c*8)%255;
      var green=(c*9)%255;
      var blue=(255-c*4)%255;
      var index=(x+y*imageData.width)*4;
      imageData.data[index+0]=red;
      imageData.data[index+1]=green;
      imageData.data[index+2]=blue;
      imageData.data[index+3]=0xff;
    }
  }
  ctx.putImageData(imageData,0,0);
}
plot();
   
function zoom(e) {
  var x=minx+(maxx-minx)*((e.clientX-canvas.offsetLeft)/256);
  var y=miny+(maxy-miny)*((e.clientY-canvas.offsetTop)/256);
  var dx=(maxx-minx)/4;
  var dy=(maxy-miny)/4;
  
  minx=x-dx;
  maxx=x+dx;
  miny=y-dy;
  maxy=y+dy;
  plot();
}
canvas.onclick=zoom;
   
    </script>
  </body>
</html>

