【问题标题】:How can I draw on JPanel using another quadrant for the coordinates?如何使用另一个象限的坐标在 JPanel 上绘图?
【发布时间】:2010-04-01 20:54:38
【问题描述】:

我想通过覆盖paintComponent 在 JPanel 上绘制一些形状。我希望能够平移和缩放。使用AffineTransformGraphics2D 对象上的setTransform 方法可以轻松实现平移和缩放。之后,我可以使用g2.draw(myShape) 轻松绘制形状。这些形状是使用“世界坐标”定义的,因此在平移时可以正常工作,我必须在绘制之前将它们转换为画布/JPanel 坐标。

现在我想更改坐标的quadrant。从JPanel和电脑经常使用的第四象限到用户最熟悉的第一象限。 X 是相同的,但 Y 轴应该向上而不是向下增加。 new Point(origo.x, -origo.y);重新定义origo很容易

但是如何在这个象限中绘制形状?我想保留形状的坐标(在世界坐标中定义)而不是在画布坐标中。所以我需要以某种方式转换它们,或者转换Graphics2D 对象,并且我想有效地做到这一点。我也可以用AffineTransform 做这个吗?

我的绘图代码:

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
            g2.setColor(Color.blue);

            AffineTransform at = g2.getTransform();
            at.translate(-origo.x, -origo.y);
            at.translate(0, getHeight());
            at.scale(1, -1);
            g2.setTransform(at);
            g2.drawLine(30, 30, 140, 20);
            g2.draw(new CubicCurve2D.Double(30, 65, 23, 45, 23, 34, 67, 58));
        }

【问题讨论】:

    标签: java coordinates java-2d graphics2d affinetransform


    【解决方案1】:

    这是一个即兴的答案,因此未经测试,但我认为它会起作用。

    平移(0,高度)。这应该将原点重新定位到左下方。

    按 (1, -1) 缩放。那应该围绕 x 轴翻转它。

    在这种情况下,我认为操作顺序并不重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多