diff c/Motion.cpp @ 176:9323427aa0a3

changed positions and velocities to shared pointers and renamed methods
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 27 Oct 2011 13:56:46 -0400
parents cde87a07eb58
children ae2286b1a3fd
line wrap: on
line diff
--- a/c/Motion.cpp	Wed Oct 26 19:09:50 2011 -0400
+++ b/c/Motion.cpp	Thu Oct 27 13:56:46 2011 -0400
@@ -13,12 +13,14 @@
 
 FeatureTrajectory::FeatureTrajectory(const int& frameNum, const cv::Point2f& p, const Mat& homography)
   : lost(false) {
+  positions = TrajectoryPoint2fPtr(new TrajectoryPoint2f());
+  velocities = TrajectoryPoint2fPtr(new TrajectoryPoint2f());
   addPoint(frameNum, p, homography);
 }
 
-bool FeatureTrajectory::smallDisplacement(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const {
+bool FeatureTrajectory::isDisplacementSmall(const unsigned int& nDisplacements, const float& minTotalFeatureDisplacement) const {
   bool result = false;
-  unsigned int nPositions = positions.size();
+  unsigned int nPositions = positions->size();
   if (nPositions > nDisplacements) {
     float disp = 0;
     for (unsigned int i=0; i<nDisplacements; i++)
@@ -28,9 +30,9 @@
   return result;
 }
 
-bool FeatureTrajectory::motionSmooth(const int& accelerationBound, const int& deviationBound) const {
+bool FeatureTrajectory::isMotionSmooth(const int& accelerationBound, const int& deviationBound) const {
   bool result = true;
-  unsigned int nPositions = positions.size();
+  unsigned int nPositions = positions->size();
   if (nPositions >= 3) {
     float ratio;
     if (displacementDistances[nPositions-2] > displacementDistances[nPositions-3])
@@ -38,7 +40,7 @@
     else
       ratio = displacementDistances[nPositions-3] / displacementDistances[nPositions-2];
 
-    float cosine = scalarProduct(velocities[nPositions-3],velocities[nPositions-2]) / (displacementDistances[nPositions-3] * displacementDistances[nPositions-2]);
+    float cosine = scalarProduct((*velocities)[nPositions-3],(*velocities)[nPositions-2]) / (displacementDistances[nPositions-3] * displacementDistances[nPositions-2]);
     
     result &= (ratio < accelerationBound) & (cosine > deviationBound);
   }
@@ -49,21 +51,21 @@
   Point2f pp = p;
   if (!homography.empty())
     pp = project(p, homography);
-  positions.add(frameNum, pp);
+  positions->add(frameNum, pp);
   computeMotionData(frameNum);
   assert(positions.size() == displacementDistances.size()+1);
   assert(positions.size() == velocities.size()+1);
 }
 
 void FeatureTrajectory::shorten(void) { 
-  positions.pop_back(); 
-  velocities.pop_back(); 
+  positions->pop_back(); 
+  velocities->pop_back(); 
   displacementDistances.pop_back();
 }
 
 void FeatureTrajectory::write(TrajectoryDBAccess<Point2f>& trajectoryDB, const string& positionsTableName, const string& velocitiesTableName) const {
-  trajectoryDB.write(positions, positionsTableName);
-  trajectoryDB.write(velocities, velocitiesTableName);
+  trajectoryDB.write(*positions, positionsTableName);
+  trajectoryDB.write(*velocities, velocitiesTableName);
 }
 
 #ifdef USE_OPENCV
@@ -71,14 +73,14 @@
 void FeatureTrajectory::draw(Mat& img, const Mat& homography, const Scalar& color) const {
   Point2f p1, p2;
   if (!homography.empty())
-    p1 = project(positions[0], homography);
+    p1 = project((*positions)[0], homography);
   else
-    p1 = positions[0];
-  for (unsigned int i=1; i<positions.size(); i++) {
+    p1 = (*positions)[0];
+  for (unsigned int i=1; i<positions->size(); i++) {
     if (!homography.empty())
-      p2 = project(positions[i], homography);
+      p2 = project((*positions)[i], homography);
     else
-      p2 = positions[i];
+      p2 = (*positions)[i];
     line(img, p1, p2, color, 1);
     p1 = p2;
   }
@@ -88,12 +90,12 @@
 // protected
 
 void FeatureTrajectory::computeMotionData(const int& frameNum) {
-  unsigned int nPositions = positions.size();
+  unsigned int nPositions = positions->size();
   if (nPositions >= 2) {
-    Point2f displacement = positions[nPositions-1] - positions[nPositions-2];
+    Point2f displacement = (*positions)[nPositions-1] - (*positions)[nPositions-2];
     //if (nPositions == 2) // duplicate first displacement so that positions and velocities have the same length
     //velocities.add(frameNum-1, displacement);
-    velocities.add(frameNum, displacement);
+    velocities->add(frameNum, displacement);
     float dist = norm(displacement);
     displacementDistances.push_back(dist);
   }