gpt4 book ai didi

c - 如果给定多边形的顶点,如何计算多边形的质心?

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:24 28 4
gpt4 key购买 nike

http://en.wikipedia.org/wiki/Centroid#Centroid_of_polygon

我访问了上面的链接并尝试实现公式来制定由 n 个顶点定义的非自相交闭合多边形的质心 (x0,y0), (x1,y1), ..., (xn− 1,yn−1).

例如,如果坐标是:(0,1),(1,0),(-1,0)(0,-1),得到的质心坐标应该是:0.00 0.00

#include<stdio.h>
#include<iostream>
#include<utility>
using namespace std;
int main()
{
int t,points;
scanf("%d",&points);
pair<float,float>p[points];
int i;
for(i=0;i<points;i++)
{
scanf("%f %f",&p[i].first,&p[i].second);

}
float ar,x,y;
for(i=0;i<points-1;i++)
{
ar+=(p[i].first*p[i+1].second-(p[i+1].first*p[i].second));
x+=((p[i].first+p[i+1].first)*ar);
y+=((p[i].second+p[i+1].second)*ar);
}
x/=(3*ar);
y/=(3*ar);
printf("%.2f %.2f\n",x,y);
}

但是,当我针对给定坐标运行上述代码时,得到的质心坐标为:

-1。 -1.

最佳答案

您的代码中有几处需要更改:

  • 正如@R Sahu 所注意到的,arxy 必须在 for 之前初始化为零> 循环。否则,输出可能是错误的,或者它可能会在不同的运行中发生变化。
  • 在迭代 j 时,ar

eq

所以 x+=(p[i].first+p[i+1].first)*ar; 是错误的,因为它必须是:

eq2

In these formulas, the vertices are assumed to be numbered in order of their occurrence along the polygon's perimeter, and the vertex ( xn, yn ) is assumed to be the same as ( x0, y0 ).

由于最后一个点不等于程序中的第一个点,所以输出是错误的。没有任何东西可以确保这些点是按照它们在多边形周边出现的顺序输入的。

这里是g++ main.cpp -o main -Wall编译的代码。选项 -Wall 启用所有警告...用它来调试代码是一个好习惯。

#include<stdio.h>
#include<iostream>
#include<utility>
using namespace std;
int main()
{
int points;
//scanf("%d",&points);
points=4;
pair<float,float>p[points];
int i;
/* for(i=0;i<points;i++)
{
scanf("%f %f",&p[i].first,&p[i].second);
} */
p[0].first=1;p[0].second=0;
p[1].first=0;p[1].second=1;
p[2].first=-1;p[2].second=0;
p[3].first=0;p[3].second=-1;

float ar=0,x=0,y=0,temp;
for(i=0;i<points-1;i++)
{
temp=p[i].first*p[i+1].second-p[i+1].first*p[i].second;
ar+=temp;
x+=(p[i].first+p[i+1].first)*temp;
y+=(p[i].second+p[i+1].second)*temp;
}
temp=p[points-1].first*p[0].second-p[0].first*p[points-1].second;
ar+=temp;
x+=(p[points-1].first+p[0].first)*temp;
y+=(p[points-1].second+p[0].second)*temp;

x/=(3*ar);
y/=(3*ar);
printf("%.6f %.6f\n",x,y);
}

注意通过测试(1,0),(0,1),(-1,0),(0,-1)ar的正确性> 不确定...

关于c - 如果给定多边形的顶点,如何计算多边形的质心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28906308/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com