在java swing中围绕弧旋转矩形

时间:2014-02-13 15:51:05

标签: java swing applet japplet

我想将这个小矩形移动到圆周上,这样我就像一个佳能一样看起来和移动。

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);
}

此代码围绕其中心旋转矩形。如何围绕圆周旋转矩形?

1 个答案:

答案 0 :(得分:1)

首先,您可以使用转换矩阵,就像您已经使用的那样: http://en.wikipedia.org/wiki/Transformation_matrix

编辑: 看着你的代码,你想围绕一个锚旋转你的经典。请查看javadoc: http://docs.oracle.com/javase/7/docs/api/java/awt/geom/AffineTransform.html

  

public void rotate(double theta,             双重锚点,             双锚)

第一个参数是你的旋转,最后两个参数必须是你的大炮基地的中间!比如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);