0

ユーザーに画面上に線を引いてもらいます。始点と終点があります。ユーザーが特定の角度を超えて伸びる場合、ユーザーが指定された角度を超えて伸びないように、端点の位置を変更します。しかし、ユーザーが描いている角度を計算して、それが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);
        }

    }
}
4

1 に答える 1

2

変換は次のとおりです。

final double MAX_ANGLE = Math.toRadians(80);

これは次のように言うのと同じであることに注意してください。

final double MAX_ANGLE = 80 * Math.PI / 180;
于 2012-08-04T00:09:38.417 に答える