旋转矩形并调整位置

时间:2014-10-20 01:40:05

标签: java rotation affinetransform translate-animation

我目前正在努力解决一些矩形的旋转问题。 我有一个由9个小矩形组成的矩形。 http://i57.tinypic.com/msn8ue.jpg

现在我通过仿射变换相应地旋转了大矩形,这非常好。 http://i61.tinypic.com/25phlqp.jpg

我的问题是我现在需要移动矩形,以便每个矩形的左上角位置为x,y。

我不知道该怎么做,我希望你可以帮助我。

谢谢!

public class MainClass {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Demo");
        Container cp = jf.getContentPane();
        MyCanvas tl = new MyCanvas();
        cp.add(tl);
        jf.setSize(800, 800);
        jf.setVisible(true);
    }
}

class MyCanvas extends JComponent {

    private static final long serialVersionUID = 5703217428905757134L;

    @Override
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;

        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        int x = 400;
        int y = 400;
        int width = 100;
        int height = 200;
        final int OVERLAPPING_OUTLINE = 10;

        Rectangle[] rect = new Rectangle[9];

        rect[0] = new Rectangle(x + OVERLAPPING_OUTLINE, y + OVERLAPPING_OUTLINE, width - 2 * OVERLAPPING_OUTLINE, height - 2
                * OVERLAPPING_OUTLINE);

        rect[1] = new Rectangle(x - OVERLAPPING_OUTLINE, y - OVERLAPPING_OUTLINE, OVERLAPPING_OUTLINE * 2,
                OVERLAPPING_OUTLINE * 2);
        rect[2] = new Rectangle(x - OVERLAPPING_OUTLINE + width, y - OVERLAPPING_OUTLINE, OVERLAPPING_OUTLINE * 2,
                OVERLAPPING_OUTLINE * 2);

        rect[3] = new Rectangle(x - OVERLAPPING_OUTLINE, y + height - OVERLAPPING_OUTLINE, OVERLAPPING_OUTLINE * 2,
                OVERLAPPING_OUTLINE * 2);

        rect[4] = new Rectangle(x - OVERLAPPING_OUTLINE + width, y + height - OVERLAPPING_OUTLINE, OVERLAPPING_OUTLINE * 2,
                OVERLAPPING_OUTLINE * 2);
        rect[5] = new Rectangle(x - OVERLAPPING_OUTLINE, y + OVERLAPPING_OUTLINE, OVERLAPPING_OUTLINE * 2, height
                - OVERLAPPING_OUTLINE * 2);
        rect[6] = new Rectangle(x - OVERLAPPING_OUTLINE + width, y + OVERLAPPING_OUTLINE, OVERLAPPING_OUTLINE * 2, height
                - OVERLAPPING_OUTLINE * 2);
        rect[7] = new Rectangle(x + OVERLAPPING_OUTLINE, y - OVERLAPPING_OUTLINE, width - OVERLAPPING_OUTLINE * 2,
                2 * OVERLAPPING_OUTLINE);
        rect[8] = new Rectangle(x + OVERLAPPING_OUTLINE, y + height - OVERLAPPING_OUTLINE, width - OVERLAPPING_OUTLINE * 2,
                2 * OVERLAPPING_OUTLINE);

        for (Rectangle r : rect)
            g2.draw(r);
        g2.setColor(Color.RED);

        AffineTransform af = new AffineTransform();

        for (int i = 90; i < 360; i += 90) {
            af.rotate(Math.toRadians(i), x - OVERLAPPING_OUTLINE, y - OVERLAPPING_OUTLINE);
            for (Rectangle r : rect) {
                Shape shape = af.createTransformedShape(r);
                g2.draw(shape);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您似乎需要使用AffineTransform.translate(double tx, double ty)