Processing 如何通过单击放大Mandelbrot集
我设法在处理过程中创建了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
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代码>在一些行通过零后,这些行就不能工作了,但我的数学能力不足以提供一个可行的替代方案。我认为它应该随着缩放级别的变化而变化,但我还没有以任何相关的方式处理这些数字来完成这项工作。