changeset 542:a3add9f751ef

added differentiate function for curvilinear trajectories and modified the addPosition functions
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 07 Jul 2014 16:54:10 -0400
parents 048b43654870
children cb213269d330
files c/feature-based-tracking.cpp python/moving.py python/storage.py python/tests/moving.txt
diffstat 4 files changed, 37 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/c/feature-based-tracking.cpp	Mon Jul 07 12:30:46 2014 -0400
+++ b/c/feature-based-tracking.cpp	Mon Jul 07 16:54:10 2014 -0400
@@ -374,6 +374,8 @@
   } else if (params.groupFeatures) {
     cout << "The program groups features" << endl;
     groupFeatures(params);
+  } else {
+    cout << "Main option missing or misspelt" << endl;
   }
 
   return 0;
--- a/python/moving.py	Mon Jul 07 12:30:46 2014 -0400
+++ b/python/moving.py	Mon Jul 07 16:54:10 2014 -0400
@@ -541,10 +541,12 @@
             return Trajectory([[a-b for a,b in zip(self.getXCoordinates(),traj2.getXCoordinates())],
                                [a-b for a,b in zip(self.getYCoordinates(),traj2.getYCoordinates())]])
 
-    def differentiate(self):
+    def differentiate(self, doubleLastPosition = False):
         diff = Trajectory()
         for i in xrange(1, self.length()):
             diff.addPosition(self[i]-self[i-1])
+        if doubleLastPosition:
+            diff.addPosition(diff[-1])
         return diff
 
     def norm(self):
@@ -654,15 +656,30 @@
     def getLanes(self):
         return self.lanes
 
-    def addPosition(self, s, y, lane):
+    def addPositionSYL(self, s, y, lane):
         self.addPositionXY(s,y)
         self.lanes.append(lane)
 
+    def addPosition(self, p):
+        'Adds position in the point format for curvilinear of list with 3 values'
+        self.addPositionSYL(p[0], p[1], p[2])
+
     def setPosition(self, i, s, y, lane):
         self.setPositionXY(i, s, y)
         if i < self.__len__():
             self.lanes[i] = lane
 
+    def differentiate(self, doubleLastPosition = False):
+        diff = CurvilinearTrajectory()
+        p1 = self[0]
+        for i in xrange(1, self.length()):
+            p2 = self[i]
+            diff.addPositionSYL(p2[0]-p1[0], p2[1]-p1[1], p1[2])
+            p1=p2
+        if doubleLastPosition:
+            diff.addPosition(diff[-1])
+        return diff
+
     def getIntersections(self, S1, lane = None):
         '''Returns a list of the indices at which the trajectory 
         goes past the curvilinear coordinate S1
--- a/python/storage.py	Mon Jul 07 12:30:46 2014 -0400
+++ b/python/storage.py	Mon Jul 07 16:54:10 2014 -0400
@@ -452,7 +452,7 @@
                     objects[objNum].curvilinearPositions = moving.CurvilinearTrajectory()
         if (warmUpLastInstant == None or firstInstants[objNum] >= warmUpLastInstant) and objNum in objects:
             objects[objNum].timeInterval.last = instant
-            objects[objNum].curvilinearPositions.addPosition(s, y, lane)
+            objects[objNum].curvilinearPositions.addPositionSYL(s, y, lane)
 
     return objects.values()
     
@@ -504,7 +504,7 @@
         else:
             obj.laneNums.append(int(numbers[13]))
             obj.positions.addPositionXY(float(numbers[6]), float(numbers[7]))
-            obj.curvilinearPositions.addPosition(float(numbers[5]), float(numbers[4]), obj.laneNums[-1])
+            obj.curvilinearPositions.addPositionSYL(float(numbers[5]), float(numbers[4]), obj.laneNums[-1])
             obj.speeds.append(float(numbers[11]))
             obj.precedingVehicles.append(int(numbers[14]))
             obj.followingVehicles.append(int(numbers[15]))
--- a/python/tests/moving.txt	Mon Jul 07 12:30:46 2014 -0400
+++ b/python/tests/moving.txt	Mon Jul 07 16:54:10 2014 -0400
@@ -77,6 +77,14 @@
 >>> t1.getTrajectoryInPolygonNoShapely(np.array([[10,10],[14,10],[14,13],[10,13]])).length()
 0
 
+>>> t1.differentiate()
+(1.000000,3.000000) (1.000000,3.000000)
+>>> t1.differentiate(True)
+(1.000000,3.000000) (1.000000,3.000000) (1.000000,3.000000)
+>>> t1 = Trajectory([[0.5,1.5,3.5],[0.5,2.5,7.5]])
+>>> t1.differentiate()
+(1.000000,2.000000) (2.000000,5.000000)
+
 >>> from utils import LCSS
 >>> lcss = LCSS(lambda x,y: Point.distanceNorm2(x,y) <= 0.1)
 >>> Trajectory.lcss(t1, t1, lcss)
@@ -102,6 +110,12 @@
 >>> Point.timeToCollision(p2, p1, v2, v1, 0.) == None
 True
 
+>>> t = CurvilinearTrajectory(S = [1., 2., 3., 5.], Y = [0.5, 0.5, 0.6, 0.7], lanes = ['1']*4)
+>>> t.differentiate() # doctest:+ELLIPSIS
+[1.0, 0.0, '1'] [1.0, 0.099..., '1'] [2.0, 0.099..., '1']
+>>> t.differentiate(True) # doctest:+ELLIPSIS
+[1.0, 0.0, '1'] [1.0, 0.099..., '1'] [2.0, 0.099..., '1'] [2.0, 0.099..., '1']
+
 >>> o1 = MovingObject(positions = Trajectory([[0]*3,[2]*3]), velocities = Trajectory([[0]*3,[1]*3]))
 >>> o1.classifyUserTypeSpeedMotorized(0.5, np.median)
 >>> userTypeNames[o1.getUserType()]