【问题标题】:Rotation of a rectangle in Java using rotation matrix使用旋转矩阵旋转Java中的矩形
【发布时间】:2014-01-05 16:03:30
【问题描述】:

我在 JPanel 扩展类上绘制了一个矩形(一个 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);

    }

}

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing matrix rotation polygon


【解决方案1】:

我相信你把它从屏幕上旋转了,所以我不会画。

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

【讨论】:

  • 你说得对,我将 Graphics 对象翻译到其他地方并且工作正常。但为什么它会把第二个从屏幕上拉下来呢?
  • 好的,请阅读您的编辑。是否可以将枢轴点设置为矩形的中心?
  • @user3150201 是的,您将矩形平移到原点,旋转然后平移回来。还可以查看Affine Transform
  • 哦,我明白了。谢谢:)
  • 我应该翻译 Polygon 对象还是 Graphics 对象?这样做:g2d.translate(origin) 还是 poly2.translate(origin)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 2014-11-30
相关资源
最近更新 更多