首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

【c++初学者】【急】输入几个点坐标,得出封闭多边形的面积

2014-05-11 
【c++菜鸟】【急!】输入几个点坐标,得出封闭多边形的面积#include#includeusing namespace

【c++菜鸟】【急!】输入几个点坐标,得出封闭多边形的面积
#include<iostream>
#include<math.h>
using namespace std ;  
   
 // 按照时针方向输入多边形顶点  
 // 凸多边形或凹多边形 都使用多边形面积公式  
  int n;// n是多边形顶点的数目
  float x;
  float y;// x, y分别是多边形顶点坐标的x,y坐标数组
  int i;
  int valeur;
  float s; 
void main()
{
  cout<<"on va calculer Area du Polygone a n cotés"<<endl;
cout<<"please Use , to separate xi and yi/utilisez , d'ouverture xi et yi"<<endl;
cout<<"n=";//在屏幕上显示n=
cin>>valeur;//用键盘输入n的数值
n=valeur;//程序运行到这里都正确

//想要在屏幕上显示“x[i],y[i]= ”再从键盘输入x[i],y[i]的数值,跳行。然后i变为1+i,循环显示、输入
for(i=1;i<=n;i=i+1)
{cout<<"x[i],y[i]=";
cin>>"x">>" ">>"y";
cout<<endl;//运行达不到预定目的,?是否要将点坐标弄成2维向量,建立stuct?怎么实行呢?
}
}

//把上诉的点坐标值代入(点p[i]按顺时针方向排列),计算n变形面积的程序

#include<iostream>
#include<math.h>
using namespace std ; 

 // voucnt是多边形顶点的数目  
 // x, y分别是多边形顶点坐标的x,y坐标数组  
 // 按照逆时针方向输入多边形顶点  
 // 可以是凸多边形或凹多边形  
// 多边形面积的计算公式如下:设有n个点(x[1],y[1])(x[2],y[2]),...(x[n],y[n])围成一个没有边相交的多边形,
//则其围成的闭合多边形面积|S| 为:
//
// n  
// S=1/2 abs[∑ (xi*yi+1- xi+1*yi)]  
// i=1  
 //其中i=1,2,...n,且当i与j除以n的余数相同的时候,x[i]=x[j],y[i]=y[j],即x[n+1]=x[1],。
//该公式用于凸凹多边形均可。 展开公式:
//S=0.5*abs(x1*y2-y1*x2+x2*y3-y2*x3+...+xn*y1-yn*x1) 


//下面是网络上的计算犯法,我不知道怎么把它用起来,
//与前面写的结合成为一个按序输入点坐标就能计算得出面积,并在屏幕上显示数值

 float area_of_polygon(int vcount,float x[],float y[])  
  {  
  int i;  
  float s;  
  if (vcount<3) return 0;  
  s=y[0]*(x[vcount-1]-x[1]);  
  for (i=1;i<vcount;i++)  
  s+=y[i]*(x[(i-1)]-x[(i+1)%vcount]);  
  return s/2;  
  }  

class CMyPolygon{  
  CMyPoint *v;  
  int m_count;  
  public:  
  double area();  
  ...  
  };  
  double CMyPoint::area()  
  {  
  double a=0.0;  
  if(m_count<3)return 0.0;  
  int i;  
  for(i=0;i<m_count;i++)  
  {  
  a+=(v[(i+1)%m_count].x-v[i].x)*(v[(i+1)%m_count].y+v[i].y);  
  }  
  a/=2.0;  
  return a;  
  }




//我自己写的计算面积,不过没写出来,汗!!!



  int vcount;
  float x[];
  float y[];
  int i;  
  float s; 
void main()
  {  
cin>>x>>y;
  if (vcount<3) { return 0;  
}else{  
for (i=1;i<vcount;i++) { s=o;
  s+=y[i]*x[(i-1)]-x[(i)]*y[i+1]; 
return s;}
return fabs(s/2)

  }

[解决办法]
}
/********************************************\
* *
* 计算多边形的面积 *
* 要求按照逆时针方向输入多边形顶点 *
* 可以是凸多边形或凹多边形 *
* *
\********************************************/
double area_of_polygon(int vcount,double x[],double y[],Lpoint plg[])


{
int i;
double s;
if (vcount<3) return 0;
s=plg[0].y*(plg[vcount-1].x-plg[1].x);
for (i=1;i<vcount;i++)
s+=plg[i].y*(plg[(i-1)].x-plg[(i+1)%vcount].x);
return s/2;
}

[解决办法]
帮你 顶下,偶不会呵呵!
[解决办法]
for (i=1;i<vcount;i++) { s=o;
s+=y[i]*x[(i-1)]-x[(i)]*y[i+1];
return s;}

这里写的乱七八糟的,s=0是赋初值,怎么可以放在循环里面
另外,return也不能放在循环里啊
[解决办法]
不好意思了,实在看不懂LZ写的公式.
求多边形面积不是一向使用梯形计算的吗?
线性复杂度.
[解决办法]
http://topic.csdn.net/u/20100319/15/a75ce2a9-d8f5-48be-a060-eda900b41d6e.html
代码

C/C++ code
  a[n].x=a[0].x;a[n].y=a[0].y; //(a[i].x,a[i].y)顶点i的坐标,i=0,1...n-1,n(也即0点,使多边形闭合)   s=0;   for(i=1;i<=n;i++)      s+=(a[i-1].x+a[i].x)*(a[i].y -a[i -1].y);   s=0.5*abs(s) 

热点排行