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

如下图所示,在△ABC中,余弦定理可表示为:
同理,也可描述为:
勾股定理是余弦定理的特例。
   
   
时,
   
,余弦定理可简化为
   
,即勾股定理。
/// <summary>  
/// 根据余弦定理求两个线段夹角  
/// </summary>  
/// <param name="o">端点</param>  
/// <param name="s">start点</param>  
/// <param name="e">end点</param>  
/// <returns></returns>  
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;  
    }  
}  


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值