• 大小: 1.48MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-31
  • 语言: 其他
  • 标签: dbscan  二维坐标  

资源简介

实现二维空间坐标的聚类,对处于平面的二维点群进行分类

资源截图

代码片段和文件信息

/*
 * dbscan.cpp
 *
 *  Created on: 2013-3-18
 *      Author: Administrator
 */

#include “../head/dbscan.h“
#include “../head/datastruct.h“
#include 
#include 
#include 
using namespace std;
//导入数据
DataStruct* CDBscan::load_data(char filepath[])
{
FILE *fp;
DataStruct *head *p *q;
double x y;
fp = fopen(filepath “r“);
//判断文件句柄
if(fp == NULL)
{
cout<<“打开文件失败“< exit(0);
}
//
q = NULL;
while(fscanf(fp“%lf %lf\n“ &x &y) != EOF)
{
//为头节点申请空间
p = (DataStruct *)malloc(sizeof(DataStruct));
if(p == NULL)
{
cout<<“申请内存空间失败“< exit(0);
}
p->x = x;
p->y = y;
p->cluster_flag = -1;
p->next = q;
q = p;
}
printf(“数据导入成功\n“);
return q;
}
//初始化Eps返回数据个数
int CDBscan::init_eps(DataStruct *head)
{
DataStruct *p = head *q;
int notenum=0 n=0;
double eps;
while(p != NULL)
{
q = head;
p->link_head = NULL;
while(q != NULL)
{
eps = euclideanDistance(p q);
//将得到的值插入到距离链表中
p->link_head = insert_data(p->link_head sqrt(eps));
q = q->next;
n++;
if(n == 4)
break;
}
p = p->next;
notenum++;
}
printf(“notenum = %d\n“ notenum);
return notenum;
}
//获得eps
double CDBscan::get_eps(DataStruct *head int k int notenum)
{
Eps *p;
int i = 0 j = 0;
double eps;
while(head != NULL)
{
p = head->link_head;
while(p != NULL)

i++;
if(i == k)
{
eps = p->eps;
break;
}
else
p = p->next;
}
j++;
if(j == notenum)
break;
head = head->next;
}
return eps;
}
//插入每个点的距离数据
Eps* CDBscan::insert_data(Eps *head double data)
{
Eps *p=NULL *q=NULL *pre=NULL;
//申请内存空间
p = (Eps*)malloc(sizeof(Eps));
if(p == NULL)
{
printf(“申请内存失败\n“);
exit(0);
}
p->eps = data;
//进行排序插入
if(head == NULL)//说明是第一个节点
{
p->next = head; 
head = p;
}
else//进行从小到大排列
{
    q = head;
while(q != NULL)
{
//插入节点
if(p->eps <= q->eps)
{
break;
}
else
{
pre = q;
q = q->next;
}
}
//看是否是第一个节点
if(head == q)
{
p->next = head;
head = p;
}
//不是第一个节点
else
{
pre->next = p;
p->next = q;
}
}
return head;
}
//计算欧式距离
double CDBscan::euclideanDistance(DataStruct *point1 DataStruct *point2)
{
return sqrt( ((point1->x) - (point2->x)) * ((point1->x) - (point2->x)) + 
((point1->y) - (point2->y)) * ((point1->y) - (point2->y)) );
}

//标记核心点并删除离散点
DataStruct* CDBscan::core_point(DataStruct *head int k double eps)
{
DataStruct *p_head *q_head *p *pre *temp;
int n = 0;
double temp_eps;
//
pre = p_head = head; 
while(p_head)
{
q_head = head;
n = 0;
//检索和每个点的关系
while(q_head)
{
temp_eps = euclideanDistance(p_head q_head);
if(temp_eps <= eps)
n++;
q_head = q_head->next;

}//end while
//标记为核心点
if(n >= k)
{
//标记为和核心点
p_head->cluster_flag = 0;
//保存前驱节点
pre

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-03-19 21:16  dbscan\
     文件        9834  2012-05-04 11:24  dbscan\2008-09-11-GPS.plt
     文件     1444064  2012-05-04 11:24  dbscan\2009-4-26.plt
     文件     1444108  2013-03-19 19:48  dbscan\2009-4-26.txt
     文件        4489  2013-03-18 16:26  dbscan\dbscan.dsp
     文件         518  2013-03-18 14:19  dbscan\dbscan.dsw
     文件       50176  2013-03-19 20:38  dbscan\dbscan.ncb
     文件       50688  2013-03-19 20:38  dbscan\dbscan.opt
     文件         246  2013-03-19 19:21  dbscan\dbscan.plg
     目录           0  2013-03-19 19:21  dbscan\Debug\
     文件      299079  2013-03-19 19:21  dbscan\Debug\dbscan.exe
     文件      415840  2013-03-19 19:21  dbscan\Debug\dbscan.ilk
     文件       49661  2013-03-19 19:21  dbscan\Debug\dbscan.obj
     文件     2013820  2013-03-19 19:08  dbscan\Debug\dbscan.pch
     文件     1115136  2013-03-19 19:21  dbscan\Debug\dbscan.pdb
     文件       12915  2013-03-19 17:17  dbscan\Debug\main.obj
     文件       91136  2013-03-19 19:21  dbscan\Debug\vc60.idb
     文件      110592  2013-03-19 19:21  dbscan\Debug\vc60.pdb
     目录           0  2013-03-19 14:36  dbscan\head\
     文件         395  2013-03-18 13:55  dbscan\head\datastruct.h
     文件         874  2013-03-19 14:36  dbscan\head\dbscan.h
     文件      166430  2012-05-04 11:24  dbscan\OZI__20080620082025.plt
     文件       62964  2012-05-04 11:24  dbscan\PLT2008-5-17.plt
     目录           0  2013-03-19 19:21  dbscan\src\
     文件        9834  2012-05-04 11:24  dbscan\src\2008-09-11-GPS.plt
     文件        5971  2013-03-19 19:21  dbscan\src\dbscan.cpp
     文件        1088  2013-03-19 17:17  dbscan\src\main.cpp

评论

共有 条评论