Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 旋转矩形并调整位置_Java_Rotation_Affinetransform_Translate Animation - Fatal编程技术网

Java 旋转矩形并调整位置

Java 旋转矩形并调整位置,java,rotation,affinetransform,translate-animation,Java,Rotation,Affinetransform,Translate Animation,我目前正在努力解决一些矩形的旋转问题。 我有一个由9个小矩形组成的矩形。 现在我用仿射变换旋转了大矩形,效果很好。 我的问题是,我现在需要移动矩形,使每个矩形的左上角位置在点x,y 我不知道怎么做,我希望你能帮助我 谢谢 public class MainClass { public static void main(String[] args) { JFrame jf = new JFrame("Demo"); Container cp = jf.g

我目前正在努力解决一些矩形的旋转问题。 我有一个由9个小矩形组成的矩形。

现在我用仿射变换旋转了大矩形,效果很好。

我的问题是,我现在需要移动矩形,使每个矩形的左上角位置在点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);
            }
        }
    }
}
public类MainClass{
公共静态void main(字符串[]args){
JFrame jf=新JFrame(“演示”);
容器cp=jf.getContentPane();
MyCanvas tl=新的MyCanvas();
cp.add(tl);
jf.设置大小(800800);
jf.setVisible(真);
}
}
类MyCanvas扩展了JComponent{
私有静态最终长serialVersionUID=5703217428905757134L;
@凌驾
公共空间涂料(图g){
图形2d g2=(图形2d)g;
g2.setRenderingHint(renderingHits.KEY\u ANTIALIASING,renderingHits.VALUE\u ANTIALIAS\u ON);
int x=400;
int y=400;
整数宽度=100;
整数高度=200;
最终int重叠_轮廓=10;
矩形[]矩形=新矩形[9];
rect[0]=新矩形(x+重叠轮廓,y+重叠轮廓,宽度-2*重叠轮廓,高度-2
*重叠轮廓);
rect[1]=新矩形(x-重叠轮廓,y-重叠轮廓,重叠轮廓*2,
重叠轮廓*2);
rect[2]=新矩形(x-重叠轮廓+宽度,y-重叠轮廓,重叠轮廓*2,
重叠轮廓*2);
rect[3]=新矩形(x-重叠轮廓,y+高度-重叠轮廓,重叠轮廓*2,
重叠轮廓*2);
rect[4]=新矩形(x-重叠轮廓+宽度,y+高度-重叠轮廓,重叠轮廓*2,
重叠轮廓*2);
rect[5]=新矩形(x-重叠轮廓,y+重叠轮廓,重叠轮廓*2,高度
-重叠轮廓*2);
rect[6]=新矩形(x-重叠轮廓+宽度,y+重叠轮廓,重叠轮廓*2,高度
-重叠轮廓*2);
rect[7]=新矩形(x+重叠轮廓,y-重叠轮廓,宽度-重叠轮廓*2,
2*重叠轮廓);
rect[8]=新矩形(x+重叠轮廓,y+高度-重叠轮廓,宽度-重叠轮廓*2,
2*重叠轮廓);
for(矩形r:rect)
g2.绘制(r);
g2.设置颜色(颜色为红色);
AffineTransform af=新的AffineTransform();
对于(int i=90;i<360;i+=90){
af.旋转(数学托拉半径(i),x-重叠轮廓,y-重叠轮廓);
for(矩形r:rect){
形状=af.createTransformedShape(r);
g2.绘制(形状);
}
}
}
}

看起来您需要使用
仿射Transform.translate(双tx,双ty)