在java swing中围绕圆弧旋转矩形

在java swing中围绕圆弧旋转矩形,java,swing,applet,japplet,Java,Swing,Applet,Japplet,我想把这个小长方形绕着圆的圆周移动,这样我看起来和移动起来都像一个佳能 代码 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.s

我想把这个小长方形绕着圆的圆周移动,这样我看起来和移动起来都像一个佳能

代码

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

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

首先,您可以使用变换矩阵,就像您已经在使用:

编辑: 看看你的代码,你想旋转你的佳能围绕一个锚。请查看javadocs:

公共空间旋转(双θ, 双主播, 双锚(双锚)

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

AffineTransform transform = new AffineTransform();
transform.rotate(Math.toRadians(-60), 0, Screen.height);
Shape transformed = transform.createTransformedShape(rect);
g2d.fill(transformed);
第二种方法是围绕底面半径移动旋转矩形的中间部分

like(伪代码):


也显示代码的其余部分,以便我们可以帮助您。我认为考虑到你所拥有的可能还不够。
Point p = circle.getPoint();
shape.moveto(p.x-(shape.width/2),p.y-(shape.height/2));
g2d.fill(shape);