#include<iostream>
#include<cmath>
using namespace std;
struct point{
double x,y;
point (double xx=0,double yy=0){
x=xx; y=yy;
}
double operator *(point b){
return x*b.y-y*b.x;
}
}p[1000001];
int main()
{
int T,N,i;
scanf("%d",&T);
while(T--)
{
scanf("%d",&N);
for(i=0;i<N;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
p[N].x=p[0].x; p[N].y=p[0].y;
double area=0;
point re;
for(i=0;i<N;i++)
{
area+=p[i]*p[i+1];
re.x+=(p[i].x + p[i+1].x)* (p[i]*p[i+1]);
re.y+=(p[i].y + p[i+1].y)* (p[i]*p[i+1]);
}
area/=2;
re.x /= 6*area;
re.y /= 6*area;
printf("%.2lf %.2lf\n",re.x,re.y);
}
return 0;
}
#include<cmath>
using namespace std;
struct point{
double x,y;
point (double xx=0,double yy=0){
x=xx; y=yy;
}
double operator *(point b){
return x*b.y-y*b.x;
}
}p[1000001];
int main()
{
int T,N,i;
scanf("%d",&T);
while(T--)
{
scanf("%d",&N);
for(i=0;i<N;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
p[N].x=p[0].x; p[N].y=p[0].y;
double area=0;
point re;
for(i=0;i<N;i++)
{
area+=p[i]*p[i+1];
re.x+=(p[i].x + p[i+1].x)* (p[i]*p[i+1]);
re.y+=(p[i].y + p[i+1].y)* (p[i]*p[i+1]);
}
area/=2;
re.x /= 6*area;
re.y /= 6*area;
printf("%.2lf %.2lf\n",re.x,re.y);
}
return 0;
}
计算几何:多边形面积及质心
本文提供了一段C++代码实现,用于计算平面直角坐标系下多边形的面积及其质心坐标。该算法适用于计算任意简单多边形(不自相交)的面积,并通过矢量叉乘的方式找到质心位置。
519

被折叠的 条评论
为什么被折叠?



