Java准确计算我的角度?

时间:2012-08-03 23:58:16

标签: java math graphics

我让用户在屏幕上画一条线,有一个起点和一个终点。如果用户延伸超过某个角度,我会改变端点的位置,这样用户就不能超出指定的角度。然而,似乎当我解决用户正在绘制的角度并制造它时,它不会超过MAX ANGLE,并将角度设置为MAX ANGLE,这是有区别的。这可以通过当我绘制线条时看到,一旦我到达某个角度,线条跳跃并锁定在MAX ANGLE处,但是不应该有任何跳跃,它应该是平滑的,就像线条碰到一个看不见的屏障一样。这可能只是我,我的PosX和PosY都是花车。

    private void CheckAngle() {
    double adj = Math.abs(PosX - PosX2);
    double c1 = adj;
    double c2 = Math.abs(PosY - PosY2);
    double hyp = Math.hypot(c1, c2);


    double angle = Math.cos((adj/hyp));
    angle = angle * 100;


    if (angle > MAX_ANGLE) {


        double opp = (Math.tan(MAX_ANGLE) * Math.abs(PosX - PosX2));


        if (PosY > PosY2) {
            PosY2 =(float) (PosY - opp);
        } else {
            PosY2 =(float) (PosY + opp);
        }

    }
}

我的答案是使用弧度和未使用的组合

    Math.acos() & Math.atan()

所以最终的代码看起来像这样

    private void CheckAngle() {
    double adj = Math.abs(PosX - PosX2);
    double opp = Math.abs(PosY - PosY2);
    double hyp = Math.sqrt((adj*adj)+(opp*opp));


    double angle = Math.acos((adj/hyp));
    angle = angle * 100;
    angle = Math.toRadians(angle);

    if (angle > MAX_ANGLE) {


        opp = (Math.atan(MAX_ANGLE) * adj);


        if (PosY > PosY2) {
            PosY2 =(float) (PosY - opp);
        } else {
            PosY2 =(float) (PosY + opp);
        }

    }
}

1 个答案:

答案 0 :(得分:2)

以下是转换:

final double MAX_ANGLE = Math.toRadians(80);

请注意,这与说:

相同
final double MAX_ANGLE = 80 * Math.PI / 180;