java поворачивает прямоугольник вокруг центра

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

Это мой код:

AffineTransform transform = new AffineTransform();

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

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

2 ответов


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

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

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

надеюсь, что это помогает.


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);

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