gpt4 book ai didi

java - 使用仿射变换 Swing 放大

转载 作者:行者123 更新时间:2023-11-30 07:22:00 25 4
gpt4 key购买 nike

我正在使用 JAVA swing 开发我的个人项目。

该项目是关于在窗口上绘制 map 。

enter image description here

map 可以使用仿射变换进行缩放。我在这里遇到的问题是,每当我放大或缩小 map 时, map 也会移动,而不是在屏幕中心的 map 点上放大/缩小

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);
}

最佳答案

example居中和缩放 Shapep3,由

  • 将对称点平移到原点,

  • 缩放多边形然后

  • 转换回面板的中心。

请注意,如所讨论的here,串联操作以声明顺序的(明显)相反的方式执行。 .

at.setToIdentity();
at.translate(w / 2, h / 2);
at.scale(scale, scale);
at.translate(-p3x[5] + 10, -p3y[5]);

关于java - 使用仿射变换 Swing 放大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13023588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com