Ява вращать прямоугольник вокруг центра - PullRequest
6 голосов
/ 10 января 2012

Я хотел бы повернуть прямоугольник вокруг его центральной точки, и он должен остаться в том месте, где он должен быть нарисован и вращаться в этом пространстве

это мой код:

AffineTransform transform = new AffineTransform();

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

прямоугольник повернут, но он нарисован в другой части экрана, как я могу это исправить?

Ответы [ 2 ]

14 голосов
/ 10 января 2012

Я не пробовал это, но кажется, что вы не получаете правильную середину прямоугольника.Попробуйте:

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

Разница в том, что теперь вы добавляете ширину к начальной точке X и добавляете высоту к начальной точке Y, отсюда и середина прямоугольника.

Надеждаэто помогает.

5 голосов
/ 19 декабря 2012
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);

Если вы сделаете это так, можно нарисовать более сложный прямоугольник. Например, с градиентной заливкой или текстом внутри прямоугольника. Все будет вращаться вместе с ним.

...