去年暑假在准备机器人大赛的时候用到了KMeans算法,我们使用该算法来对地图进行分区,该算法的具体步骤如下:
1.随机的选取K个种子点作为初始聚类中心
2.然后求出所有的点到K个聚类中心的距离,找出离每个点最近的聚类中心作为该点的种群中心。
3.经过前两步就形成了K个点群,然后更新K个点群的中心。
4,重复步骤2和3直到满足一定的阈值。
开发环境 VS2012 + easyX
源代码如下:
#include<iostream>
#include<graphics.h>
#include<cmath>
#include<cstdlib>
#include<easyx.h>
#include<vector>
using namespace std;
//随机生成的点的数目
#define POINT_NUM 8000
//窗口的大小
#define WIDTH 600
#define HEIGHT 600
struct point
{
double x; //该点的X坐标
double y; //该点的Y坐标
int cluster; //该店所属聚类的索引
};
/**
绘制每个聚类所用的颜色
**/
COLORREF color[15]=
{
WHITE,YELLOW,RED,BLUE,GREEN,
BROWN,LIGHTCYAN,MAGENTA,LIGHTRED,
CYAN,LIGHTBLUE,LIGHTGREEN, DARKGRAY,
LIGHTMAGENTA,LIGHTGRAY,
};
//初始化聚类点
void initCluster(vector<struct point*>& pointList,int num);
//随机生成聚类中心
void generateCenter(vector<struct point*>& center,int Num);
//画出所有的点
void drawCluster(vector<struct point*>& pointList);
//获得一个聚类的中心
struct point* getCenter(vector<struct

本文介绍了在机器人大赛中应用KMeans算法进行地图分区的过程,详细阐述了算法的四个关键步骤,并提到了开发环境为VS2012,利用easyX库。通过随机选择种子点、计算点群距离、更新聚类中心,不断迭代直至满足停止条件。
最低0.47元/天 解锁文章
1474

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



