qnode< C, V > Struct Template Reference

#include <ssi_qnode.hpp>

List of all members.

Public Member Functions

Public Attributes


Detailed Description

template<class C, class V>
struct mmx::ssi::qnode< C, V >

Definition at line 14 of file ssi_qnode.hpp.


Constructor & Destructor Documentation

qnode (  )  [inline]

Definition at line 21 of file ssi_qnode.hpp.

Referenced by qnode< C, V >::split_u(), and qnode< C, V >::split_v().

00021 : l(0), r(0) {};

~qnode (  )  [inline]

Definition at line 94 of file ssi_qnode.hpp.

References qnode< C, V >::l, and qnode< C, V >::r.

00095 {
00096 if  (l ) delete l;
00097 if ( r ) delete r;
00098 };


Member Function Documentation

void convert ( vector2 v,
sample< C, V > *  s,
int  n 
) const [inline]

Definition at line 169 of file ssi_qnode.hpp.

References assert, mmx::ssi::du(), mmx::ssi::dv(), qnode< C, V >::umax, qnode< C, V >::umin, sample< C, V >::uvalue(), qnode< C, V >::vmax, qnode< C, V >::vmin, and sample< C, V >::vvalue().

00170 {
00171 assert(du(this)==1 && dv(this)==1);
00172 double u = s->uvalue(umin);
00173 double v = s->vvalue(vmin);
00174 double vu = s->uvalue(umax)-u;
00175 double vv = s->vvalue(vmax)-v;
00176 for ( int i = 0; i < n; i ++ )
00177   {
00178     p[i][0] = u + p[i][0]*vu;
00179     p[i][1] = v + p[i][1]*vv;
00180   };
00181 }

void fill ( vector3 qp,
sample< C, V > *  s 
) const [inline]

Definition at line 144 of file ssi_qnode.hpp.

References sample< C, V >::base(), sample< C, V >::m_ncols, qnode< C, V >::r, qnode< C, V >::umax, qnode< C, V >::umin, qnode< C, V >::vmax, and qnode< C, V >::vmin.

00145 {
00146 vector3  *r = s->base() + this->umin*s->m_ncols + this->vmin;
00147 qp[0] = *r;
00148 qp[3] = *(r + this->vmax - this->vmin);
00149 r = s->base() + this->umax*s->m_ncols + this->vmin;
00150 qp[1] = *r;
00151 qp[2] = *(r + this->vmax - this->vmin);
00152 };

void fill ( vector3 **  qp,
sample< C, V > *  s 
) const [inline]

Definition at line 101 of file ssi_qnode.hpp.

References sample< C, V >::base(), sample< C, V >::m_ncols, qnode< C, V >::umax, qnode< C, V >::umin, qnode< C, V >::vmax, and qnode< C, V >::vmin.

Referenced by dsearch< C, V >::cnfpush(), and qnode< C, V >::mbox().

00102 {
00103 qp[0] = s->base() + this->umin*s->m_ncols + this->vmin;
00104 qp[1] = s->base() + this->umax*s->m_ncols + this->vmin;
00105 qp[2] = qp[1]  + this->vmax - this->vmin;
00106 qp[3] = qp[0]  + this->vmax - this->vmin;
00107 };

bool leaf (  )  const [inline]

Definition at line 20 of file ssi_qnode.hpp.

References qnode< C, V >::l.

Referenced by dsearch< C, V >::search().

00020 { return (l == 0); };

void mbox ( sample< C, V > *  s  )  [inline]

Definition at line 130 of file ssi_qnode.hpp.

References qnode< C, V >::box, fxv< C, N, H >::data, and qnode< C, V >::fill().

Referenced by qsegment< C, V >::make().

00131 {
00132 vector3 * qp[4];
00133 fill( qp, s );
00134 for ( int i = 0; i < 3; i ++ ) box[i].m = box[i].M = qp[0]->data[i];
00135 for ( int i = 1; i < 4; i ++ )
00136   for ( int d = 0; d < 3; d ++ )
00137     {
00138       if ( qp[i]->data[d] < box[d].m ) box[d].m = qp[i]->data[d];
00139       else {  if ( qp[i]->data[d] > box[d].M ) box[d].M = qp[i]->data[d]; };
00140     };
00141 };

void split ( sample< C, V > *  s  )  [inline]

Definition at line 110 of file ssi_qnode.hpp.

References mmx::ssi::du(), mmx::ssi::dv(), qnode< C, V >::l, qnode< C, V >::r, qnode< C, V >::split_u(), and qnode< C, V >::split_v().

Referenced by dsearch< C, V >::search(), dsearch< C, V >::search_f(), and dsearch< C, V >::search_s().

00111 {
00112 
00113 if ( l ) return;
00114 if ( du(this) > dv(this) )
00115   {
00116     this->split_u();
00117     l->mbox(s);
00118     r->mbox(s);
00119   }
00120 else if ( dv(this) > 1 )
00121   {
00122     this->split_v();
00123     l->mbox(s);
00124     r->mbox(s);
00125   };
00126 
00127 };

void split_u (  )  [inline]

Definition at line 64 of file ssi_qnode.hpp.

References qnode< C, V >::l, qnode< C, V >::qnode(), qnode< C, V >::r, qnode< C, V >::umax, qnode< C, V >::umin, qnode< C, V >::vmax, and qnode< C, V >::vmin.

Referenced by qnode< C, V >::split().

00065 {
00066   l = new qnode();
00067   r = new qnode();
00068   l->umin = umin;
00069   l->umax = (umin+umax)/2;
00070   r->umin = (umin+umax)/2;
00071   r->umax = umax;
00072   l->vmin = r->vmin = vmin;
00073   l->vmax = r->vmax = vmax;
00074   l->father = r->father = this;
00075 };

void split_v (  )  [inline]

Definition at line 78 of file ssi_qnode.hpp.

References qnode< C, V >::l, qnode< C, V >::qnode(), qnode< C, V >::r, qnode< C, V >::umax, qnode< C, V >::umin, qnode< C, V >::vmax, and qnode< C, V >::vmin.

Referenced by qnode< C, V >::split().

00079 {
00080 l = new qnode();
00081 r = new qnode();
00082 l->vmin = vmin;
00083 l->vmax = (vmin+vmax)/2;
00084 r->vmin = l->vmax;
00085 r->vmax = vmax;
00086 l->umin = r->umin = umin;
00087 l->umax = r->umax = umax;
00088 l->father = this;
00089 r->father = this;
00090 };


Member Data Documentation

qnode<C,V>* father
qnode<C,V>* l
qnode<C,V> * r

The documentation for this struct was generated from the following file:

Generated on 6 Dec 2012 for shape by  doxygen 1.6.1