海伦公式
$$ S = \sqrt{p(p-a)(p-b)(p-c)} $$
假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下海伦公式求得,其中p为半周长(周长的一半)$p=\frac{a+b+c}{2}$
由
- $x=a-y$
- $ha^2=c^2-x^2$
- $ha^2=b^2-x^2$
得
$x=\frac{a^2+c^2-b^2}{2a}$
$y=\frac{a^2-c^2+b^2}{2a}$
$h_a=\frac{\sqrt{4a^2b^2-(a^2-c^2+b^2)}}{2a}$
因
- $S_{ABC} = \frac{1}{2}ah_a$
- $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
|
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
|
function area(a, b, c, p) { return Math.sqrt(p * (p - a) * (p - b) * (p - c)); }
|