有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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


共 (1) 个答案

  1. # 1 楼答案

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

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

    public void rotate(double theta, double anchorx, double anchory)

    第一个参数是你的旋转,最后两个参数必须是你大炮基地的中间!就像屏幕一样。高度和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);