在java中旋转Rectangle对象

时间:2013-09-17 22:06:41

标签: java rotation

是否可以将Rectangle物体绕其轴旋转一定程度?它和Rectangle rect = new Rectangle(x,y,w,h,r)一样简单吗?

如果无法旋转物体,我会得到类似结果的方法吗?

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

3 个答案:

答案 0 :(得分:2)

  

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

您可以使用AffineTransform方法createTransformedShape(...)旋转Shape派生对象,例如Rectangle2D。

Rectangle2D myRect = new Rectangle2D.Double(100, 100, 200, 200);
AffineTransform at = AffineTransform.getRotateInstance(Math.PI / 4, 150, 150);
Shape rotatedRect = at.createTransformedShape(myRect);

注意:代码未编译也未经过测试。

答案 1 :(得分:0)

要旋转矩形,请为图形上下文指定AffineTransform以进行旋转。这是一个例子:

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(radians)进行轮换。

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

答案 2 :(得分:0)

还有另一种方法可以做到这一点(除createTransformedShape之外),如果需要的话,可以创建更少的临时对象。

您可以使用Path2D保留Path2D.transform(AffineTransform),然后使用what AffineTransform actually does under the hood进行转换,而不是保留Rectangle2D边框:

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.
    }

    // ...
}

这与enter image description here非常相似。