Added a class BasicGrid with some utility function that are scattered among similar classes
This commit is contained in:
parent
09a5372051
commit
b537c21b4c
|
@ -24,18 +24,80 @@
|
||||||
History
|
History
|
||||||
|
|
||||||
$Log: not supported by cvs2svn $
|
$Log: not supported by cvs2svn $
|
||||||
|
Revision 1.1 2005/03/15 11:43:18 cignoni
|
||||||
|
Removed BestDim function from the grid_static_ptr class and moved to a indipendent file (grid_util.h) for sake of generality.
|
||||||
|
|
||||||
|
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef __VCGLIB_GRID_UTIL
|
#ifndef __VCGLIB_GRID_UTIL
|
||||||
#define __VCGLIB_GRID_UTIL
|
#define __VCGLIB_GRID_UTIL
|
||||||
|
|
||||||
|
|
||||||
/** Calcolo dimensioni griglia.
|
namespace vcg {
|
||||||
|
|
||||||
|
// classe di base per tutte le strutture dati di indexing spaziale basate su griglia.
|
||||||
|
// contiene tutte le funzioni solite per le conversioni tra point3f e point3i
|
||||||
|
|
||||||
|
|
||||||
|
template <class ScalarType>
|
||||||
|
class BasicGrid {
|
||||||
|
public:
|
||||||
|
Box3<ScalarType> bbox;
|
||||||
|
/// Dimensione spaziale (lunghezza lati) del bbox
|
||||||
|
Point3<ScalarType> dim;
|
||||||
|
/// Dimensioni griglia in celle
|
||||||
|
Point3i siz;
|
||||||
|
/// Dimensioni di una cella
|
||||||
|
Point3<ScalarType> voxel;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Dato un punto ritorna le coordinate della cella
|
||||||
|
inline Point3i GridP( const Point3<ScalarType> & p ) const
|
||||||
|
{
|
||||||
|
Point3i pi; return PToIP(p,pi);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Dato un punto 3d ritorna l'indice del box corrispondente
|
||||||
|
inline void PToIP(const Point3<ScalarType> & p, Point3i &pi ) const
|
||||||
|
{
|
||||||
|
Point3<ScalarType> t = p - bbox.min;
|
||||||
|
pi[0] = int( t[0]/voxel[0] );
|
||||||
|
pi[1] = int( t[1]/voxel[1] );
|
||||||
|
pi[2] = int( t[2]/voxel[2] );
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Dato un box reale ritorna gli indici dei voxel compresi dentro un ibox
|
||||||
|
void BoxToIBox( const Box3d & b, Box3i & ib ) const
|
||||||
|
{
|
||||||
|
Point3d t;
|
||||||
|
|
||||||
|
t = (b.min - bbox.min); // Traslo il box b;
|
||||||
|
t[0] /= voxel[0];
|
||||||
|
t[1] /= voxel[1];
|
||||||
|
t[2] /= voxel[2];
|
||||||
|
ib.min[0] = int( t[0] ); // Trasformazione in intero
|
||||||
|
ib.min[1] = int( t[1] );
|
||||||
|
ib.min[2] = int( t[2] );
|
||||||
|
assert(ib.min[0]>=0 && ib.min[1]>=0 && ib.min[2]>=0);
|
||||||
|
t = (b.max - bbox.min); // Taslo il box b;
|
||||||
|
t[0] /= voxel[0];
|
||||||
|
t[1] /= voxel[1];
|
||||||
|
t[2] /= voxel[2];
|
||||||
|
ib.max[0] = int( ceil(t[0]) ); // Trasformazione in intero
|
||||||
|
ib.max[1] = int( ceil(t[1]) );
|
||||||
|
ib.max[2] = int( ceil(t[2]) );
|
||||||
|
assert(ib.max[0]>=0 && ib.max[1]>=0 && ib.max[2]>=0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Calcolo dimensioni griglia.
|
||||||
Calcola la dimensione della griglia in funzione
|
Calcola la dimensione della griglia in funzione
|
||||||
della ratio del bounding box e del numero di elementi
|
della ratio del bounding box e del numero di elementi
|
||||||
*/
|
*/
|
||||||
namespace vcg {
|
|
||||||
|
|
||||||
template<class scalar_type>
|
template<class scalar_type>
|
||||||
void BestDim( const int elems, const Point3<scalar_type> & size, Point3i & dim )
|
void BestDim( const int elems, const Point3<scalar_type> & size, Point3i & dim )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue