如下图所示,在△ABC中,余弦定理可表示为:
![](https://i-blog.csdnimg.cn/blog_migrate/718c1706f753ccca5792e446b59ad063.png)
同理,也可描述为:
![](https://i-blog.csdnimg.cn/blog_migrate/2f94ca30c1b9ea6427ce3ee8e7e9e080.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d50084f5f06a612998c6a5e06be37e7f.png)
当
为
时,
,余弦定理可简化为
,即勾股定理。
![](https://i-blog.csdnimg.cn/blog_migrate/30df7af7ec6ebe9e4143c211e4a964ad.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5e42e5c4723293852dea9cd19829475e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2e0afbe371bd286a65245ad9ae40a934.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0a9242bc7e0c36c7deb151c7ed1c0f06.png)
/// <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;
}
}