求救:已知一个任意边形的各个顶点坐标,如何求它的面积

时间:2021-11-02 00:17:03
问题与标题
我的头都想破了,诚请各位大侠,老师给予算法.
谢谢!

6 个解决方案

#1


typedef struct{
double x;
double y;
}Point;
double det(Point a,Point b,Point c)//叉积
{
    return (a.x*b.y+b.x*c.y+c.x*a.y-a.y*b.x-b.y*c.x-c.y*a.x);
}
double Sarea(int n,Point p[])//计算由n个顶点构成的任意多边形的面积
{
    double s=0.0;
    int i;
    for(i=1;i<n-1;i++)
s+=det(p[0],p[i],p[i+1]);
    s/=2.0;
    s=fabs(s);
    return s;
}

#2


定义:已知三点A(x1,y1)、B(x2,y2)、C(x3,y3)

       |x1 x2 x3|
  则S(A,B,C) = |y1 y2 y3| = (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3)
       |1  1  1 |
解决:
    在平面上任意取一点P(取原点最好),多边形为A1A2A3、、、An(顺时针或逆时针都可以),
    的面积S = abs(S(A1,A2,P) + S(A2,A3,P) + 、、、+S(An-1,An,P) + S(An,A1,P)) / 2

#3


输上去就变了,S(A,B,C)是一个行列式

#4


hunton不用那么麻烦啊,不需要第三行 1 1 1 那个直接这样
.      |x1  y1 |      |x2 y2|            |xn yn|
.s1 =  |       |   +  |     | + ...... + |     |
.      |x2  y2 |      |x3 y3|            |x1 y1|

面积就是fabs(s1)*0.5

#5


适用于简单多边形

哦,本质是一样的,p是原点的时候,就退化成为上面的公式

#6


分割成三角形之后求出面积加起来

#1


typedef struct{
double x;
double y;
}Point;
double det(Point a,Point b,Point c)//叉积
{
    return (a.x*b.y+b.x*c.y+c.x*a.y-a.y*b.x-b.y*c.x-c.y*a.x);
}
double Sarea(int n,Point p[])//计算由n个顶点构成的任意多边形的面积
{
    double s=0.0;
    int i;
    for(i=1;i<n-1;i++)
s+=det(p[0],p[i],p[i+1]);
    s/=2.0;
    s=fabs(s);
    return s;
}

#2


定义:已知三点A(x1,y1)、B(x2,y2)、C(x3,y3)

       |x1 x2 x3|
  则S(A,B,C) = |y1 y2 y3| = (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3)
       |1  1  1 |
解决:
    在平面上任意取一点P(取原点最好),多边形为A1A2A3、、、An(顺时针或逆时针都可以),
    的面积S = abs(S(A1,A2,P) + S(A2,A3,P) + 、、、+S(An-1,An,P) + S(An,A1,P)) / 2

#3


输上去就变了,S(A,B,C)是一个行列式

#4


hunton不用那么麻烦啊,不需要第三行 1 1 1 那个直接这样
.      |x1  y1 |      |x2 y2|            |xn yn|
.s1 =  |       |   +  |     | + ...... + |     |
.      |x2  y2 |      |x3 y3|            |x1 y1|

面积就是fabs(s1)*0.5

#5


适用于简单多边形

哦,本质是一样的,p是原点的时候,就退化成为上面的公式

#6


分割成三角形之后求出面积加起来