我正在创建一个基本的2D游戏,我正在尝试在旋转矩形时获取所有矩形角的x和y(点)。
private static Graphics2D drawRect(Graphics2D g)
{
Rectangle rect = new Rectangle(350,350,75,75);
AffineTransform transform = new AffineTransform();
transform.rotate(Math.toRadians(rotation), rect.getX() + rect.width/2, rect.getY() + rect.height/2);
AffineTransform old = g.getTransform();
g.transform(transform);
g.fill(rect);
if(z >= 1000)
{
// here I am asking it to print out the x,y of the point at the top left of the rectangle
System.out.println(rect.getX() + " : " + rect.getY() + " : " + rotation);
z = 0;
}
g.setTransform(old);
z++;
return g;
}
当我运行它时,它如图所示从350,350开始,并将根据我增加它的方向向任一方向旋转。它正确旋转图形。但是当我想打印原始左上角的x,y点时,它总是返回350,350。如果我将它向正方向旋转45度,它将返回350,350。我已经点击了一下功能所以我可以点击屏幕并正确返回点击点的x和y。当我点击矩形的原始左上角时,它返回311,334。这是我在计算左上角x,y时要寻找的回报。 视觉在这里:
答案 0 :(得分:2)
您正在对图形对象应用变换。因此,不修改矩形对象本身。
AffineTransform
有两种方法可以使用。 createTransformedShape
返回一个相应变换的新形状或transform(Point2D ptSrc, Point2D ptDst)
,它将转换点ptSrc并将转换后的点保存在ptDst中:
Point rotatedPoint = new Point();
transform.transform(new Point(rect.x, rect.y), rotatedPoint);