如何使用另一个象限作为坐标在JPanel上绘图?

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

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

但是如何在这个象限中绘制形状? 我想保持形状的坐标(在世界坐标中定义)而不是在canvas坐标中。 所以我需要以某种方式转换它们,或者转换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)); } 

这是一个袖手旁观的答案,所以它没有经过测试,但我认为它会起作用。

翻译为(0,高度)。 这应该将原点重新定位到左下角。

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

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