C# 求两个线段之间的夹角

如下图所示,在△ABC中,余弦定理可表示为:
C# 求两个线段之间的夹角_第1张图片
同理,也可描述为:
勾股定理是余弦定理的特例。
   
   
时,
   
,余弦定理可简化为
   
,即勾股定理。
///   
/// 根据余弦定理求两个线段夹角  
///   
/// 端点  
/// start点  
/// end点  
///   
double Angle(PointF o, PointF s, PointF e)  
{  
    double cosfi = 0, fi = 0, norm = 0;  
    double dsx = s.X - o.X;  
    double dsy = s.Y - o.Y;  
    double dex = e.X - o.X;  
    double dey = e.Y - o.Y;  
  
    cosfi = dsx * dex + dsy * dey;  
    norm = (dsx * dsx + dsy * dsy) * (dex * dex + dey * dey);  
    cosfi /= Math.Sqrt(norm);  
  
    if (cosfi >= 1.0) return 0;  
    if (cosfi <= -1.0) return Math.PI;  
    fi = Math.Acos(cosfi);  
  
    if (180 * fi / Math.PI < 180)  
    {  
        return 180 * fi / Math.PI;  
    }  
    else  
    {  
        return 360 - 180 * fi / Math.PI;  
    }  
}  


你可能感兴趣的:(c#和.Net编程,图形学与图像处理)