已知任意一个多边形的各个顶点的坐标,怎么去求该多边形的面积?(写下代码和思想--C语言)

如题所述

叉乘(或者叫向量积)设多边形的点按某顺序依次是(x1,y1),(x2,y2),...,(xn,yn)我们任选一个点和每条边相连,相邻的边做叉乘再除以2(构成三角形的有向面积),一般我们选原点(0,0)则面积S=(x1y2-x2y1)/2+(x2y3-x3y2)/2+...+(xny1-x1yn)/2这里S是有向面积 还要取绝对值程序很简单了 如果数组标号是0到n-1则double s=0;for (int i=0;i<n;i++) s+=((double)x[i]*y[(i+1)%n]-(double)x[(i+1)%n]*y[i])/2;s=fabs(s);
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-18
#include<iostream.h>
#include<math.h>
#include<iomanip.h>

struct POINT
{
double x;
double y;
}p[1000];

struct LINESEG //边
{
POINT s;
POINT e;
};

double multiply(POINT sp,POINT ep,POINT op)
{
return ((sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y));
}

double Max(double p1,double p2)
{
return p1>p2?p1:p2;
}
double Min(double p1,double p2)
{
return p1<p2?p1:p2;
}
bool intersect(LINESEG u,LINESEG v)
{ return//((一条线段的最大值要大于另一线段的最小值)

//排斥实验
(Max(u.s.x,u.e.x)>=Min(v.s.x,v.e.x))&&
(Max(v.s.x,v.e.x)>=Min(u.s.x,u.e.x))&&
(Max(u.s.y,u.e.y)>=Min(v.s.y,v.e.y))&&
(Max(v.s.y,v.e.y)>=Min(u.s.y,u.e.y))&&
//跨立实验
(multiply(v.s,u.e,u.s)*multiply(u.e,v.e,u.s)>=0)&&
(multiply(u.s,v.e,v.s)*multiply(v.e,u.e,v.s)>=0);
}
//这里使用了归纳x0y1-x1y0+x1y2-x2y1+x2y3-x3y2+x3y0-x0y3=
//(x3-x1)y0+(x0-x2)y1+(x1-x3)y2+(x2-x0)y3
double area_of_polygon(int vcount,POINT polygon[])
{
int i;
double s=0.00;
if (vcount<3) return 0;
for(i=0;i<vcount;i++)
s+=polygon[i].x*polygon[i+1].y-polygon[i+1].x*polygon[i].y;
return s/2;
}

bool issimple(int vcount,POINT polygon[])
{
int i,cn;
LINESEG l1,l2;
for(i=0;i<vcount;i++)
{
l1.s=polygon[i];
l1.e=polygon[(i+1)%vcount];
cn=vcount-3;//需要判断与边l1是否相交的边的条数
while(cn) //如果不相邻的两条边相交就退出,说明不是简单多边形
{
l2.s=polygon[(i+2)%vcount];
l2.e=polygon[(i+3)%vcount];
if(intersect(l1,l2))
break;
cn--;
}
if(cn)
return false;
}
return true;
}
int main()
{
int n,i,num;
num=0;
while(1)
{
cin>>n;
if(n==0)
break;
num++;
for(i=0;i<n;i++)
cin>>p[i].x>>p[i].y;
cout<<"Figure "<<num<<": ";
cout<<setiosflags(ios::fixed)<<setprecision(2);
if(issimple(n,p))
{
cout<<fabs(area_of_polygon(n,p))<<endl;
}
else
cout<<"Impossible"<<endl;
cout<<endl; //Print a blank line between each test cases.
//这里将n=0也看做一个case,因为0 <= n <= 1000,虽然n=0,不被处理
}
return 0;
}

这是网上找到的,经过测试可行,有一些小瑕疵,你可以自己改
他理论应该是:
平面上任意多边形面积为:

S = 1/2×( ( X1*Y2-X2*Y1 ) + … + ( Xk*Yk+1-Xk+1*Yk ) +
… + ( Xn*Y1-X1*Yn ) ) ---------- ①

注:书上多给出的是行列式|Xk Yk |的形式。
|Xk+1 Yk+1|

需要注意的是,如果一系列点按逆时针排列算出的是正面积,而如果是顺时针的话算出的则是一个负面积。
第2个回答  2013-08-22
用三角形的行列式面积算法来求

