已知两条多段线(每条多段线只由两个点组成)有一个共点,求其角度,验证是否大于指定角度(默认90度)。
代码如下:
private bool ValidateAngle(IPolyline pFromPolyline, IPolyline pToPolyline, double dMinAngle = 90)
{
var bValid = true;
try
{
var pPointB1 = pFromPolyline.ToPoint;
var pPointB2 = pToPolyline.FromPoint;
if (CalculateDistance(pPointB1, pPointB2) > 1e-5)
throw new Exception("传入了两条不共点的线段");
var pPointB = pPointB1;
var pPointA = pFromPolyline.FromPoint;
var pPointC = pToPolyline.ToPoint;
var a = CalculateDistance(pPointB, pPointC);
var b = CalculateDistance(pPointA, pPointC);
var c = CalculateDistance(pPointA, pPointB);
var cosB = (a * a + c * c - b * b) / (2 * a * c);
double dAngle = 180 / Math.PI * Math.Acos(cosB); //弧度转角度
if (dAngle < dMinAngle)
{
bValid = false;
}
}
catch
{
bValid = false;
}
return bValid;
}