我有一个Graphics2D
对象,我用它来绘制Canvas
。我在Canvas
上绘制了多个形状,并且只想转换它们中的一个(或部分)。
我会尽量保持这个简单:
void render(Graphics2D g) {
... // Draw shape 1
... // Draw shape 2
... // Draw shape 3
}
如何在保持形状1和3完整的情况下旋转形状2?通过“旋转”我的意思是围绕其中心点旋转,我们可以将其定义为x
和{ {1}}例如。
我一直在寻找一种方法来做这件事,但找不到任何可行的方式。
有没有简单的方法可以做到这一点?
答案 0 :(得分:5)
不是围绕它的中心点旋转形状,而是旋转然后平移画布。要在(x, y)
处围绕形状的中心旋转,首先将画布翻转(-x, -y)
,然后旋转画布-d
度并在(0,0)处正常绘制形状。 / p>
完成后,向后旋转然后平移(注意,通过这些几何变换,顺序很重要,平移然后旋转会给你一个完全不同的结果)。
这意味着您仍然可以在任何旋转时绘制对象,而无需自己重新计算坐标。
答案 1 :(得分:2)
要旋转形状,请使用Graphics2D.rotate
方法之一。
缓存用于shape 1
和shape 3
的转换。在绘制shape 3
之前,请确保将转换重置为缓存转换,因为rotate
使用shape 2
会改变当前的转换坐标。
步骤:
shape 1
shape 2
shape 3
答案 2 :(得分:1)
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的包装类,用它来做一些事情....但你想要的是第2行。
afx.rotate(
角度,
{xAnchorPoint {1}}
afx.rotate围绕点旋转对象(xAnchorPoint; yAnchorPoint)。
希望这是你想要的