...怎么去求该多边形的面积?(写下代码和思想--C语言)
用叉乘(或者叫向量积)设多边形的点按某顺序依次是(x1,y1),(x2,y2),...,(xn,yn)我们任选一个点和每条边相连,相邻的边做叉乘再除以2(构成三角形的有向面积),一般我们选原点(0,0)则面积S=(x1y2-x2y1)\/2+(x2y3-x3y2)\/2+...+(xny1-x1yn)\/2这里S是有向面积 还要取绝对值...

...怎么去求该多边形的面积?(写下代码和思想--C语言)
printf("多边形的面积是:%.2lf\\n", area);return 0;} ```这段代码首先定义了一个计算多边形面积的函数`calculatePolygonArea`,它接受顶点的数量和一个包含x坐标和y坐标的数组。然后,在`main`函数中,程序从用户那里获取多边形的顶点数和坐标,并调用`calculatePolygonArea`函数来计算面积并输出结果。

如何利用多边形各顶点坐标求面积?最好有公式。
在数学领域,我们经常需要计算多边形的面积。对于任意多边形,我们可以使用一个称为“向量叉乘”的方法来求解。具体公式如下:1. 首先,列出多边形各个顶点的坐标,假设我们有n个顶点,坐标分别为 (X1, Y1), (X2, Y2), ..., (Xn, Yn)。2. 接着,我们计算每对相邻顶点的向量叉乘,即 (X1-X2...

怎么利用多边形顶点坐标求多边形面积
为了计算一个多边形的面积,可以使用多边形顶点坐标的行列式方法。给定一个N边形,其各个顶点的坐标分别为(x1, y1), (x2, y2), (x3, y3), ..., (xn, yn),则该多边形的面积可以通过以下行列式公式计算:S = (1\/2) | x1 y1 | | x2 y2 | | x3 y3 | ...| xn yn | 其中,| ...

已知多边形各顶点坐标如何计算多边形面积
多边形的面积可通过分割成很多个三角形面积之和来求得!通过多边形各顶点坐标可以求得各边长,再采用海伦公式,计算分割后的小三角形的面积。海伦公式如下:假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得: S=sqrt(p(p-a)(p-b)(p-c))公式中的p为半周长: ...

利用多边形顶点坐标计算多边形面积的方法
1. 多边形的顶点坐标需要在格点上,即坐标的每个分量都是整数。2. 多边形的边界是由格点组成的,边上的点指的是多边形边缘上的格点。3. 多边形内部的点是指那些不在边界上的格点。为了计算多边形的面积,可以先使用一个辅助公式来确定边界上格点的数量,该公式为:\\[ \\text{格点数} = \\text{gcd}(...

多边形面积公式已知多边形各顶点的坐标值,求面积
对于外切正方形,面积为4R²,内接正方形面积为2R²。对于五边形以上的多边形,可以将其分割成等边三角形来计算,使用内角和公式——(n-2) * 180°。已知三个点A(x1,y1)、B(x2,y2)、C(x3,y3)的面积公式为:S(A,B,C) = |x1x2x3| * |y1y2y3| * 0.5 = [(x1-x3)(...

任意多边形怎么求面积
5,点击CAD上面域求面积菜单就可以通过求出你的多边形面积了。6,打印和一般CAD图没有什么区别,建议用选定窗口打印。问题二:已知任意一个多边形的各个顶点的坐标,怎么去求该多边形的面积?(写下代码和思想--C语言) 用叉乘(或者叫向量积)设多边形的点按某顺序依次是(x1,y1),(x2,y2),......

任意多边形怎么求面积
问题一:已知任意多边形的边长,如何计算面积?1. 将多边形的各顶点坐标在EXCEL中以(X,Y)格式列出,确保至少有一个点可以作为原点。2. 在CAD软件中输入PL命令或点击多段线图标,以绘制多边形。3. 将EXCEL中的坐标数据复制并粘贴到CAD命令栏,软件会自动生成多边形。4. 选择多边形并将其转换为面域。5...

如何求任意多边形的面积?
1. 要在坐标系内求解n边形的面积,首先选取多边形中的一组顶点作为起点,通常选择含有一个顶点的(x0, y0)。2. 接着,从这个顶点出发,向其他顶点连线,将多边形分割成(n-2)个三角形。3. 对于每个三角形,确定另外两个顶点的坐标,分别记为(x1, y1)和(x2, y2)。4. 利用向量叉乘的绝对值...

相似回答