2013-04-25 70 views
2

我的計算似乎是移動圖像比縮放更多。不太確定我要出錯的地方。我以爲我正確地在這裏跟上了另一篇文章,但這不太對。縮放MandelBrot集

int xPos = ev.xbutton.x; 
int yPos = ev.xbutton.y; 

double xCenter = (double) ((double) ((double) xPos/X_RESN) * (rmax - rmin)) + rmin; 
double yCenter = (double) ((double) ((double) yPos/Y_RESN) * (imax - imin)) + imin; 

double pixelFactors[4]; 

if(ev.xbutton.button == 1) //Left click, zoom in 
{ 
    rmin = (double) xCenter + (rmin + 0.3); 
    rmax = (double) xCenter + (rmax - 0.3); 
    imin = (double) yCenter + (imin + 0.3); 
    imax = (double) yCenter + (imax - 0.3); 
} 
else if(ev.xbutton.button == 3) //Right click, zoom out 
{ 
    rmin = -2; 
    rmax = 2; 
    imin = -2; 
    imax = 2; 
} 
+0

你跟隨什麼職位? – Xymostech 2013-04-25 04:22:37

+2

http://stackoverflow.com/questions/8381675/how-to-perform-simple-zoom-into-mandelbrot-set – T3CHN0CR4T 2013-04-25 04:46:59

+0

如果你不想讓它移動,那麼爲什麼涉及'xPos'和'yPos' ? – 2013-04-25 06:00:54

回答

1

您寫道:

rmin = (double) xCenter + (rmin + 0.3); 
rmax = (double) xCenter + (rmax - 0.3); 
imin = (double) yCenter + (imin + 0.3); 
imax = (double) yCenter + (imax - 0.3); 

不應該有一些乘法在那裏?也許更喜歡:(即像素座標)

rmin = (double) xCenter + (rmin * 0.3); 
rmax = (double) xCenter + (rmax * 0.3); 
imin = (double) yCenter + (imin * 0.3); 
imax = (double) yCenter + (imax * 0.3); 

如果你只想分鐘,馬克塞斯更接近,與x中心和y中心確定在複雜的平面座標圖像的中間,我覺得這可能更接近你想要的。

double rspan = rmax - rmin; 
double ispan = imax - imin; 
rmin = xCenter - (rspan * 0.3); 
rmax = xCenter + (rspan * 0.3); 
imin = yCenter - (rspan * 0.3); 
imax = yCenter + (rspan * 0.3); 

注意演員不再需要。

+0

這有點幫助,但它實際上並不是實際上以點擊點爲中心,在大約3-4個變焦區域之後,它會超出您嘗試關注的區域範圍。任何其他想法? :) – T3CHN0CR4T 2013-04-25 06:22:17

+0

編輯與另一個想法。 – 2013-04-25 06:35:00

+0

完美,謝謝! :d – T3CHN0CR4T 2013-04-25 06:41:53