Files Classes Functions Hierarchy
00001 00002 #include <simplexD2linked.h> 00003 #include <d3tess.h> 00004 00005 #include <d3minrecursive.h> 00006 00007 d3minrecursive::d3minrecursive(d3tess & _tess, d3minoperator * _minimizer) 00008 : tess(_tess), minimizer(_minimizer) 00009 { 00010 } 00011 00012 00013 d3minrecursive::~d3minrecursive() 00014 { 00015 delete minimizer; 00016 minimizer=0; 00017 } 00018 00019 bool const d3minrecursive::minimizesimplex(uintc a) 00020 { 00021 simplexD2linked & A(tess.vi[a]); 00022 00023 bool res; 00024 00025 uint nb; 00026 for (uint i=0; i<3; ++i) 00027 { 00028 nb = A.ni[i]; 00029 res = minimizer->eval(a,nb); 00030 if (res) 00031 { 00032 process.push_back(nb); 00033 process.push_back(a); 00034 return true; 00035 } 00036 } 00037 00038 return false; 00039 } 00040 00041 00042 bool const d3minrecursive::eval(uintc a) 00043 { 00044 assert(a!=0); 00045 assert(a<tess.vi.size()); 00046 00047 process.clear(); 00048 00049 bool res = minimizesimplex(a); 00050 00051 uint sz=process.size(); 00052 if (sz==0) 00053 return res; 00054 00055 for (uint b; sz!=0; ) 00056 { 00057 b = process[sz-1]; 00058 process.pop_back(); 00059 00060 minimizesimplex(b); 00061 00062 sz = process.size(); 00063 } 00064 00065 return true; 00066 } 00067 00068 d3minrecursiveoperator::d3minrecursiveoperator 00069 ( 00070 d3tess & _tess, 00071 d3minoperator * _minimizer 00072 ) 00073 : d3minoperator(_tess), x(_tess,_minimizer) 00074 { 00075 } 00076 00077 bool const d3minrecursiveoperator::eval(uintc a, uintc b) 00078 { 00079 //cout << "d3minrecursiveoperator::eval: " << a << " " << b << endl; 00080 bool res(false); 00081 00082 if (x.eval(a)) 00083 res=true; 00084 00085 if (x.eval(b)) 00086 res=true; 00087 00088 return res; 00089 } 00090 00091 d3minrecursiveoperator::~d3minrecursiveoperator() 00092 { 00093 } 00094 00095 00096 00097
1.5.8