Files Classes Functions Hierarchy
#include <d3mincentroid2.h>
Public Member Functions | |
| d3mincentroid2 (d3tess &tess_) | |
| boolc | eval (uintc a, uintc b) |
Definition at line 14 of file d3mincentroid2.h.
| d3mincentroid2::d3mincentroid2 | ( | d3tess & | tess_ | ) |
Reimplemented from d3minoperator.
Definition at line 19 of file d3mincentroid2.cpp.
References d3tess::flip(), d3tess::isconvex(), simplexD2linked::niInverse(), simplexD2linked::pi, d3tess::pt, d3minoperator::tess, and d3tess::vi.
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 }
1.5.8