1

私はConcave Hullアルゴリズムを作成していて、ほぼ完成しました。問題は、連続する線の間の角度を計算するコードの一部を変更する必要があることです。

角度

水平線から時計回りに。この水平線と私の線の間の角度を返すメソッドを作成しました。それは正常に動作します。しかし、それを変更して 2 本の線の間の角度を取得するにはどうすればよいでしょうか? 座標系は左上隅(画面上のピクセル)からのものであり、連続する線は結果として多角形を作成するため、異なる順序で互いに接続されていることに注意してください(線が異なる方向に色付けされる可能性があります) )。

現在の角度をカウントする私のコードは、水平線と私の線をつぶやきます:

private static double Angle(Vertex v1, Vertex v2, double offsetInDegrees = 0.0)
{
    return (RadianToDegree(Math.Atan2(-v2.Y + v1.Y, -v2.X + v1.X)) + offsetInDegrees)%360.0;
}

public static double RadianToDegree(double radian)
{
    var degree = radian * (180.0 / Math.PI);
    if (degree < 0)
        degree = 360 + degree;

    return degree;
}
4

1 に答える 1

3

2 つの線のそれぞれと水平線の間の角度を見つけて、180 度から両方を引くことができます。

それは(ここで学位を仮定して)

double priorAngle = Angle(p1,p2);
double nextAngle = Angle(p2,p3);
double angleInBetween = 180.0 - (priorAngle + nextAngle);
于 2013-08-09T10:59:59.120 に答える