1

我正在创建Concave Hull算法,我几乎完成了它。问题是我需要更改一些计算连续线之间角度的代码片段。

角度

从水平线开始,顺时针方向。我写了一个方法,它返回这条水平线和我的线之间的角度。它工作正常。但是如何修改它以获得两条我的线之间的角度?请注意,坐标系来自左上角(屏幕上的像素),因此连续的线将创建一个多边形,因此它们以不同的顺序相互连接(因此可以将线着色转向不同的方向)。

我计算当前角度的代码在水平线和我的线之间:

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

您可以找到两条线中的每条线与水平线之间的角度,然后从 180 度中减去这两条线。

那就是(假设这里的度数)

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