微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过单击放大到Mandelbrot集

如何解决如何通过单击放大到Mandelbrot集

我在处理过程中设法创建了Mandelbrot集,但是在实现缩放方面却很努力。这是我的代码

float minvalX = -1.5;
float minvalY = -1.5;
float maxvalX = 1.5;
float maxvalY = 1.5;
float angle = 0;
float di,dj;
int xPixel,yPixel;





void setup(){
  size(500,500);
  pixelDensity(1);
  colorMode(HSB,360);

}


void draw() {
  
  scale(zoom);
  float maxLoops = 100;
  loadPixels();

  
  float equationOneOriginal; 
  float equationTwoOriginal; 
  
  
  for (xPixel = 0; xPixel < width ; xPixeL++) {
    for (yPixel = 0; yPixel < height ; yPixeL++) {
      
      float a = map(xPixel+di,width,minvalX,maxvalX);
      float b = map(yPixel+dj,height,minvalY,maxvalY);
      
      equationOneOriginal = a;
      equationTwoOriginal = b;
      
      float n = 1;
      
      while (n < maxLoops) {
        
        float equationOne  = a*a - b*b; //First part of the equation 
        float equationTwo  = 2 * a * b; //Second part of the equation
        
        a = equationOne  + equationOneOriginal;
        b = equationTwo  + equationTwoOriginal;
        
        if (abs(a+b) > 16) {
          break;
        }
        
        n++;
      }
      

      
      if (n == maxLoops) {
      
        pixels[xPixel+yPixel*width] = color(0);
      
      }
      else {
        pixels[xPixel+yPixel*width] = color(n-(int)(n/360)*n,360,(int)map(n*6,1,maxLoops,360));
      
      }
      
    }
  }
  
  updatePixels();
  
}

void mousepressed()
{
  
  if (mouseButton == LEFT) {
    di = di + mouseX - int(width/2);
    dj = dj + mouseY - int(height/2);
    
    minvalX += 0.1;
    maxvalX -= 0.1;
    
    minvalY += 0.1;
    maxvalY -= 0.1;
    
  }
  
}



它放大到我的鼠标所在的位置,但最终它滑向中间并卡在其中。我知道这与minvalX,maxvalX,minvalY和maxvalY有关,但我不知道要对这些值做什么以使其始终向我的鼠标放大。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。