Ejemplo n.º 1
0
//--------------------------------------------------------------
void testApp::updateNearestNeighbors(){
	
	float *ptsx = &positionx[0];
	float *ptsy = &positiony[0];
	for (int i=0; i<nParticles; i++){
		dataPts[i][0] = *ptsx++; 
		dataPts[i][1] = *ptsy++; 
	}
	
	IppiSize roiAllNeighbors = {nParticles, nNearestNeighborsK};
	ippiSet_32s_C1R(-1, kNeighbors, particleStep32s, roiAllNeighbors);
	
	annMaxPtsVisit(nMaxPointsToVisit);
	kdTree = new ANNkd_tree(
							dataPts,			// point array
							nParticles,		// number of points
							nDimensions,		// dimension of space
							nBucketSize,		// bucket size
							ANN_KD_SUGGEST); // splitting rule
	
	int   indexa, indexb, indexc;
	float xa,ya,xb,yb;
	float dist = 0;
	RS.Clear();
	
	for (indexa =0; indexa < nParticles; indexa++){
		
		queryPt = dataPts[indexa]; 
		kdTree->annkSearch(							// search
						   queryPt,					// query point
						   nNearestNeighborsK,		// number of near neighbors
						   nnIdx,					// nearest neighbors (returned)
						   dists,					// distance (returned)
						   searchError);			// error bound
		
		for (int i=1; i<nNearestNeighborsK; i++) {
			indexb = nnIdx[i];
			if (indexb > indexa){

				dist = sqrt(dists[i]);				// unsquare distance
				RS.Push(dist);
				
				indexc = maxNParticles*i + indexa;
				kNeighbors[indexc] = indexb;
				kDistances[indexc] = dist;
		
			}
		}
	}
	
	averageInterParticleDistance = RS.Mean();
	stdevInterParticleDistance   = RS.StandardDeviation();
	
	
	
	
	
	
	
	delete kdTree;
	
}
Ejemplo n.º 2
0
void AnnPairAssignment::setMaxVisitPoints(unsigned int visitPoints)
{
    annMaxPtsVisit(visitPoints);
}