/**
* @brief 进行一次聚类迭代, 获得新聚类中心点数组
*
* @param points 所有点的数组
* @param last 上一次的聚类中心点的数组
* @return 新聚类中心点数组
*/
vector<Point> update(vector<Point> &points, const vector<Point> &last){
int k=last.size();
vector<vector<Point>>cluster(k);
for(auto &p:points){//注意auto的使用,浅拷贝
vector<double>dis(k);
for(int i=0;i<k;i++){
dis[i]=p.distance(last[i]);
}
int idx=0;
for(int i=1;i<k;i++){
if(dis[i]<dis[idx])idx=i;
}
p.groupId=idx;
cluster[idx].push_back(p);
}
int dimension=points[0].coordinate.size();
vector<Point>newCenters(k);
for(int i=0;i<k;i++){
Point center;
for(int j=0;j<dimension;j++){
double sum=0;//
for(auto &p:cluster[i]){
sum+=p.coordinate[j];
}
center.coordinate.push_back(sum/cluster[i].size());
}
center.groupId=i;
newCenters[i]=center;
}
return newCenters;
}