Optics() : m_osNext(0) { const int N = 1024 * 8; // objSet = new Obj[N]; m_reachDist = new float[N]; m_coreDist = new float[N]; m_flags = new char[N]; m_mosPtr.resize(N); memset( m_flags, 0, sizeof( char ) * N ); m_orderedSet = new int[N]; // Random rnd = new Random(); // for( int i = 0; i < N; i++ ) { // objSet[i] = new Point( rnd.nextFloat(), rnd.nextFloat() ); // } float p[] = {1,4,6,2,5,7,1.5,3,4.5,6.5,1.7}; for( int i = 0; i < N; i++ ) { // m_objSet.push_back(new Point( p[i] )); m_objSet.push_back( new Point(randf()/*, randf()*/) ); } for( int i = 0; i < N; i++ ) { printf( "expand: %d %d\n", i, N ); if( !hasProcessed(i) ) { expandClusterOrder( i, 1.1, 1 ); } } }
void OPTICSFilter::filter(const std::string& seedString) { auto it = _unprocessedObjects.begin(); while (_unprocessedObjects.empty() == false) { OPTICSObject_Ptr node = *it; if (node->processed) { it = _unprocessedObjects.erase(it); continue; } expandClusterOrder(node); } assert(_orderedObjects.size() == _opticsObjects.size()); // extract clusters via DBSCAN _locations->clear(); extractDBSCANClustering(seedString); }