Files Classes Functions Hierarchy
#include <primshpcenters.h>
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 |
Definition at line 20 of file primshpcenters.h.
| 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 }
| 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 }
| bool visualize_tetrahedron< T >::altitude_on |
Definition at line 36 of file primshpcenters.h.
| bool visualize_tetrahedron< T >::altitude_to_point_on |
| bool visualize_tetrahedron< T >::innersphere_on |
Definition at line 38 of file primshpcenters.h.
| bool visualize_tetrahedron< T >::mesh_on |
| bool visualize_tetrahedron< T >::midpoint_center_on |
| bool visualize_tetrahedron< T >::midpoints_on |
| bool visualize_tetrahedron< T >::outersphere_on |
1.5.8