proj home

Files   Classes   Functions   Hierarchy  

visualize_tetrahedron< T > Class Template Reference

#include <primshpcenters.h>

Collaboration diagram for visualize_tetrahedron< T >:

List of all members.

Public Member Functions

 visualize_tetrahedron (gobjContainer &_gX, tetrahedron< T > const &_t)
void eval () const

Public Attributes

bool mesh_on
bool midpoints_on
bool midpoint_center_on
bool altitude_to_point_on
bool altitude_on
bool innersphere_on
bool outersphere_on


Detailed Description

template<typename T>
class visualize_tetrahedron< T >

Definition at line 20 of file primshpcenters.h.


Constructor & Destructor Documentation

template<typename T >
visualize_tetrahedron< T >::visualize_tetrahedron ( gobjContainer _gX,
tetrahedron< T > const &  _t 
) [inline]

Definition at line 64 of file primshpcenters.h.

00068   : gX(_gX), t(_t), mesh_on(true), midpoints_on(true),
00069     midpoint_center_on(true), altitude_to_point_on(true),
00070     altitude_on(true), innersphere_on(true), outersphere_on(true)
00071 {
00072 }


Member Function Documentation

template<typename T >
void visualize_tetrahedron< T >::eval (  )  const [inline]

Definition at line 76 of file primshpcenters.h.

References visualize_tetrahedron< T >::altitude_to_point_on, tetrahedron< PT, PD >::circumcenter(), visualize_tetrahedron< T >::mesh_on, visualize_tetrahedron< T >::midpoint_center_on, visualize_tetrahedron< T >::midpoints_on, visualize_tetrahedron< T >::outersphere_on, tetrahedron< PT, PD >::pi, gobjQuadric::radius, and tetrahedron< PT, PD >::verticiespoint().

