зум манделброт, установленный во второй раз, не позволяет ему увеличить нужное место

Я использую opengl / c ++ для рисования набора Мандельброта и пытаюсь увеличить масштаб. Я могу масштабировать в первый раз и увеличивать, где я хочу (нажав), но когда я пытаюсь увеличить в следующий раз, он не увеличивает, где я намеревался, вместо этого он сдвигает и масштабирует немного далеко от места, которое я хочу масштабирования.
я использую

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

double dividecubesby  = 700;
double left = -2.0;
double right = 2.0;
double bottom = -2.0;
double top = 2.0;
int maxiteration = 128;
int zoomlevel = 3;
double baseSize = 4.0;
double Size = 0.0;
double xco=0.0;
double yco=0.0;

void   SetXYpos(int px,int py)
{
xco = left+(right-left)*px/dividecubesby;
yco = top-(top-bottom)*py/dividecubesby;
}

void keyPressed(unsigned char key, int x, int y)
{

int xx= x;
int yy= y;
setXYpos(xx,yy);Size = 0.5*(pow(2.0, (-zoomlevel)));switch(key){

case 'z':

left   =  xco -  Size;
right  =  xco +  Size;
bottom =  yco -  Size;
top    =  yco +  Size;

dividecubesby = dividecubesby+100;
maxiteration  = maxiteration+100;
zoomlevel=zoomlevel+1;

glutPostRedisplay();
break;
}

}

int mandtest(double Cr, double Ci)
{double Zr = 0.0;
double Zi = 0.0;
int times = 0;
double temp;
Zr = Zr+Cr;
Zi = Zi+Ci;

while ((((Zr*Zr)+(Zi*Zi))<=4) && (times < maxiteration)){

temp = (Zr*Zr)-(Zi*Zi);
Zi = 2*Zr*Zi;

Zr = temp+Cr;
Zi = Zi+Ci;

times = times+1;}

return times;

}void display(void)
{

glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f,1.0f,1.0f);
double deltax = ((right - left)/(dividecubesby-1));
double deltay = ((top- bottom)/(dividecubesby-1));

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluOrtho2D(left,right,bottom,top);glBegin(GL_POINTS);

for(double x= left;x<=right;x += deltax ){
for(double y= bottom; y<=top;y +=  deltay ){
if((mandtest(x,y))==maxiteration){
glColor3f(1.0f,1.0f,1.0f);
glVertex2f(x,y);

}
else {
glColor3f((float)mandtest(x,y)/10,0.0f,(float)mandtest(x,y)/30);
glVertex2f(x,y);
}

}
}
glEnd();

glFlush();
}

вычислить, где щелкнуть мышью в интермах декартовой координаты [-2,2]

px и py являются координатами пикселей

1

Решение

У вас слишком много переменных. Что определяет ширину вашего изображения? (right - left)? baseSize + f(zoomLevel)? SizeReal? Непонятно, чья задача установить, кого и кем кто использует, поэтому нельзя надеяться, что все будет обновляться последовательно.

Кроме того, почему dividecubesby увеличить на 500, в то время как размер изображения уменьшается вдвое при каждом увеличении? Где ширина / высота окна вашей оконной системы, которая определяет границы щелкаемых координат?

Я предлагаю начать с нуля и, возможно, нарисовать график, кто кого обновляет (left/right -> imageWidth). Убедитесь, что вы получите правильные координаты, выбранные щелчком мыши, независимо от того, какое у вас окно рисования (слева / справа / сверху / снизу), и продолжайте с этого момента. Я думаю, что ваш первый зум работает правильно случайно.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]