Rectangle
物体有可能在一定程度上绕轴旋转吗?它和Rectangle rect = new Rectangle(x,y,w,h,r)
一样容易吗?
如果不可能旋转物体,有什么方法可以得到类似的结果呢?
编辑:为了清晰起见,我有些图像是旋转的,但是当它们与其他图像碰撞时,碰撞只在90度和180度旋转时工作,因为它们的命中框矩形对象不旋转。
发布于 2013-09-17 14:24:20
编辑:为了清晰起见,这是我的困境,我有图像旋转,但当它们与其他图像接合时,碰撞只能在90度和180度旋转,因为它们的命中框矩形对象不能旋转。
您可以使用Rectangle2D方法( AffineTransform方法createTransformedShape(...)
)旋转形状派生对象(如createTransformedShape(...)
)。
Rectangle2D myRect = new Rectangle2D.Double(100, 100, 200, 200);
AffineTransform at = AffineTransform.getRotateInstance(Math.PI / 4, 150, 150);
Shape rotatedRect = at.createTransformedShape(myRect);
注意:未编译或测试的代码。
发布于 2013-09-17 14:09:50
若要旋转矩形,请为图形上下文提供一个旋转的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)
作为角度。
发布于 2017-07-08 06:00:41
还有另一种方法(除了createTransformedShape
)可以创建更少的临时对象(如果需要的话)。
您可以保留一个Rectangle2D
,而不是为边界框保留一个Path2D
,然后使用Path2D.transform(AffineTransform)
执行转换。
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.
}
// ...
}
这与 actually does under the hood非常相似。
https://stackoverflow.com/questions/18860700
复制相似问题