00077 {
00078   gX.push_back( new gobjglDisable(GL_LIGHTING) );
00079 
00080   if (mesh_on)
00081   {
00082   gX.push_back( new gobjglColor3f(0.0,0.0,1.0) );
00083 
00084   gX.push_back( new gobjglBegin(GL_LINES) );
00085 
00086   gX.push_back( new gobjglVertex3f(t.pi[0]) );
00087   gX.push_back( new gobjglVertex3f(t.pi[1]) );
00088   gX.push_back( new gobjglVertex3f(t.pi[0]) );
00089   gX.push_back( new gobjglVertex3f(t.pi[2]) );
00090   gX.push_back( new gobjglVertex3f(t.pi[0]) );
00091   gX.push_back( new gobjglVertex3f(t.pi[3]) );
00092   gX.push_back( new gobjglVertex3f(t.pi[1]) );
00093   gX.push_back( new gobjglVertex3f(t.pi[2]) );
00094   gX.push_back( new gobjglVertex3f(t.pi[1]) );
00095   gX.push_back( new gobjglVertex3f(t.pi[3]) );
00096   gX.push_back( new gobjglVertex3f(t.pi[2]) );
00097   gX.push_back( new gobjglVertex3f(t.pi[3]) );
00098 
00099   gX.push_back( new gobjglEnd() );
00100   }
00101 
00102   point3<double> m0 = t.midpoint(0);
00103   point3<double> m1 = t.midpoint(1);
00104   point3<double> m2 = t.midpoint(2);
00105   point3<double> m3 = t.midpoint(3);
00106 
00107 
00108   gobjQuadric* gd = new gobjQuadric();
00109   gd->radius=.02;
00110   gX.push_back( gd );
00111 
00112   if (outersphere_on)
00113   {
00114   gX.push_back( new gobjglColor3ub(255,20,147) );
00115   point3<double> c1 = t.circumcenter();
00116   gX.push_back( new gobjMySphereDraw(c1,gd) );
00117 for (uint i=0; i<4; ++i)
00118   cout << (c1-t.pi[i]).distance() << endl;
00119   }
00120 
00121   if (midpoints_on)
00122   {
00123   gX.push_back( new gobjglColor3ub(255,0,255) );
00124   gX.push_back( new gobjMySphereDraw(m0,gd) );
00125   gX.push_back( new gobjMySphereDraw(m1,gd) );
00126   gX.push_back( new gobjMySphereDraw(m2,gd) );
00127   gX.push_back( new gobjMySphereDraw(m3,gd) );
00128   }
00129 
00130   if (midpoint_center_on)
00131   {
00132   gX.push_back( new gobjglColor3ub(0,255,0) );
00133   gX.push_back( new gobjglBegin(GL_LINES) );
00134   gX.push_back( new gobjglVertex3f(t.pi[0]) );
00135   gX.push_back( new gobjglVertex3f(m0) );
00136   gX.push_back( new gobjglVertex3f(t.pi[1]) );
00137   gX.push_back( new gobjglVertex3f(m1) );
00138   gX.push_back( new gobjglVertex3f(t.pi[2]) );
00139   gX.push_back( new gobjglVertex3f(m2) );
00140   gX.push_back( new gobjglVertex3f(t.pi[3]) );
00141   gX.push_back( new gobjglVertex3f(m3) );
00142   gX.push_back( new gobjglEnd() );
00143   }
00144 
00145 
00146   point3<double> alt0 = t.verticiespoint(0);
00147   point3<double> alt1 = t.verticiespoint(1);
00148   point3<double> alt2 = t.verticiespoint(2);
00149   point3<double> alt3 = t.verticiespoint(3);
00150 
00151   if (altitude_to_point_on)
00152   {
00153   gX.push_back( new gobjglColor3ub(255,215,0) );
00154   //gX.push_back( new gobjMySphereDraw(alt0,gd) );
00155   gX.push_back( new gobjMySphereDraw(alt1,gd) );
00156   gX.push_back( new gobjMySphereDraw(alt2,gd) );
00157   gX.push_back( new gobjMySphereDraw(alt3,gd) );
00158 
00159 
00160 
00161   gX.push_back( new gobjglBegin(GL_LINES) );
00162   gX.push_back( new gobjglVertex3f(t.pi[0]) );
00163   gX.push_back( new gobjglVertex3f(alt0) );
00164   gX.push_back( new gobjglVertex3f(t.pi[1]) );
00165   gX.push_back( new gobjglVertex3f(alt1) );
00166   gX.push_back( new gobjglVertex3f(t.pi[2]) );
00167   gX.push_back( new gobjglVertex3f(alt2) );
00168   gX.push_back( new gobjglVertex3f(t.pi[3]) );
00169   gX.push_back( new gobjglVertex3f(alt3) );
00170   gX.push_back( new gobjglEnd() );
00171   }
00172 
00173 /*
00174 
00175   if (innersphere_on)
00176   {
00177   point3<double> b0 = t.bisectangle(0);
00178   point3<double> b1 = t.bisectangle(1);
00179   point3<double> b2 = t.bisectangle(2);
00180   point3<double> b3 = t.bisectangle(3);
00181   gX.push_back( new gobjglColor3ub(127,255,212) );
00182   gX.push_back( new gobjMySphereDraw(b0,gd) );
00183   gX.push_back( new gobjMySphereDraw(b1,gd) );
00184   gX.push_back( new gobjMySphereDraw(b2,gd) );
00185   gX.push_back( new gobjMySphereDraw(b3,gd) );
00186 
00187 
00188 
00189 //  point2<double> x;
00190 //  double r;
00191 //  t.innercircle(x,r);
00192 //  gX.push_back( new gobjMySphereDraw(x,gd) );
00193 //  gX.push_back( new gobjMyCircleDraw(r,point3<double>(x),*gc) );
00194 
00195 
00196 
00197   gX.push_back( new gobjglBegin(GL_LINES) );
00198   gX.push_back( new gobjglVertex3f(t.pi[0]) );
00199   gX.push_back( new gobjglVertex3f(b0) );
00200 
00201   gX.push_back( new gobjglVertex3f(t.pi[1]) );
00202   gX.push_back( new gobjglVertex3f(b1) );
00203   gX.push_back( new gobjglVertex3f(t.pi[2]) );
00204   gX.push_back( new gobjglVertex3f(b2) );
00205   gX.push_back( new gobjglVertex3f(t.pi[3]) );
00206   gX.push_back( new gobjglVertex3f(b3) );
00207 
00208   gX.push_back( new gobjglEnd() );
00209   }
00210 */
00211 
00212 /*
00213   {
00214     double a[12];
00215 
00216 //    a[0] = t.pi[1].x - t.pi[2].x;  a[1] = t.pi[1].y - t.pi[2].y;  a[2] = t.pi[1].z - t.pi[2].z; 
00217 //    a[3] = (t.pi[1].dot() - t.pi[2].dot())*0.5;
00218 //    a[4] = t.pi[0].x - t.pi[2].x;  a[5] = t.pi[0].y - t.pi[2].y;  a[6] = t.pi[0].z - t.pi[2].z; 
00219 //    a[7] = (t.pi[0].dot() - t.pi[2].dot())*0.5;
00220 //    a[8] = t.pi[0].x - t.pi[1].x;  a[9] = t.pi[0].y - t.pi[1].y;  a[10] = t.pi[0].z - t.pi[1].z; 
00221 //    a[11] = (t.pi[0].dot() - t.pi[1].dot())*0.5;
00222 
00223     a[0] = t.pi[0].x; a[1] = t.pi[0].y; a[2] = t.pi[0].z; a[3] = t.pi[0].dot()*0.5;
00224     a[4] = t.pi[1].x; a[5] = t.pi[1].y; a[6] = t.pi[1].z; a[7] = t.pi[1].dot()*0.5;
00225     a[8] = t.pi[2].x; a[9] = t.pi[2].y; a[10] = t.pi[2].z; a[11] = t.pi[2].dot()*0.5;
00226 
00227     gausselim<double,3> g(a,1E-14);
00228 
00229     bool res = g.eval();
00230     cout << SHOW(res) << endl;
00231     g.print();
00232 
00233 
00234   }
00235 */
00236 
00237   point3<double> a,b,c;
00238   a = t.pi[3] - t.pi[0];
00239   c = t.pi[1] - t.pi[0];
00240   b = t.pi[2] - t.pi[0];
00241 
00242   crossprod< point3<double> > cross;
00243   point3<double> N0,N1,N2,N3;
00244   cross(N0,a-b,c-b);
00245   cross(N1,a,b);
00246   cross(N2,a,c);
00247   cross(N3,b,c);
00248 
00249   point3<double> cc0 = t.circumcenter(0);
00250   point3<double> cc1 = t.circumcenter(1);
00251   point3<double> cc2 = t.circumcenter(2);
00252   point3<double> cc3 = t.circumcenter(3);
00253 
00254   gX.push_back( new gobjglColor3ub(220,20,60) );
00255   gX.push_back( new gobjMySphereDraw(cc0,gd) );
00256   gX.push_back( new gobjMySphereDraw(cc1,gd) );
00257   gX.push_back( new gobjMySphereDraw(cc2,gd) );
00258   gX.push_back( new gobjMySphereDraw(cc3,gd) );
00259 
00260 
00261 
00262 
00263 
00264 /*
00265   // Looking at perpendicular line through midpoints.
00266   gX.push_back( new gobjglColor3ub(255,0,0) );
00267   gX.push_back( new gobjglBegin(GL_LINES) );
00268   gX.push_back( new gobjglVertex3f(m0+N0*-1.0) );
00269   gX.push_back( new gobjglVertex3f(m0+N0*1.0) );
00270   gX.push_back( new gobjglVertex3f(m1+N1*-1.0) );
00271   gX.push_back( new gobjglVertex3f(m1+N1*1.0) );
00272   gX.push_back( new gobjglVertex3f(m2+N2*-1.0) );
00273   gX.push_back( new gobjglVertex3f(m2+N2*1.0) );
00274   gX.push_back( new gobjglVertex3f(m3+N3*-1.0) );
00275   gX.push_back( new gobjglVertex3f(m3+N3*1.0) );
00276   gX.push_back( new gobjglEnd() );
00277 */
00278 
00279 
00280 /*
00281   {
00282     unsigned int n=9;
00283     double z[(n+1)*n];
00284     for (unsigned int i=0; i<(n+1)*n; ++i)
00285       z[i] = 0;
00286 
00287     unsigned int k = 0;
00288 
00289     z[k+0] = a.x;  z[k+1] = c.x;  z[k+2] = -b.x;  z[k+3] = -a.x;  
00290     z[k+8] = N1.x/N1.dot() - N2.x/N2.dot();
00291     k += n;
00292 
00293     z[k+0] = a.y;  z[k+1] = c.y;  z[k+2] = -b.y;  z[k+3] = -a.y;  
00294     z[k+8] = N1.y/N1.dot() - N2.y/N2.dot();
00295     k += n;
00296 
00297     z[k+0] = a.z;  z[k+1] = c.z;  z[k+2] = -b.z;  z[k+3] = -a.z;  
00298     z[k+8] = N1.z/N1.dot() - N2.z/N2.dot();
00299     k += n;
00300 
00301 
00302     z[k+4] = a.x - b.x;  z[k+5] = c.x - b.x;  z[k+6] = -b.x;  z[k+7] = c.x;
00303     z[k+8] = N3.x/N3.dot() - N0.z/N0.dot();
00304     k += n;
00305 
00306     z[k+4] = a.y - b.y;  z[k+5] = c.y - b.y;  z[k+6] = -b.y;  z[k+7] = c.y;
00307     z[k+8] = N3.y/N3.dot() - N0.y/N0.dot();
00308     k += n;
00309 
00310     z[k+4] = a.z - b.z;  z[k+5] = c.z - b.z;  z[k+6] = -b.z;  z[k+7] = c.z;
00311     z[k+8] = N3.z/N3.dot() - N0.z/N0.dot();
00312     k += n;
00313 
00314 
00315     z[k+0] = a.x;  z[k+1] = c.x;  z[k+6] = -b.x;  z[k+7] = -c.x; 
00316     z[k+8] = N1.x/N1.dot() - N0.x/N0.dot();
00317     k += n;
00318 
00319     z[k+0] = a.y;  z[k+1] = c.y;  z[k+6] = -b.y;  z[k+7] = -c.y; 
00320     z[k+8] = N1.y/N1.dot() - N0.y/N0.dot();
00321     k += n;
00322 
00323     z[k+0] = a.z;  z[k+1] = c.z;  z[k+6] = -b.z;  z[k+7] = -c.z; 
00324     z[k+8] = N1.z/N1.dot() - N0.z/N0.dot();
00325 
00326     gausselim<double,10> g(z,1E-14);
00327 
00328     bool res = g.eval();
00329     cout << SHOW(res) << endl;
00330     g.print();
00331   }
00332 */
00333 
00334 
00335 
00336 
00337 
00338 
00339 }


