Files Classes Functions Hierarchy
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
1.5.8