Алгоритм изменения масштаба
Как сделать так, чтобы центр приближения был по центру
Переменная zoom отвечает за приближение
void drawAxis()
{
stroke(0, 0, 255);
line(moveX*zoom, (moveY+50000*zoom)*zoom, moveX*zoom, (moveY-50000*zoom)*zoom);
stroke(255, 0, 0);
line((moveX+50000*zoom)*zoom, moveY*zoom, (moveX-50000*zoom)*zoom, moveY*zoom);
}
void drawGraph()
{
for (y=-500; y<500; y+=0.1)
{
x=func(y);
line( (y*10+moveX)*zoom, (x*10+moveY)*zoom, (yprev*10+moveX)*zoom, (xprev*10+moveY)*zoom);
xprev=x;
yprev=y;
}
}
void draw()
{
background(0);
stroke(255);
//вывод переменных
varDraw();
//сохраняем значения с предыдущего кадра
xprev=x;
yprev=y;
//рисуем график+оси xy
drawGraph();
drawAxis();
//костыль для плавного зума
zoom=(zoom+zoom+zoom+zoom+zoomTar)/5;
//mousePressed() не работает так как мне хотелось
if(mousePressed==true)
{
moveX+=(mouseX-pmouseX)/zoom;
moveY+=(mouseY-pmouseY)/zoom;
}
}
Переменные
float xprev=0, yprev=0;
float zoom=0.0001, zoomTar=0.75, zoomTmp=1;//zoomTar - число к которому стремится переменная zoom
float moveX=500, moveY=500;
float x=0, y=0;
Полный код:Тык
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Нужно отнимать от всех координат координаты центра, умножать на зум, потом прибавлять координаты центра, примерно так:
zoomedX = ScreenWidth/2 + (X - ScreenWidth/2) * zoom