在二维坐标系中,已知三角形的三个点A、B、C的坐标分别为 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x1,y1),(x2,y2),(x3,y3) (x1,y1),(x2,y2),(x3,y3),三角形的面积公式为:
法一: S = 1 2 ∣ x 1 ( y 2 − y 3 ) + x 2 ( y 3 − y 1 ) + x 3 ( y 1 − y 2 ) ∣ S=frac12|x1(y2-y3)+x2(y3-y1)+x3(sfdbg)| S=21∣x1(y2−y3)+x2(y3−y1)+x3(y1−y2)∣法二:已知三个点坐标,可得三角形三条边长度 a 、 b 、 c a、b、c a、b、c,可得 p = a + b + c 2 p=frac{a+b+c}2 p=2a+b+c, p p p为三角形周长的一半,即S = p ( p − a ) ( p − b ) ( p − c ) S=sqrt{p(p-a)(p-b)(p-c)} S=p(p−a)(p−b)(p−c)
法一代码实现:
double TriangleArea(vector<double>& point1, vector<double>& point2, vector<double>& point3,) {return 0.5*(point1[0]*(point2[1]-point3[1])+point2[0]*(point3[1]-point1[1])+point3[0]*(point1[1]-point2[1]));}法二代码实现:
double GetLength(const vector<double>& p1, const vector<double>& p2){int x=p1[0]-p2[0]; int y=p1[1]-p2[1]; return sqrt(x*x+y*y);}double TriangleArea(vector<double>& point1, vector<double>& point2, vector<double>& point3,) {double a=GetLength(point1,point2);double b=GetLength(point1,point3);double c=GetLength(point2,point3);double p=0.5*(a+b+c);return sqrt(p*(p-a)*(p-b)*(p-c));}