Member Data Documentation

template<typename T >
bool visualize_tetrahedron< T >::altitude_on

Definition at line 36 of file primshpcenters.h.

template<typename T >
bool visualize_tetrahedron< T >::altitude_to_point_on

Definition at line 34 of file primshpcenters.h.

Referenced by visualize_tetrahedron< T >::eval().

template<typename T >
bool visualize_tetrahedron< T >::innersphere_on

Definition at line 38 of file primshpcenters.h.

template<typename T >
bool visualize_tetrahedron< T >::mesh_on

Definition at line 27 of file primshpcenters.h.

Referenced by visualize_tetrahedron< T >::eval().

template<typename T >
bool visualize_tetrahedron< T >::midpoint_center_on

Definition at line 31 of file primshpcenters.h.

Referenced by visualize_tetrahedron< T >::eval().

template<typename T >
bool visualize_tetrahedron< T >::midpoints_on

Definition at line 29 of file primshpcenters.h.

Referenced by visualize_tetrahedron< T >::eval().

template<typename T >
bool visualize_tetrahedron< T >::outersphere_on

Definition at line 40 of file primshpcenters.h.

Referenced by visualize_tetrahedron< T >::eval().


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

Generated on Fri Mar 4 00:50:24 2011 for Chelton Evans Source by  doxygen 1.5.8