我的头都想破了,诚请各位大侠,老师给予算法.
谢谢!
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;
}
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
|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
. |x1 y1 | |x2 y2| |xn yn|
.s1 = | | + | | + ...... + | |
. |x2 y2 | |x3 y3| |x1 y1|
面积就是fabs(s1)*0.5
#5
适用于简单多边形
哦,本质是一样的,p是原点的时候,就退化成为上面的公式
哦,本质是一样的,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;
}
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
|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
. |x1 y1 | |x2 y2| |xn yn|
.s1 = | | + | | + ...... + | |
. |x2 y2 | |x3 y3| |x1 y1|
面积就是fabs(s1)*0.5
#5
适用于简单多边形
哦,本质是一样的,p是原点的时候,就退化成为上面的公式
哦,本质是一样的,p是原点的时候,就退化成为上面的公式
#6
分割成三角形之后求出面积加起来