8

我想围绕其中心点旋转一个矩形,它应该保留在应该绘制的位置并在该空间中旋转

这是我的代码:

AffineTransform transform = new AffineTransform();

    transform.rotate(Math.toRadians(45),rectangle.width/2, rectangle.height/2);
    Shape transformed = transform.createTransformedShape(rectangle);
    g2.fill(transformed)

矩形被旋转但它被绘制在屏幕的不同部分,我该如何纠正这个问题?

4

2 回答 2

16

我还没有尝试过,但似乎你没有得到正确的矩形中间。尝试:

AffineTransform transform = new AffineTransform();
transform.rotate(Math.toRadians(45), rectangle.getX() + rectangle.width/2, rectangle.getY() + rectangle.height/2);
g2.fill(transformed);

不同之处在于现在您将宽度添加到起始 X 点并将高度添加到起始 Y 点,因此是矩形的中间。

希望这可以帮助。

于 2012-01-10T17:44:14.023 回答
6
AffineTransform transform = new AffineTransform();
transform.rotate(theta, rect.getX() + rect.width/2, rect.getY() + rect.height/2);
AffineTransform old = g2.getTransform();
g2.transform(transform);

// draw your rectangle here...

g2.setTransfrom(old);

如果您这样做,则可以绘制更高级的矩形。例如,使用渐变填充或矩形内的文本。一切都会随着它旋转。

于 2012-12-19T11:58:53.873 回答