在java中旋转矩形对象

在java中旋转矩形对象,java,rotation,Java,Rotation,是否可以将矩形对象绕其轴旋转一定程度?它是否像矩形rect=新矩形(x,y,w,h,r)一样简单 如果不可能旋转对象,我可以用什么方法获得类似的结果 编辑:为了清晰起见,我的困境是,我有旋转的图像,但当它们与其他图像合并时,碰撞只在90度和180度旋转时起作用,因为它们的点击框矩形对象不旋转。要旋转矩形,请为图形上下文提供一个用于旋转的仿射变换。下面是一个例子: public void paintComponent(Graphics g) { super.paintComponent(g

是否可以将
矩形
对象绕其轴旋转一定程度?它是否像
矩形rect=新矩形(x,y,w,h,r)
一样简单

如果不可能旋转对象,我可以用什么方法获得类似的结果


编辑:为了清晰起见,我的困境是,我有旋转的图像,但当它们与其他图像合并时,碰撞只在90度和180度旋转时起作用,因为它们的点击框矩形对象不旋转。

要旋转矩形,请为图形上下文提供一个用于旋转的
仿射变换。下面是一个例子:

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    AffineTransform oldTransform = g2d.getTransform();
    g2d.setTransform(AffineTransform.getRotateInstance(radians);
    g2d.draw(rectangle);
    g2d.setTransform(oldTransform);
}
您还可以使用
g2d.rotate(弧度)
进行旋转

请注意,角度必须以弧度为单位。要将度转换为弧度,请使用角度的
degrees*(Math.PI/180)

编辑:为了清晰起见,我的难题是,我有旋转的图像,但当它们与其他图像合并时,碰撞仅在90度和180度旋转时起作用,因为它们的点击框矩形对象不旋转

可以使用仿射变换方法旋转形状衍生对象,例如矩形2D


注意:代码未编译或测试。

如果需要的话,还有另一种方法可以创建更少的临时对象

不必为边界框保留一个
矩形2D
,您可以保留一个矩形,然后使用以下方法进行变换:


这非常类似于。

查找仿射变换的用法。我不需要在视觉上旋转对象,我需要旋转图像的点击框,点击框是一个矩形对象。您的评论毫无意义。仿射变换用于旋转矩形。在我继续讨论之前,让我在代码中尝试一下。如何旋转矩形?下面的代码使用图形,而我需要使用实际的矩形对象,我可以很好地绘制旋转的形状,问题是它们的点击框不随形状旋转,使用
getTransform()
按照而不是
setTransform
,创建时髦的physicsConsider,并且不要忘记重新设置原始变换。或者制作图形对象的副本,用它进行变换和绘制,然后将其处理。
createTransformedShape(新矩形(x,y,w,h))
?在阅读了关于形状、矩形2D、仿射变换和其他一些我了解的文档之后,我没有尝试对旋转的矩形进行任何可视化处理,似乎所有这些示例都涉及到视觉重塑OK,对不起,我只是将矩形2D与图形相关联。对不起,麻烦了。
Rectangle2D myRect = new Rectangle2D.Double(100, 100, 200, 200);
AffineTransform at = AffineTransform.getRotateInstance(Math.PI / 4, 150, 150);
Shape rotatedRect = at.createTransformedShape(myRect);
import java.awt.geom.*;

public class Example {
    private final Path2D hitBox;

    public Example(Rectangle2D initialHitBox) {
        this.hitBox = new Path2D.Double(initialHitBox);
    }

    public void transform(AffineTransform tx) {
        path.transform(tx); // In-place transformation.
    }

    // ...
}