计算计算机屏幕上连续行之间的角度

时间:2013-08-09 10:54:56

标签: c# math geometry angle

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

Angles

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

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

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

1 个答案:

答案 0 :(得分:3)

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

那是(在这里假设学位)

double priorAngle = Angle(p1,p2);
double nextAngle = Angle(p2,p3);
double angleInBetween = 180.0 - (priorAngle + nextAngle);