我正在创建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;
}
答案 0 :(得分:3)
您可以找到两条线和水平线之间的角度,然后从180度中减去这两条线。
那是(在这里假设学位)
double priorAngle = Angle(p1,p2);
double nextAngle = Angle(p2,p3);
double angleInBetween = 180.0 - (priorAngle + nextAngle);