Processing 如何通过单击放大Mandelbrot集

Processing 如何通过单击放大Mandelbrot集,processing,fractals,mandelbrot,Processing,Fractals,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, 3

我设法在处理过程中创建了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, 0,width, minvalX, maxvalX);
      float b = map(yPixel+dj, 0,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, 0, 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;
    
  }
  
}



float minvalX=-1.5;
浮动最小值=-1.5;
float maxvalX=1.5;
浮动最大值=1.5;
浮动角度=0;
浮动di,dj;
int-xPixel,yPixel;
无效设置(){
尺寸(500500);
像素密度(1);
彩色模式(HSB,360);
}
作废提款(){
缩放(缩放);
float maxLoops=100;
loadPixels();
浮动方程1原始;
浮动方程;
对于(xPixel=0;xPixel16){
打破
}
n++;
}
if(n==maxLoops){
像素[xPixel+yPixel*宽度]=颜色(0);
}
否则{
像素[xPixel+yPixel*width]=颜色(n-(int)(n/360)*n,360,(int)贴图(n*6,1,maxLoops,0,360));
}
}
}
更新像素();
}
void mousePressed()
{
如果(鼠标按钮==左){
di=di+mouseX-int(宽度/2);
dj=dj+mouseY-int(高度/2);
minvalX+=0.1;
maxvalX-=0.1;
minvalY+=0.1;
maxvalY-=0.1;
}
}

它放大到我的鼠标所在的位置,但最终它向中间移动并卡在那里。我知道这与minvalX、maxvalX、minvalY和maxvalY有关,但我不知道如何处理这些值以使其始终向我的鼠标缩放。

我相信可能会有所帮助。我不确定这是否是因为我不熟悉Objective C,但我无法使用我的代码获得此答案中的代码。你能详细说明一下这个答案有什么帮助吗?你不会用不充分的
浮点值来放大。而且,他只重复了10次,而有些人则会重复数千次,如所提供链接中的另一个答案所示。但这并不是他想要解决的问题:当他缩放时,草图每次都倾向于向中心稍微缩放一点,而且他缩放得越远,效果就越差,使得草图在一段时间后变得无关紧要。当然,
minvalX+=0.1一些行通过零后,这些行就不能工作了,但我的数学不够好,无法提供一个可行的替代方案。我想它应该随着缩放级别的变化而变化,但我还没有以任何相关的方式计算出数字来完成这项任务。我相信可能会有所帮助。我不确定这是否是因为我不熟悉Objective C,但我无法让这个答案中的代码与我的代码一起工作。你能详细说明一下这个答案有什么帮助吗?你不会用不充分的
浮点值来放大。而且,他只重复了10次,而有些人则会重复数千次,如所提供链接中的另一个答案所示。但这并不是他想要解决的问题:当他缩放时,草图每次都倾向于向中心稍微缩放一点,而且他缩放得越远,效果就越差,使得草图在一段时间后变得无关紧要。当然,
minvalX+=0.1在一些行通过零后,这些行就不能工作了,但我的数学能力不足以提供一个可行的替代方案。我认为它应该随着缩放级别的变化而变化,但我还没有以任何相关的方式处理这些数字来完成这项工作。