collisiondetectors/CD_LinearDiscrete.cpp

Go to the documentation of this file.
00001 //## begin module%378A7A6703AB.cm preserve=no
00002 //        %X% %Q% %Z% %W%
00003 //## end module%378A7A6703AB.cm
00004 
00005 //## begin module%378A7A6703AB.cp preserve=no
00006 //## end module%378A7A6703AB.cp
00007 
00008 //## Module: CD_LinearDiscrete%378A7A6703AB; Pseudo Package body
00009 //## Source file: C:\project\mpk\code\CollisionDetectors\CD_LinearDiscrete.cpp
00010 
00011 //## begin module%378A7A6703AB.additionalIncludes preserve=no
00012 //## end module%378A7A6703AB.additionalIncludes
00013 
00014 //## begin module%378A7A6703AB.includes preserve=yes
00015 #include <math.h>
00016 //## end module%378A7A6703AB.includes
00017 
00018 // CD_LinearDiscrete
00019 #include "CollisionDetectors\CD_LinearDiscrete.h"
00020 // Universe
00021 #include "Universe\Universe.h"
00022 //## begin module%378A7A6703AB.additionalDeclarations preserve=yes
00023 //## end module%378A7A6703AB.additionalDeclarations
00024 
00025 
00026 // Class CD_LinearDiscrete 
00027 
00028 
00029 CD_LinearDiscrete::CD_LinearDiscrete (const CD_LinearDiscrete& right)
00030   //## begin CD_LinearDiscrete::CD_LinearDiscrete%931798972.hasinit preserve=no
00031   //## end CD_LinearDiscrete::CD_LinearDiscrete%931798972.hasinit
00032   //## begin CD_LinearDiscrete::CD_LinearDiscrete%931798972.initialization preserve=yes
00033   :     
00034         CollisionDetectorBase( right ),
00035         CD_Linear( right )
00036   //## end CD_LinearDiscrete::CD_LinearDiscrete%931798972.initialization
00037 {
00038   //## begin CD_LinearDiscrete::CD_LinearDiscrete%931798972.body preserve=yes
00039   //## end CD_LinearDiscrete::CD_LinearDiscrete%931798972.body
00040 }
00041 
00042 CD_LinearDiscrete::CD_LinearDiscrete (const Universe& universe)
00043   //## begin CD_LinearDiscrete::CD_LinearDiscrete%931798973.hasinit preserve=no
00044   //## end CD_LinearDiscrete::CD_LinearDiscrete%931798973.hasinit
00045   //## begin CD_LinearDiscrete::CD_LinearDiscrete%931798973.initialization preserve=yes
00046   :     
00047         CollisionDetectorBase( universe ),
00048         CD_Linear( universe )
00049   //## end CD_LinearDiscrete::CD_LinearDiscrete%931798973.initialization
00050 {
00051   //## begin CD_LinearDiscrete::CD_LinearDiscrete%931798973.body preserve=yes
00052 
00053         //set up the resolution properly
00054         resolution.SetLength( universe.DOF() ) ;
00055         for( int i = 0; i < universe.DOF(); i++ )
00056         {
00057                 double max = universe.JointMax( i ) ;
00058                 double min = universe.JointMin( i ) ;
00059                 resolution[ i ] = ( max - min ) / 100.0 ;
00060         }
00061   //## end CD_LinearDiscrete::CD_LinearDiscrete%931798973.body
00062 }
00063 
00064 
00065 CD_LinearDiscrete::~CD_LinearDiscrete()
00066 {
00067   //## begin CD_LinearDiscrete::~CD_LinearDiscrete%.body preserve=yes
00068   //## end CD_LinearDiscrete::~CD_LinearDiscrete%.body
00069 }
00070 
00071 
00072 
00073 //## Other Operations (implementation)
00074 void CD_LinearDiscrete::SetResolution (const VectorN& resolution)
00075 {
00076   //## begin CD_LinearDiscrete::SetResolution%931798968.body preserve=yes
00077         this->resolution = resolution ;
00078   //## end CD_LinearDiscrete::SetResolution%931798968.body
00079 }
00080 
00081 void CD_LinearDiscrete::SetResolution (const unsigned int joint, const double resolution)
00082 {
00083   //## begin CD_LinearDiscrete::SetResolution%931798969.body preserve=yes
00084         this->resolution[ joint ] = resolution ;
00085   //## end CD_LinearDiscrete::SetResolution%931798969.body
00086 }
00087 
00088 bool CD_LinearDiscrete::IsInterferingLinear (const Configuration& c1, const Configuration& c2)
00089 {
00090   //## begin CD_LinearDiscrete::IsInterferingLinear%931798974.body preserve=yes
00091         IncrementLinearStat();
00092         int steps = 1 ;
00093                 
00094         Configuration offset = ( c2 - c1 ) ;
00095         for( int i = 0; i < offset.DOF(); i++ )
00096         {
00097                 double offsetI = offset[ i ];
00098                 double resolutionI = resolution[ i ];
00099                 int newSteps = abs( ceil( offsetI / resolutionI ) );
00100                 if( steps < newSteps )
00101                 {
00102                         steps = newSteps ;
00103                 }
00104         }
00105 
00106         offset = offset / steps ;
00107         Configuration current = c1 ;
00108         for( i = 0; i <= steps; i++ )
00109         {
00110                 if( IsInterfering( current ) )
00111                 {
00112                         lastIntersection = current ;
00113                         lastValid = lastIntersection - offset;
00114                         return true ;
00115                 }
00116                 current += offset ;
00117         }
00118         lastValid = current;
00119         lastIntersection = current ;
00120         return false ;
00121   //## end CD_LinearDiscrete::IsInterferingLinear%931798974.body
00122 }
00123 
00124 // Additional Declarations
00125   //## begin CD_LinearDiscrete%378A7A6703AB.declarations preserve=yes
00126   //## end CD_LinearDiscrete%378A7A6703AB.declarations
00127 
00128 //## begin module%378A7A6703AB.epilog preserve=yes
00129 //## end module%378A7A6703AB.epilog

Generated on Sat Apr 1 21:30:36 2006 for Motion Planning Kernel by  doxygen 1.4.6-NO