在java中画一段圆?

e4eetjau  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(224)

为了好玩,我正在 java 做一个破砖游戏。在这个游戏中,球棒是一个围绕圆周的弧形。我正在努力使球棒动作正常。我正在画一个圆弧,它来自圆上的两点:

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

从理论上讲,这应该是可行的,第二个点是从Angular 产生的稍微进一步,但弧的长度在大小上保持变化。。。?这就是问题所在。

hpxqektj

hpxqektj1#

此语句打破了模式:

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

使用它会更有意义

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

还有一种叫做g.drawarc的方法:

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

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

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

甚至可能

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

相关问题