java - Java中使用旋转矩阵旋转矩形

标签 java swing matrix rotation polygon

我在 JPanel 扩展类上绘制了一个矩形(Polygon 对象)。

然后我尝试创建另一个 Polygon 对象,它应该是原始 Polygon 的 90 度旋转。

我使用了旋转矩阵。

由于某种原因它不起作用。运行程序仅显示原始矩形。

怎么了?谢谢

public class DrawingPanel extends JPanel{

    public void paintComponent(Graphics g){

        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        Point p1,p2,p3,p4;
        p1 = new Point(50,50);
        p2 = new Point(200,50);
        p3 = new Point(200,100);
        p4 = new Point(50,100);

        int[] x = {(int) p1.getX(), (int) p2.getX(), (int)p3.getX(), (int) p4.getX()};
        int[] y = {(int) p1.getY(), (int) p2.getY(), (int)p3.getY(), (int) p4.getY()};

        Polygon poly = new Polygon(x, y, x.length);
        g2d.draw(poly);

        p1.setLocation(p1.getX() * Math.cos(Math.toRadians(90)) - p1.getY() * Math.sin(Math.toRadians(90)),
                p1.getX() * Math.sin(Math.toRadians(90)) + p1.getY() * Math.cos(Math.toRadians(90)));
        p2.setLocation(p2.getX() * Math.cos(Math.toRadians(90)) - p2.getY() * Math.sin(Math.toRadians(90)),
                p2.getX() * Math.sin(Math.toRadians(90)) + p2.getY() * Math.cos(Math.toRadians(90)));
        p3.setLocation(p3.getX() * Math.cos(Math.toRadians(90)) - p3.getY() * Math.sin(Math.toRadians(90)),
                p3.getX() * Math.sin(Math.toRadians(90)) + p3.getY() * Math.cos(Math.toRadians(90)));
        p4.setLocation(p4.getX() * Math.cos(Math.toRadians(90)) - p4.getY() * Math.sin(Math.toRadians(90)),
                p4.getX() * Math.sin(Math.toRadians(90)) + p4.getY() * Math.cos(Math.toRadians(90)));

        int[] x2 = {(int) p1.getX(), (int) p2.getX(), (int)p3.getX(), (int) p4.getX()};
        int[] y2 = {(int) p1.getY(), (int) p2.getY(), (int)p3.getY(), (int) p4.getY()};

        Polygon poly2 = new Polygon(x2, y2, x2.length);
        g2d.draw(poly2);

    }

}

最佳答案

我相信您正在将其旋转出屏幕,因此我不会因此进行绘制。

您的代码会将其绕左上角旋转 90 度,从而位于屏幕左侧

enter image description here

关于java - Java中使用旋转矩阵旋转矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20935708/

相关文章:

java - JFrame.remove(Component comp) "destroys"我的组件?

python - 找到矩阵中的最大值以最大化分数

用行索引替换矩阵中的行值

python - 使用 Python 根据条件替换数据框中的所有值(所有列)

java - 在构建器模式中使用抽象类?

java - 将java应用程序移植到Android平台

java - 在没有编译错误的情况下更改对方法的访问

java - JLabels 的鼠标监听器

java - 在 java 中通过架构层向上冒泡事件

java - 使用键盘箭头在网格面板内移动 JButton