Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
KNN_Grid< T > Class Template Reference

#include <KNN_Grid.h>

Inheritance diagram for KNN_Grid< T >:
Collaboration diagram for KNN_Grid< T >:

Classes

class  KNNnbr
 

Public Member Functions

 KNN_Grid (Point3D m, Point3D M, int long_dim)
 
 KNN_Grid (Point3D m, Point3D M, int x_dim, int y_dim, int z_dim)
 
int insert (T &item, Point3D &p)
 
int insertRange (T &item, Point3D &p, Point3D &q, Point3D &r)
 
void clear ()
 
unsigned int k_nearest (Point3D &p, int k, vector< T > &nbrs)
 
vector< T > * get_cell_range (Point3D &p, Point3D &q)
 
vector< T > * get_cell (Point3D &p)
 
vector< T > * get_cell (UniformGrid::Index &p)
 
 KNN_Grid (Point3D m, Point3D M, int long_dim)
 
 KNN_Grid (Point3D m, Point3D M, int x_dim, int y_dim, int z_dim)
 
int insert (T &item, Point3D &p)
 
int insertRange (T &item, Point3D &p, Point3D &q, Point3D &r)
 
void clear ()
 
unsigned int k_nearest (Point3D &p, int k, vector< T > &nbrs)
 
vector< T > * get_cell_range (Point3D &p, Point3D &q)
 
vector< T > * get_cell (Point3D &p)
 
vector< T > * get_cell (UniformGrid::Index &p)
 

Private Types

typedef vector< T > SpaceCell
 
typedef unsigned int index_t
 
typedef NVec< 3, index_tIndex
 
typedef vector< T > SpaceCell
 
typedef unsigned int index_t
 
typedef NVec< 3, index_tIndex
 

Private Attributes

Point3D bbmin
 
Point3D bbmax
 
int cell_dim [3]
 
float cellsz [3]
 
SparseGrid< SpaceCell > * grid
 

Detailed Description

template<typename T>
class KNN_Grid< T >

Definition at line 164 of file Rocon/include/KNN_Grid.h.

Member Typedef Documentation

typedef NVec<3,index_t> Index
private

Definition at line 190 of file Rocon/include/KNN_Grid.h.

typedef NVec<3,index_t> Index
private

Definition at line 190 of file Rocprop/include/KNN_Grid.h.

typedef unsigned int index_t
private

Definition at line 189 of file Rocprop/include/KNN_Grid.h.

typedef unsigned int index_t
private

Definition at line 189 of file Rocon/include/KNN_Grid.h.

typedef vector< T > SpaceCell
private

Definition at line 188 of file Rocprop/include/KNN_Grid.h.

typedef vector< T > SpaceCell
private

Definition at line 188 of file Rocon/include/KNN_Grid.h.

Constructor & Destructor Documentation

KNN_Grid ( Point3D  m,
Point3D  M,
int  long_dim 
)
inline

Definition at line 203 of file Rocon/include/KNN_Grid.h.

204  :bbmin(m),bbmax(M)
205  {
206  //Construct a grid with square elements
207  Point3D box_len = bbmax-bbmin;
208  int max_dim;
209  // Find max length dimension of the grid
210  if ( box_len[0] > box_len[1])
211  max_dim = 0;
212  else
213  max_dim = 1;
214  if (box_len[2]>box_len[max_dim])
215  max_dim = 2;
216 
217  cellsz[max_dim] = box_len[max_dim]/((float) long_dim);
218  for(int i=0; i<3;i++){
219  cellsz[i] = cellsz[max_dim];
220  cell_dim[i] = (int)ceil(box_len[0]/cellsz[max_dim]); // ** maybe box_len[i] **
221  bbmax[i] = bbmin[i] + ((float) cell_dim[i]) * cellsz[i];
222  }
223  grid = new SparseGrid< SpaceCell >(cell_dim[0],cell_dim[1],cell_dim[2]);
224  grid->set_extent(bbmin,bbmax);
225  //cout << "Grid Extent \n";
226 
227  }
void set_extent(const Point3D &m, const Point3D &M)
blockLoc i
Definition: read.cpp:79
SparseGrid< SpaceCell > * grid
KNN_Grid ( Point3D  m,
Point3D  M,
int  x_dim,
int  y_dim,
int  z_dim 
)
inline

Definition at line 229 of file Rocon/include/KNN_Grid.h.

