算法竞赛模板 图形面积计算
①三角形-海伦公式(已知三边)
公式中a,b,c分别为三角形三边长,p为半周长,S为三角形的面积。
ps:因为有根号的出现,精度损失较大!!
double STriangle(double a,double b,double c) { double p=(a+b+c)*0.5; double s=sqrt(p*(p-a)*(p-b)*(p-c)); return s; }
②三角形-二阶行列式算法(已知三点坐标)
设A(x1,y1),B(x2,y2),C(x3,y3) 在坐标系中中顺序为三点按逆时针排列;
公式:S = fabs( 0.5*[(x1y2-x2y1) + (x2y3-x3y2) + (x3y1-x1y3)] )
struct point{ double x,y; }; double STriangle(point a,point b,point c) { return 0.5*fabs((a.x*b.y-b.x*a.y)+(b.x*c.y-c.x*b.y)+(c.x*a.y-a.x*c.y)); }
③正多边形-通式(已知边长)
假设正多边形边长是x
(1) 把正n边形先分成n个三角形
(2) 每个小三角形对应的圆心角是2π/n,所以三角形的高就是 (x/2)/tan(π/n)
(3) 三角形面积是 1/2*x*(x/2)/tan(π/n) = x²/[4tan(π/n)]
(4) 从而正n边形面积是 S = nx²/[4tan(π/n)]
#define pi acos(-1) double pic(int n,double x) { return n*x*x/(4.0*tan(pi/n)); }