0%

海伦公式

海伦公式

$$ S = \sqrt{p(p-a)(p-b)(p-c)} $$

假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下海伦公式求得,其中p为半周长(周长的一半)$p=\frac{a+b+c}{2}$

  1. $x=a-y$
  2. $ha^2=c^2-x^2$
  3. $ha^2=b^2-x^2$

  1. $x=\frac{a^2+c^2-b^2}{2a}$

  2. $y=\frac{a^2-c^2+b^2}{2a}$

  3. $h_a=\frac{\sqrt{4a^2b^2-(a^2-c^2+b^2)}}{2a}$

  1. $S_{ABC} = \frac{1}{2}ah_a$
  2. $h_a=\frac{\sqrt{4a^2b^2-(a^2-c^2+b^2)}}{2a}$

$S_{ABC} = \sqrt{p(p-a)(p-b)(p-c)}$

代码

1
2
3
4
5
6
7
8
9
// 海伦公式
// p0 p1 p2 为三角形的三个顶点坐标
function area(p0, p1, p2) {
let a = Math.sqrt((p0[0] - p1[0])*((p0[0] - p1[0])) + (p0[1] - p1[1])*((p0[1] - p1[1])));
let b = Math.sqrt((p0[0] - p2[0])*((p0[0] - p2[0])) + (p0[1] - p2[1])*((p0[1] - p2[1])));
let c = Math.sqrt((p1[0] - p2[0])*((p1[0] - p2[0])) + (p1[1] - p2[1])*((p1[1] - p2[1])));
let p = (a + b + c) / 2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
1
2
3
4
5
// 海伦公式
// a b c p 即为海伦公式中的 a b c p
function area(a, b, c, p) {
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}