使用仿射变换放大
我正在使用JAVA swing开展个人项目。
该项目是关于在窗口上绘制地图。
地图可以使用仿射变换进行缩放。 我在这里遇到的问题是每当我放大或缩小地图时,也会移动而不是放大/缩小位于屏幕中心的地图上的点
private void updateAT() { Dimension d = panel.getSize(); int panelW = d.width; int panelH = d.height; Rectangle2D r = regionList[0].get("Victoria").getShape().getBounds2D(); scaleX = (panelW/r.getWidth()) * zoom; scaleY = (panelH/r.getHeight()) * zoom; AffineTransform goToOrigin = AffineTransform.getTranslateInstance(-r.getMinX(), -r.getMinY()); AffineTransform pan = AffineTransform.getTranslateInstance(panX, panY); AffineTransform scaleAndFlip = AffineTransform.getScaleInstance(scaleX, -scaleY); //AffineTransform mirror_y = new AffineTransform(1, 0, 0, -1, 0, panelH); AffineTransform centre = AffineTransform.getTranslateInstance(panelW/2, panelH/2); centre.translate(-((r.getWidth()*scaleX)/2), ((r.getHeight()*scaleY)/2)); world2pixel.setToIdentity(); //world2pixel.concatenate(mirror_y); world2pixel.concatenate(pan); world2pixel.concatenate(centre); world2pixel.concatenate(scaleAndFlip); world2pixel.concatenate(goToOrigin); }
这个例子中心并缩放一个Shape
, p3
,by
-
将对称点转换为原点,
-
缩放
Polygon
然后 -
转换回面板的中心。
请注意,连接操作是在声明顺序的(明显)反向中执行的,如此处所述。
at.setToIdentity(); at.translate(w / 2, h / 2); at.scale(scale, scale); at.translate(-p3x[5] + 10, -p3y[5]);