2014-02-13 71 views
2

我想将这个小矩形围绕圆的圆周移动,以便让它看起来像CANON一样移动。在java swing中围绕圆弧旋转矩形

enter image description here

代码

private void doDrawing(Graphics g){ 
    g.setColor(Color.BLUE); 
    g.fillArc(-CANON_RADIUS/2, this.getHeight()-CANON_RADIUS/2, CANON_RADIUS, CANON_RADIUS, 0, 90); 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setColor(Color.BLUE); 
    Rectangle rect = new Rectangle(CANON_RADIUS/2, this.getHeight()-CANON_RADIUS/2, CANON_WIDTH, CANON_HEIGHT); 
    AffineTransform transform = new AffineTransform(); 
    transform.rotate(Math.toRadians(-60), rect.getX() + rect.width/2, rect.getY() + rect.height/2); 
    Shape transformed = transform.createTransformedShape(rect); 
    g2d.fill(transformed); 
} 

此代码旋转矩形围绕其中心。我怎样才能围绕圆周旋转矩形?

+0

显示的代码的其余部分也一样,所以我们可以帮助你。我想给你有什么可能是不够的。 –

回答

1

首先第一件事情,你可以使用一个转换矩阵对于这一点,就像你已经在使用: http://en.wikipedia.org/wiki/Transformation_matrix

编辑: 看你的代码,你要旋转佳能周围的锚。请看看的javadoc: http://docs.oracle.com/javase/7/docs/api/java/awt/geom/AffineTransform.html

公共无效旋转(双θ表示 双anchorx, 双anchorY)结束

的第一个参数是你的旋转,最后两个参数必须是你的大炮基地的中间!像screen.height和0为你的例子:

AffineTransform transform = new AffineTransform(); 
transform.rotate(Math.toRadians(-60), 0, Screen.height); 
Shape transformed = transform.createTransformedShape(rect); 
g2d.fill(transformed); 

第二种方法可以移动你的基地的半径旋转矩形的中间。

像(伪):

Point p = circle.getPoint(); 
shape.moveto(p.x-(shape.width/2),p.y-(shape.height/2)); 
g2d.fill(shape); 
+0

非常感谢!这工作! –

+0

不客气,祝你好运! – Kostronor