在Java中绘制一个圆的一部分?

时间:2015-01-14 21:34:32

标签: java geometry trigonometry

我正在用Java制作破砖游戏以获得乐趣。在这个游戏中,蝙蝠是一个围绕圆周的弧形弧。我正在努力使蝙蝠行为正常。 我正在绘制一个来自圆圈上2点的弧线:

public void update(){

    if(dir == 1){
        angle += 0.05;
    }else if(dir == 0){
        angle -= 0.05;
    }


    x0 = a + r * Math.cos(angle);
    y0 = b + r * Math.sin(angle);
    x1 = a + r * Math.cos(angle - 0.1);
    y1 = b + r * Math.sin(angle - 0.1);

} 
public void draw(Graphics2D g){
    g.setColor(Color.black);
    g.fillRect(0, 0, GamePanel.WIDTH, GamePanel.HEIGHT);
    int tr = (int)Math.sqrt((x0-a)*(x0-a) + (y0-b)*(y0-b));
    int x = (int) (a - tr);
    int y = (int) (a - tr);
    int width = 2*tr;
    int height = 2*tr;
    int startAngle = (int) (180/Math.PI*Math.atan2(y0-b, x0-a));
    int endAngle = (int) (180/Math.PI*Math.atan2(y1-b, x1-a));
    g.setColor(Color.white);
    g.drawArc(x, y, width, height, startAngle, endAngle);
}

理论上这应该有效,第二点是从角度稍微进一步产生的,但是弧的长度在大小上变化......?这就是问题所在。

1 个答案:

答案 0 :(得分:0)

此声明打破了模式:

int y = (int) (a - tr);

使用

会更有意义
int y = (int) (b - tr);

然后就是调用g.drawArc的方式:

g.drawArc(x, y, width, height, startAngle, endAngle);

最后一个参数是弧的角度,所以我想你想要

g.drawArc(x, y, width, height, startAngle, endAngle - startAngle );

甚至可能

g.drawArc(x, y, width, height, startAngle, Math.abs(endAngle - startAngle) );