已知两条多段线(每条多段线只由两个点组成)有一个共点,求其角度,验证是否大于指定角度(默认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;
}
本文介绍了一种算法,用于判断两条由两个点组成的多段线之间的夹角是否大于指定角度(默认为90度)。通过计算距离和利用余弦定理,该方法能准确判断角度大小。
3210

被折叠的 条评论
为什么被折叠?



