算法竞赛模板 图形面积计算

①三角形-海伦公式(已知三边)

formula

公式中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));
}

 

posted @ 2018-05-17 16:05  真想不出名字了  阅读(572)  评论(0编辑  收藏  举报