代码改变世界

三角形ABC几个重要的"点"

2006-12-23 21:18  老博客哈  阅读(1233)  评论(3编辑  收藏  举报

三角形ABC几个重要的点
设三角形的三条边为a, b, c,且不妨假设a <= b <= c,
三角形的面积可以根据海伦公式算得,如下:
s = sqrt(p * (p - a) * (p - b) * (p - c)), p = (a + b + c) / 2
下面是计算该点到三角形三个顶点A,B,C的距离之和(从上海交大2004 Programming Contest
抽取出来的)
1. 费马点(该点到三角形三个顶点的距离之和最小)
有个有趣的结论:若三角形的三个内角均小于120度,
那么该点连接三个顶点形成的三个角均为120度;若三角形存在一个内角
大于120度,则该顶点就是费马点)
计算公式如下:
若有一个内角大于120度(这里假设为角C),则距离为a + b
若三个内角均小于120度,则距离为
sqrt((a * a + b * b + c * c + 4 * sqrt(3.0) * s) / 2),其中

2.内心----角平分线的交点
令x = (a + b - c) / 2, y = (a - b + c) / 2, z = (-a + b + c) / 2, h = s / p
 计算公式为 sqrt(x * x + h * h) + sqrt(y * y + h * h) + sqrt(z * z + h * h)

3.重心----中线的交点
计算公式如下:
2.0 / 3 * (sqrt((2 * (a * a + b * b) - c * c) / 4)
        + sqrt((2 * (a * a + c * c) - b * b) / 4)
        + sqrt((2 * (b * b + c * c) - a * a) / 4))

4.垂心----垂线的交点
计算公式如下:
3 * (c / 2 / sqrt(1 - cosC * cosC))