http://en.wikipedia.org/wiki/Centroid#Centroid_of_polygonКак вычислить центроид многоугольника, если заданы вершины многоугольника?
Я посетил выше ссылку и пытался осуществить формулу сформулировать центроид не-самопересекающийся замкнутого многоугольник, определенный п вершин (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.
Я бы инициализировал 'a r', 'x' и' y' до нуля, прежде чем использовать '+ ='. –
из статьи wiki. - «Центроид несамопересекающегося замкнутого многоугольника». Точки, которые вы ввели, являются самопересекающимися многоугольниками FYI ... http://www.wolframalpha.com/input/?i=plot+%280%2C1%29 % 2C% 281% 2C0% 29% 2C% 28-1% 2C0% 29 + и +% 280% 2C-1% 29 – corn3lius