Java Graphics2D-在Graphics2D对象上旋转形状

Java Graphics2D-在Graphics2D对象上旋转形状,java,swing,graphics2d,Java,Swing,Graphics2d,我有一个Graphics2D对象,用于在画布上绘制。我在画布上绘制了多个形状,只想变换其中一个(或部分) 我会尽量保持简单: void render(Graphics2D g) { ... // Draw shape 1 ... // Draw shape 2 ... // Draw shape 3 } 在保持形状1和3不变的情况下,如何旋转形状2?我所说的“旋转”是指围绕其中心点旋转,例如,我们可以定义为x和y 我一直在寻找一种方法来做到这一点有一段时间了,但找不到任

我有一个
Graphics2D
对象,用于在
画布上绘制。我在
画布上绘制了多个形状,只想变换其中一个(或部分)

我会尽量保持简单:

void render(Graphics2D g) {
    ... // Draw shape 1
    ... // Draw shape 2
    ... // Draw shape 3
}
在保持形状1和3不变的情况下,如何旋转形状2?我所说的“旋转”是指围绕其中心点旋转,例如,我们可以定义为
x
y

我一直在寻找一种方法来做到这一点有一段时间了,但找不到任何工作的方式,我希望它


有什么简单的方法可以做到这一点吗?

要旋转形状,请使用
图形2d.rotate
方法之一

缓存用于
形状1
形状3
的变换。在绘制
形状3
之前,请确保将变换重置为缓存的变换,因为对
形状2
使用
旋转
将改变当前变换坐标

步骤:

  • 缓存电流变换
  • 绘制
    形状1
  • 轮换
  • 绘制
    形状2
  • 将transform设置为缓存的transform
  • 绘制
    形状3

  • 与其围绕图形的中心点旋转图形,不如先旋转然后平移画布。若要在
    (x,y)
    处围绕形状中心旋转,请首先将画布平移
    (-x,-y)
    ,然后将画布旋转
    -d
    度,并在(0,0)处按法线绘制形状

    完成后,先向后旋转,再向后平移(请注意,对于这些几何变换,顺序很重要,平移和旋转将产生完全不同的结果)

    这意味着您仍然可以在任何旋转时绘制对象,而无需自己重新计算坐标

        AffineTransform afx = new AffineTransform();
        afx.rotate(angleRad, s.getCenter().x, s.getCenter().y);
        //afx.rotate(angleRad);
        java.awt.Shape ss = afx.createTransformedShape(s.getPrimativeShape());
        return ss;   
    
    s
    是我对java.awt.Shape的包装类,并用它做了一些事情。。。。但你想要的是第二行。
    afx.旋转(
    Angle
    xAnchorPoint
    ,yAnchorPoint)
    afx.rotate围绕点旋转对象(xAnchorPoint;yAnchorPoint)


    希望这就是你想要的

    “找不到任何我想要的东西”你能展示一下你的最佳尝试吗?描述变换不符合您期望的方式。这确实有效,因为它旋转形状,但它不会停留在同一个位置。我确实对其进行了一些更改,使其看起来像这样:1)
    g.translate(x,y)
    2)
    g.rotate(d)
    3)以(0,0)为中心绘制形状4
    g.rotate(-d)
    5)
    g.translate(-x,-y)
    。这正是我想要的工作方式。谢谢。