812. 最大三角形面积
给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。
示例: 输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]] 输出: 2 解释: 这五个点如下图所示。组成的橙色三角形是最大的,面积为2。
注意: 3 <= points.length <= 50. 不存在重复的点。 -50 <= points[i][j] <= 50. 结果误差值在 10^-6 以内都认为是正确答案。
方法:
1.已知三角形底a,高h,则
2.已知三角形三边a,b,c,则
(海伦公式)(
)
S=sqrt[p(p-a)(p-b)(p-c)]
=sqrt[(1/16)(a+b+c)(a+b-c)(a+c-b)(b+c-a)]
=1/4sqrt[(a+b+c)(a+b-c)(a+c-b)(b+c-a)]
3.已知三角形两边a,b,这两边夹角C,则
,即两夹边之积乘夹角正弦值的一半。
4.设三角形三边分别为a、b、c,内切圆半径为r
则三角形面积
5.设三角形三边分别为a、b、c,外接圆半径为R
则三角形面积=abc/4R
S=2R²·sinA·sinB·sinC
6.行列式形式
为三阶行列式,此三角形ABC
在平面直角坐标系内
,这里ABC选取最好按逆时针顺序从右上角开始取,因为这样取得出的结果一般都为正值,如果不按这个规则取,可能会得到负值,但不要紧,只要取绝对值就可以了,不会影响三角形面积的大小。该公式的证明可以借助“两夹边之积乘夹角的正弦值”的面积公式 [1] 。
7.海伦——秦九韶三角形中线面积公式:
S=√[(Ma+Mb+Mc)(Mb+Mc-Ma)(Mc+Ma-Mb)*(Ma+Mb-Mc)]/3
其中Ma,Mb,Mc为三角形的中线长.
8.根据三角函数求面积:
S= ½ab sinC=2R² sinAsinBsinC= a²sinBsinC/2sinA
注:其中R为外接圆半径。
9.根据向量求面积:
其中,(x1,y1,z1) 与 (x2,y2,z2) 分别为向量 AB 与 AC 在空间直角坐标系下的坐标表达,即:
向量邻边构成三角形面积等于向量邻边构成平行四边形面积的一半
海伦公式的推理
已知三角形三边a,b,c,则:
(海伦公式)(p=(a+b+c)/2)
S=sqrt[p(p-a)(p-b)(p-c)]
=sqrt[(1/16)(a+b+c)(a+b-c)(a+c-b)(b+c-a)]
=1/4sqrt[(a+b+c)(a+b-c)(a+c-b)(b+c-a)]
思路:
要求三角形面积,要知道公式,我们这道题就用第六种方法
把每三点一个三角形大小求出来,然后找出最大的
代码:
var largestTriangleArea = function(points) {
const n = points.length;
let ret = 0.0;
//三次循环找出最大面积
for (let i = 0; i < n; i++) {
for (let j = i + 1; j < n; j++) {
for (let k = j + 1; k < n; k++) {
ret = Math.max(ret, triangleArea(points[i][0], points[i][1], points[j][0], points[j][1], points[k][0], points[k][1]));
}
}
}
return ret;
};
//求三角形面积
const triangleArea = (x1, y1, x2, y2, x3, y3) => {
return 0.5 * Math.abs(x1 * y2 + x2 * y3 + x3 * y1 - x1 * y3 - x2 * y1 - x3 * y2);
}
代码参考LeetCode官网