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)为中心绘制形状4g.rotate(-d)
5)g.translate(-x,-y)
。这正是我想要的工作方式。谢谢。