如何使缩放中心居中
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;
完整代码:Tyk
需要从所有坐标中减去中心坐标,乘以缩放,然后添加中心坐标,如下所示: