proj home

Files   Classes   Functions   Hierarchy  

d3mincentroid2.cpp

Go to the documentation of this file.
00001 
00002 #include <d3tess.h>
00003 #include <d3mincentroid2.h>
00004 
00005 
00006 
00007 typedef point2<double> pt2;
00008 typedef point3<double> pt3;
00009 
00010 #define SHOW(x) #x << '=' << (x)
00011 
00012 
00013 
00014 d3mincentroid2::d3mincentroid2(d3tess & tess_)
00015   : d3minoperator(tess_)
00016 {
00017 }
00018 
00019 boolc d3mincentroid2::eval(uintc a, uintc b)
00020 {
00021   if (tess.isconvex(a,b)==false)
00022     return false;
00023 
00024   simplexD2linked const & A(tess.vi[a]);
00025   simplexD2linked const & B(tess.vi[b]);
00026 
00027   uint ai = A.niInverse(b);
00028   uint bi = B.niInverse(a);
00029 
00030   uint p[4];
00031   p[0] = A.pi[ai];
00032   p[3] = B.pi[bi];
00033   p[1] = A.pi[(ai+1)%3];
00034   p[2] = A.pi[(ai+2)%3];
00035 
00036   vector<pt3> const & pt(tess.pt);
00037 
00038   pt2 P0(pt[p[0]]);
00039   pt2 P1(pt[p[1]]);
00040   pt2 P2(pt[p[2]]);
00041   pt2 P3(pt[p[3]]);
00042 
00043   // Calculate the centroid.
00044   pt2 C0(P0);
00045   C0 += P1;
00046   C0 += P2;
00047   C0 *= (1.0/3.0);
00048 
00049   double radius;
00050   radius = min((C0-P0).distance(),(C0-P1).distance());
00051   radius = min((C0-P0).distance(),radius);
00052 
00053   if ((C0-P3).dot() > radius*radius )
00054     return false;
00055 
00056   tess.flip(a,b);
00057 
00058   return true;
00059 }
00060 
00061 
00062 
00063 
00064 
00065 

Generated on Fri Mar 4 00:49:26 2011 for Chelton Evans Source by  doxygen 1.5.8