我有一个Graphics2D对象,我用它来绘制Canvas。我在Canvas上绘制多个形状,并且只想转换其中的一个(或部分)。
我会尽量保持这个简单:
void render(Graphics2D g) {
... // Draw shape 1
... // Draw shape 2
... // Draw shape 3
}我如何在保持形状1和3完好无损的情况下旋转形状2?所说的“旋转”,我指的是围绕它的中心点旋转,例如,我们可以定义为x和y。
我已经找了一段时间来做这件事了,但是找不到任何我想要的工作方式。
有什么简单的方法吗?
发布于 2011-11-29 15:48:46
而不是围绕它的中心点旋转形状,旋转,然后平移画布。若要在(x, y)处围绕形状中心旋转,首先用(-x, -y)转换画布,然后旋转画布-d度,然后在(0,0)处绘制正常形状。
当你完成后,旋转回来,然后转换回来(注意,这些几何变换的顺序是重要的,平移然后旋转会给你一个完全不同的结果)。
这意味着您仍然可以在任意旋转时绘制一个对象,而不必自己重新计算坐标。
发布于 2012-03-28 08:17:56
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(Angle,xAnchorPoint,yAnchorPoint); afx.rotate将对象围绕点旋转(x锚点;yAnchorPoint)。
希望这是你想要的
发布于 2011-11-29 15:44:56
为了旋转形状,请使用Graphics2D.rotate方法之一。
缓存用于shape 1和shape 3的转换。在绘制shape 3之前,请确保将转换重置为缓存的转换,因为使用rotate进行shape 2将更改当前的转换坐标。
步骤:
shape 1
shape 2
shape 3https://stackoverflow.com/questions/8313526
复制相似问题