旋转时获取屏幕上矩形角的点
Getting the point of a rectangle's corners on the screen while rotating
我正在创建一个基本的 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 点时,它总是 returns 和 350, 350。如果我将它沿正方向旋转 45 度,它将 return 350 , 350. 我做了一个点击功能,这样我就可以在屏幕上点击,它正确地 returns 了点击点的 x 和 y。当我单击矩形的原始左上角时,它 returns 311,334。这就是我在计算左上角 x,y 时要查找的 return。
视觉在这里:
picture of before rotation
picture of after rotation
您正在对图形对象应用变换。因此,矩形对象本身没有被修改。
AffineTransform
有两种方法供您使用。 createTransformedShape
returns 相应变换的新形状或 transform(Point2D ptSrc, Point2D ptDst)
变换点 ptSrc 并将变换后的点保存在 ptDst:
Point rotatedPoint = new Point();
transform.transform(new Point(rect.x, rect.y), rotatedPoint);
我正在创建一个基本的 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 点时,它总是 returns 和 350, 350。如果我将它沿正方向旋转 45 度,它将 return 350 , 350. 我做了一个点击功能,这样我就可以在屏幕上点击,它正确地 returns 了点击点的 x 和 y。当我单击矩形的原始左上角时,它 returns 311,334。这就是我在计算左上角 x,y 时要查找的 return。 视觉在这里:
picture of before rotation
picture of after rotation
您正在对图形对象应用变换。因此,矩形对象本身没有被修改。
AffineTransform
有两种方法供您使用。 createTransformedShape
returns 相应变换的新形状或 transform(Point2D ptSrc, Point2D ptDst)
变换点 ptSrc 并将变换后的点保存在 ptDst:
Point rotatedPoint = new Point();
transform.transform(new Point(rect.x, rect.y), rotatedPoint);