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 に答える