Java 获取矩形的点';旋转时在屏幕上旋转角

Java 获取矩形的点';旋转时在屏幕上旋转角,java,swing,graphics,shapes,Java,Swing,Graphics,Shapes,我正在创建一个基本的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), rec

我正在创建一个基本的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;
}
当我运行它时,它从350350开始,如图所示,并将根据我的增量在任意方向上旋转。它可以正确地在图形中旋转。但是当我想要打印原始左上角点的x,y的点时,它总是返回350350。如果我把它向正方向旋转45度,它会返回350350。我做了一个点击功能,这样我可以点击屏幕,它会正确地返回点击点的x和y。当我单击矩形的原始左上角时,它返回311334。这是我在计算左上角x,y时寻找的回报。 此处可见:


您正在图形对象上应用变换。因此,不会修改矩形对象本身

AffineTransform
有两种方法可供使用
createTransformedShape
返回相应变换的新形状或
transform(Point2D ptSrc,Point2D ptDst)
将变换点ptSrc并将变换后的点保存在ptDst中:

Point rotatedPoint = new Point();
transform.transform(new Point(rect.x, rect.y), rotatedPoint);

可能有一种非常简洁的方法可以做到这一点,但是根据我所知道的(很少),我知道我可以计算两点之间的角度,所以给定矩形的中心点和矩形的上/左角,我可以计算角度,这表示偏移。我知道,给定一个角度和一个半径,我可以计算圆上的点。因此,假设半径是矩形的最长长度,加上您输入的角度和偏移角度,您应该能够计算上/左拐角的新x/y位置这是正确的想法,但是;)
Rectangle#getX/Y
返回一个
Double
,而
需要一个
int
,您可以使用
Point2D.Double
(这可能更可取)或
Rectangle#x/Y
,但是,+1用于教我一些新的、整洁的东西;)谢谢,伙计,工作起来很有魅力,并返回正确的x,y点。