230  :bbmin(m),bbmax(M)
231  {
232  cell_dim[0]=x_dim;cell_dim[1]=y_dim;cell_dim[2]=z_dim;
233  grid = new SparseGrid< SpaceCell >(cell_dim[0],cell_dim[1],cell_dim[2]);
235  }
void set_extent(const Point3D &m, const Point3D &M)
SparseGrid< SpaceCell > * grid
KNN_Grid ( Point3D  m,
Point3D  M,
int  long_dim 
)
inline

Definition at line 203 of file Rocprop/include/KNN_Grid.h.

204  :bbmin(m),bbmax(M)
205  {
206  //Construct a grid with square elements
207  Point3D box_len = bbmax-bbmin;
208  int max_dim;
209  // Find max length dimension of the grid
210  if ( box_len[0] > box_len[1])
211  max_dim = 0;
212  else
213  max_dim = 1;
214  if (box_len[2]>box_len[max_dim])
215  max_dim = 2;
216 
217  cellsz[max_dim] = box_len[max_dim]/((float) long_dim);
218  for(int i=0; i<3;i++){
219  cellsz[i] = cellsz[max_dim];
220  cell_dim[i] = (int)ceil(box_len[0]/cellsz[max_dim]); // ** maybe box_len[i] **
221  bbmax[i] = bbmin[i] + ((float) cell_dim[i]) * cellsz[i];
222  }
223  grid = new SparseGrid< SpaceCell >(cell_dim[0],cell_dim[1],cell_dim[2]);
224  grid->set_extent(bbmin,bbmax);
225  //cout << "Grid Extent \n";
226 
227  }
void set_extent(const Point3D &m, const Point3D &M)
blockLoc i
Definition: read.cpp:79
SparseGrid< SpaceCell > * grid
KNN_Grid ( Point3D  m,
Point3D  M,
int  x_dim,
int  y_dim,
int  z_dim 
)
inline

Definition at line 229 of file Rocprop/include/KNN_Grid.h.

230  :bbmin(m),bbmax(M)
231  {
232  cell_dim[0]=x_dim;cell_dim[1]=y_dim;cell_dim[2]=z_dim;
233  grid = new SparseGrid< SpaceCell >(cell_dim[0],cell_dim[1],cell_dim[2]);
235  }
void set_extent(const Point3D &m, const Point3D &M)
SparseGrid< SpaceCell > * grid

Member Function Documentation

void clear ( )
inline

Definition at line 288 of file Rocon/include/KNN_Grid.h.

288  {
289  delete grid;
290  grid = new SparseGrid< SpaceCell >(cell_dim[0],cell_dim[1],cell_dim[2]);
292  }
void set_extent(const Point3D &m, const Point3D &M)
SparseGrid< SpaceCell > * grid
void clear ( )
inline

Definition at line 288 of file Rocprop/include/KNN_Grid.h.

288  {
289  delete grid;
290  grid = new SparseGrid< SpaceCell >(cell_dim[0],cell_dim[1],cell_dim[2]);
292  }
void set_extent(const Point3D &m, const Point3D &M)
SparseGrid< SpaceCell > * grid
vector<T>* get_cell ( Point3D p)
inline

Definition at line 370 of file Rocon/include/KNN_Grid.h.

370  {
371  return grid->locate_only(p);
372  }
CellData * locate_only(const Point3D &v)
SparseGrid< SpaceCell > * grid
vector<T>* get_cell ( Point3D p)
inline

Definition at line 370 of file Rocprop/include/KNN_Grid.h.

370  {
371  return grid->locate_only(p);
372  }
CellData * locate_only(const Point3D &v)
SparseGrid< SpaceCell > * grid
vector<T>* get_cell ( UniformGrid::Index p)
inline

Definition at line 374 of file Rocprop/include/KNN_Grid.h.

374  {
375  for(int i=0;i<3;i++)
376  if ((p[i] < 0) || (p[i] >= cell_dim[i]))
377  return NULL;
378  //cerr << "i get in here\n";
379  return grid->locate_index_only(p);
380  }
CellData * locate_index_only(const UniformGrid::Index &i)
blockLoc i
Definition: read.cpp:79
SparseGrid< SpaceCell > * grid
vector<T>* get_cell ( UniformGrid::Index p)
inline

Definition at line 374 of file Rocon/include/KNN_Grid.h.

374  {
375  for(int i=0;i<3;i++)
376  if ((p[i] < 0) || (p[i] >= static_cast<unsigned int>(cell_dim[i])))
377  return NULL;
378  //cerr << "i get in here\n";
379  return grid->locate_index_only(p);
380  }
CellData * locate_index_only(const UniformGrid::Index &i)
blockLoc i
Definition: read.cpp:79
SparseGrid< SpaceCell > * grid
vector<T>* get_cell_range ( Point3D p,
Point3D q 
)
inline

