我需要转换(旋转)Rectangle2D.Double
。但是,我不需要绘制形状,我还需要将变换后的矩形保持为对象,以便我可以使用.intersects()
和其他方法。这是我正在改变它的当前方式
private Rectangle2D.Double transform(Rectangle2D.Double rect) {
// make a new transform
AffineTransform transform = new AffineTransform();
// apply the transformation
transform.rotate(Math.toRadians(theta), rect.x + rect.width / 2, rect.y + rect.height / 2);
// get the resulting Shape
Shape s = transform.createTransformedShape(hitbox);
//return the finalized Rectangle
// ?
}
现在,人们会认为以下方法可行
Rectangle2D.Double newRect = new Rectangle2D.Double();
newRect.setFrame(transform.createTransformedShape(rect).getBounds2D());
然而,在绘制时,这似乎根本不会旋转矩形,而是将其缩放非常大的数量(140倍)。
所以问题是:如何将Shape
(正如绘制时的方式正确转换为正确的形式,即Rectangle2D.Double
?
如果不可能,那么仍有.intersects()
和类似方法的替代方案是什么?
答案 0 :(得分:3)
Rectangle2D
是轴对齐的。它无法转动。请尝试使用Path2D
。有一个很好的构造函数似乎正在做你想要的:
Path2D.Double(Shape shape, AffineTransform transform)
private Path2D.Double transform(Rectangle2D.Double rect) {
AffineTransform transform = new AffineTransform();
double angle = Math.toRadians(theta);
transform.rotate(angle, rect.x + rect.width / 2, rect.y + rect.height / 2);
return new Path2D.Double(rect, transform);
}
另请注意,您的toRadians(toRadians(theta))
非常可疑,使您的角度非常小。