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