complex.cpp

00001 #include <algorithms/complex.h>
00002 
00003 namespace vvcomplex
00004 {
00005   bool FindWallMin(Point3d &v, const Point3d& v1, const Point3d& v2, double mw, double *displacement)
00006   {
00007     // Check if nw is exactly zero, in which case we make a quick exit
00008     if(mw == 0)
00009     {
00010       if(displacement) *displacement = 0;
00011       return true;
00012     }
00013 
00014     Point3d v1v2 = v2 - v1;
00015     double v1v2l = norm(v1v2);
00016     v1v2 /= v1v2l;
00017 
00018     if(v1v2l < (2+VVE_REL_EPSILON)*mw)
00019     {
00020       v = (v1+v2)/2;
00021       return false;
00022     }
00023 
00024     double len = (v - v1) * v1v2;
00025     if(len < mw)
00026     {
00027       v = v1 + v1v2 * mw;
00028       if(displacement) *displacement = mw-len;
00029     }
00030     else if(len > v1v2l - mw)
00031     {
00032       v = v2 - v1v2 * mw;
00033       if(displacement) *displacement = len - v1v2l - mw;
00034     }
00035     else
00036       if(displacement) *displacement = 0;
00037     return true;
00038   }
00039 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Generated on Fri May 31 15:37:49 2013 for VVE by  doxygen 1.6.3