for ( int i = 0; i < numPoints; ++i )
{
for ( int d = 0; d < numDimensions; ++d )
p[ d ] = rnd.nextFloat() * size + min;
final RealPoint t = new RealPoint( p );
points.add( t );
}
long start = System.currentTimeMillis();
final KDTree< RealPoint > kdTree = new KDTree< RealPoint >( points, points );
final NearestNeighborSearchOnKDTree< RealPoint > kd = new NearestNeighborSearchOnKDTree< RealPoint >( kdTree );
final long kdSetupTime = System.currentTimeMillis() - start;
System.out.println( "kdtree setup took: " + ( kdSetupTime ) + " ms." );
start = System.currentTimeMillis();
final ArrayList< RealPoint > testpoints = new ArrayList< RealPoint >();
for ( int i = 0; i < numTests; ++i )
{
for ( int d = 0; d < numDimensions; ++d )
p[ d ] = rnd.nextFloat() * 2 * size + min - size / 2;
final RealPoint t = new RealPoint( p );
testpoints.add( t );
}
for ( final RealPoint t : testpoints )
{
kd.search( t );
final RealPoint nnKdtree = kd.getSampler().get();
final RealPoint nnExhaustive = findNearestNeighborExhaustive( points, t );
boolean equal = true;
for ( int d = 0; d < numDimensions; ++d )
if ( nnKdtree.getFloatPosition( d ) != nnExhaustive.getFloatPosition( d ) )
equal = false;
if ( !equal )
{
System.out.println( "Nearest neighbor to: " + t );
System.out.println( "KD-Tree says: " + nnKdtree );
System.out.println( "Exhaustive says: " + nnExhaustive );
return false;
}
}
final long compareTime = System.currentTimeMillis() - start;
System.out.println( "comparison (kdtree <-> exhaustive) search took: " + ( compareTime ) + " ms." );
start = System.currentTimeMillis();
for ( final RealPoint t : testpoints )
{
kd.search( t );
final RealPoint nnKdtree = kd.getSampler().get();
nnKdtree.getClass();
}
final long kdTime = System.currentTimeMillis() - start;
System.out.println( "kdtree search took: " + ( kdTime ) + " ms." );
System.out.println( "kdtree all together took: " + ( kdSetupTime + kdTime ) + " ms." );
start = System.currentTimeMillis();
for ( final RealPoint t : testpoints )
{
final RealPoint nnExhaustive = findNearestNeighborExhaustive( points, t );
nnExhaustive.getClass();
}
final long exhaustiveTime = System.currentTimeMillis() - start;
System.out.println( "exhaustive search took: " + ( exhaustiveTime ) + " ms." );
return true;