Definition at line 335 of file Rocon/include/KNN_Grid.h.

335  {
336  vector<T> * ret = new vector<T>;
337  vector<T> * temp = NULL;
338 
339  Index a = grid->compute_index(p);
340  Index b = grid->compute_index(q);
341  // cout << "A: "<< a[0]<< ", "<< a[1]<< ", "<< a[2]<< "\n";
342  // cout << "B: "<< b[0]<< ", "<< b[1]<< ", "<< b[2]<< "\n";
343  Index min,max;
344 
345  for(int i=0;i<3;++i)
346  {
347  min[i] = (a[i]>b[i])?b[i]:a[i];
348  max[i] = (a[i]>b[i])?a[i]:b[i];
349  }
350 
351  for(unsigned int i=min[0]; i<=max[0];++i)
352  {
353  for(unsigned int j=min[1]; j<=max[1]; ++j)
354  {
355  for(unsigned int k=min[2]; k<=max[2]; ++k)
356  {
357  Index p(i,j,k);
358  //cout<<"Index x: "<< i <<" y:"<< j <<" z:"<< k <<"\n";
359  temp = get_cell(p);
360  if(temp!=NULL){
361  //cout<< "temp size: " << temp->size() <<"\n";
362  ret->insert(ret->begin(), temp->begin(), temp->end());
363  }
364  }
365  }
366  }
367  return ret;
368  }
vector< T > * get_cell(Point3D &p)
j indices k indices k
Definition: Indexing.h:6
Vector_n max(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:354
UniformGrid::Index compute_index(const Point3D &v)
blockLoc i
Definition: read.cpp:79
Vector_n min(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:346
j indices j
Definition: Indexing.h:6
NVec< 3, index_t > Index
SparseGrid< SpaceCell > * grid
vector<T>* get_cell_range ( Point3D p,
Point3D q 
)
inline

Definition at line 335 of file Rocprop/include/KNN_Grid.h.

335  {
336  vector<T> * ret = new vector<T>;
337  vector<T> * temp = NULL;
338 
339  Index a = grid->compute_index(p);
340  Index b = grid->compute_index(q);
341  // cout << "A: "<< a[0]<< ", "<< a[1]<< ", "<< a[2]<< "\n";
342  // cout << "B: "<< b[0]<< ", "<< b[1]<< ", "<< b[2]<< "\n";
343  Index min,max;
344 
345  for(int i=0;i<3;++i)
346  {
347  min[i] = (a[i]>b[i])?b[i]:a[i];
348  max[i] = (a[i]>b[i])?a[i]:b[i];
349  }
350 
351  for(int i=min[0]; i<=max[0];++i)
352  {
353  for(int j=min[1]; j<=max[1]; ++j)
354  {
355  for(int k=min[2]; k<=max[2]; ++k)
356  {
357  Index p(i,j,k);
358  //cout<<"Index x: "<< i <<" y:"<< j <<" z:"<< k <<"\n";
359  temp = get_cell(p);
360  if(temp!=NULL){
361  //cout<< "temp size: " << temp->size() <<"\n";
362  ret->insert(ret->begin(), temp->begin(), temp->end());
363  }
364  }
365  }
366  }
367  return ret;
368  }
vector< T > * get_cell(Point3D &p)
j indices k indices k
Definition: Indexing.h:6
Vector_n max(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:354
UniformGrid::Index compute_index(const Point3D &v)
blockLoc i
Definition: read.cpp:79
Vector_n min(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:346
j indices j
Definition: Indexing.h:6
NVec< 3, index_t > Index
SparseGrid< SpaceCell > * grid
int insert ( T &  item,
Point3D p 
)
inline

Definition at line 237 of file Rocprop/include/KNN_Grid.h.

238  {
239  SpaceCell * cell = grid->locate(p);
240  cell->push_back(item);
241  //cout << "Size: "<< cell->size() << "\n" ;
242  return cell->size();
243  }
CellData * locate(const Point3D &v)
vector< T > SpaceCell
SparseGrid< SpaceCell > * grid
int insert ( T &  item,
Point3D p 
)
inline

Definition at line 237 of file Rocon/include/KNN_Grid.h.

238  {
239  SpaceCell * cell = grid->locate(p);
240  cell->push_back(item);
241  //cout << "Size: "<< cell->size() << "\n" ;
242  return cell->size();
243  }
CellData * locate(const Point3D &v)
vector< T > SpaceCell
SparseGrid< SpaceCell > * grid
int insertRange ( T &  item,
Point3D p,
Point3D q,
Point3D r 
)
inline

Definition at line 245 of file Rocon/include/KNN_Grid.h.

245  {
246  int count = 0;
247 
248  Index min,max;
249 
250  Index a = grid->compute_index(p);
251  Index b = grid->compute_index(q);
252  Index c = grid->compute_index(r);
253 
254  for(int i=0;i<3;++i)
255  {
256  min[i] = (a[i]>b[i])?b[i]:a[i];
257  max[i] = (a[i]>b[i])?a[i]:b[i];
258  }
259 
260  for(int i=0;i<3;++i)
261  {
262  min[i] = (min[i]>c[i])?c[i]:min[i];
263  max[i] = (max[i]>c[i])?max[i]:c[i];
264  }
265 
266  for(unsigned int i=min[0]; i<=max[0]; ++i)
267  {
268  for(unsigned int j=min[1]; j<=max[1]; ++j)
269  {
270  for(unsigned int k=min[2]; k<=max[2]; ++k)
271  {
272  Index x(i,j,k);
273  SpaceCell * cell = grid->locate_index(x);
274  typename vector<T>::iterator temp ;
275  //temp = find(cell->begin(), cell->end(), item);
276  //if(temp == cell->end() || cell->size() == 0)
277  //{
278  cell->push_back(item);
279  count ++;//= cell->size();
280  //}
281  }
282  }
283  }
284 
285  return count;
286  }
j indices k indices k
Definition: Indexing.h:6
Vector_n max(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:354
CellData * locate_index(const UniformGrid::Index &i)
vector< T > SpaceCell
UniformGrid::Index compute_index(const Point3D &v)
blockLoc i
Definition: read.cpp:79
void int int REAL * x
Definition: read.cpp:74
Vector_n min(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:346
j indices j
Definition: Indexing.h:6
NVec< 3, index_t > Index
SparseGrid< SpaceCell > * grid
int insertRange ( T &  item,
Point3D p,
Point3D q,
Point3D r 
)
inline

Definition at line 245 of file Rocprop/include/KNN_Grid.h.

245  {
246  int count = 0;
247 
248  Index min,max;
249 
250  Index a = grid->compute_index(p);
251  Index b = grid->compute_index(q);
252  Index c = grid->compute_index(r);
253 
254  for(int i=0;i<3;++i)
255  {
256  min[i] = (a[i]>b[i])?b[i]:a[i];
257  max[i] = (a[i]>b[i])?a[i]:b[i];
258  }
259 
260  for(int i=0;i<3;++i)
261  {
262  min[i] = (min[i]>c[i])?c[i]:min[i];
263  max[i] = (max[i]>c[i])?max[i]:c[i];
264  }
265 
266  for(int i=min[0]; i<=max[0]; ++i)
267  {
268  for(int j=min[1]; j<=max[1]; ++j)
269  {
270  for(int k=min[2]; k<=max[2]; ++k)
271  {
272  Index x(i,j,k);
273  SpaceCell * cell = grid->locate_index(x);
274  typename vector<T>::iterator temp ;
275  //temp = find(cell->begin(), cell->end(), item);
276  //if(temp == cell->end() || cell->size() == 0)
277  //{
278  cell->push_back(item);
279  count ++;//= cell->size();
280  //}
281  }
282  }
283  }
284 
285  return count;
286  }
j indices k indices k
Definition: Indexing.h:6
Vector_n max(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:354
CellData * locate_index(const UniformGrid::Index &i)
vector< T > SpaceCell
UniformGrid::Index compute_index(const Point3D &v)
blockLoc i
Definition: read.cpp:79
void int int REAL * x
Definition: read.cpp:74
Vector_n min(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:346
j indices j
Definition: Indexing.h:6
NVec< 3, index_t > Index
SparseGrid< SpaceCell > * grid
unsigned int k_nearest ( Point3D p,
int  k,
vector< T > &  nbrs 
)
inline

Definition at line 294 of file Rocprop/include/KNN_Grid.h.

294  {
295  KNNnbr pnew;
296  priority_queue<KNNnbr> pts;
297  vector< T > * cell_pts = NULL;
298 
299  UniformGrid::Index grid_coord = grid->compute_index(p);
300  for(int x = grid_coord[0] - 2; x<grid_coord[0]+2;x++)
301  for(int y = grid_coord[1] - 2; y<grid_coord[1]+2;y++)
302  for(int z = grid_coord[2] - 2; z<grid_coord[2]+2;z++)
303  {
304  //get cell points
306  //cerr << "Checking cell: [" << x << " , " << y << " , "
307  // << z << "]" << endl;
308  cell_pts = get_cell(i);
309  if (cell_pts != NULL)
310  {
311  for(int j=0;j<cell_pts->size();j++)
312  {
313  pnew.distance = euclid_distance((*cell_pts)[j].coord,p);
314  pnew.item = (*cell_pts)[j];
315  pts.push(pnew);
316  // insert candidates into queue
317  }
318  }
319  }
320  int j=0;
321  int ptnum = pts.size();
322  nbrs.clear();
323  while( (j<k) && (!pts.empty()))
324  {
325  for(int j=0; j<k;j++)
326  {
327  KNNnbr n = pts.top();
328  nbrs.push_back(n.item);
329  pts.pop();
330  }
331  }
332  return ptnum;
333  }
vector< T > * get_cell(Point3D &p)
T euclid_distance(const NVec< DIM, T > &u, const NVec< DIM, T > &v)
j indices k indices k
Definition: Indexing.h:6
void int int REAL REAL * y
Definition: read.cpp:74
int coord[NPANE][NROW *NCOL][3]
Definition: blastest.C:86
void int int int REAL REAL REAL * z
Definition: write.cpp:76
UniformGrid::Index compute_index(const Point3D &v)
blockLoc i
Definition: read.cpp:79
void int int REAL * x
Definition: read.cpp:74
const NT & n
j indices j
Definition: Indexing.h:6
SparseGrid< SpaceCell > * grid
unsigned int k_nearest ( Point3D p,
int  k,
vector< T > &  nbrs 
)
inline

Definition at line 294 of file Rocon/include/KNN_Grid.h.

294  {
295  KNNnbr pnew;
296  priority_queue<KNNnbr> pts;
297  vector< T > * cell_pts = NULL;
298 
299  UniformGrid::Index grid_coord = grid->compute_index(p);
300  for(int x = grid_coord[0] - 2; x<grid_coord[0]+2;x++)
301  for(int y = grid_coord[1] - 2; y<grid_coord[1]+2;y++)
302  for(int z = grid_coord[2] - 2; z<grid_coord[2]+2;z++)
303  {
304  //get cell points
306  //cerr << "Checking cell: [" << x << " , " << y << " , "
307  // << z << "]" << endl;
308  cell_pts = get_cell(i);
309  if (cell_pts != NULL)
310  {
311  for(int j=0;j<cell_pts->size();j++)
312  {
313  pnew.distance = euclid_distance((*cell_pts)[j].coord,p);
314  pnew.item = (*cell_pts)[j];
315  pts.push(pnew);
316  // insert candidates into queue
317  }
318  }
319  }
320  int j=0;
321  int ptnum = pts.size();
322  nbrs.clear();
323  while( (j<k) && (!pts.empty()))
324  {
325  for(int j=0; j<k;j++)
326  {
327  KNNnbr n = pts.top();
328  nbrs.push_back(n.item);
329  pts.pop();
330  }
331  }
332  return ptnum;
333  }
vector< T > * get_cell(Point3D &p)
T euclid_distance(const NVec< DIM, T > &u, const NVec< DIM, T > &v)
j indices k indices k
Definition: Indexing.h:6
void int int REAL REAL * y
Definition: read.cpp:74
int coord[NPANE][NROW *NCOL][3]
Definition: blastest.C:86
void int int int REAL REAL REAL * z
Definition: write.cpp:76
UniformGrid::Index compute_index(const Point3D &v)
blockLoc i
Definition: read.cpp:79
void int int REAL * x
Definition: read.cpp:74
const NT & n
j indices j
Definition: Indexing.h:6
SparseGrid< SpaceCell > * grid

Member Data Documentation

Point3D bbmax
private

Definition at line 196 of file Rocon/include/KNN_Grid.h.

Point3D bbmin
private

Definition at line 195 of file Rocon/include/KNN_Grid.h.

int cell_dim
private

Definition at line 197 of file Rocon/include/KNN_Grid.h.

float cellsz
private

Definition at line 198 of file Rocon/include/KNN_Grid.h.

SparseGrid< SpaceCell > * grid
private

Definition at line 200 of file Rocon/include/KNN_Grid.h.


The documentation for this class was generated from the following files: