diff python/moving.py @ 203:e2f31813ade6

added code to display trajectories on videa
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 06 Mar 2012 18:10:19 -0500
parents c06379f25ab8
children ada6e8fbe4c6
line wrap: on
line diff
--- a/python/moving.py	Mon Mar 05 02:55:19 2012 -0500
+++ b/python/moving.py	Tue Mar 06 18:10:19 2012 -0500
@@ -153,6 +153,9 @@
     def aslist(self):
         return [self.x, self.y]
 
+    def astuple(self):
+        return (self.x, self.y)
+
     def project(self, homography):
         from numpy.core.multiarray import array
         projected = cvutils.projectArray(homography, array([[self.x], [self.y]]))
@@ -257,7 +260,7 @@
     the class is iterable.'''
 
     def __init__(self, positions=None):
-        if positions:
+        if positions != None:
             self.positions = positions
         else:
             self.positions = [[],[]]
@@ -287,6 +290,9 @@
             self.iterInstantNum += 1
             return self[self.iterInstantNum-1]
 
+    def length(self):
+        return len(self.positions[0])
+
     def addPositionXY(self, x, y):
         self.positions[0].append(x)
         self.positions[1].append(y)
@@ -295,24 +301,32 @@
         self.addPositionXY(p.x, p.y)
 
     @staticmethod
-    def _draw(positions, options = '', withOrigin = False):
+    def _draw(positions, options = '', withOrigin = False, lastCoordinate = None):
         from matplotlib.pylab import plot
-        plot(positions[0], positions[1], options)
+        if lastCoordinate == None:
+            plot(positions[0], positions[1], options)
+        elif 0 <= lastCoordinate <= len(positions[0]):
+            plot(positions[0][:lastCoordinate], positions[1][:lastCoordinate], options)
         if withOrigin:
             plot([positions[0][0]], [positions[1][0]], 'ro')
 
+    def project(self, homography):
+        from numpy.core.multiarray import array
+        projected = cvutils.projectArray(homography, array(self.positions))
+        return Trajectory(projected)
+
     def draw(self, options = '', withOrigin = False):
         Trajectory._draw(self.positions, options, withOrigin)
 
-    def drawOnImage(self, nPixelsPerUnitDistance, imageHeight, options = '', withOrigin = False):
+    def drawAt(self, lastCoordinate, options = '', withOrigin = False):
+        Trajectory._draw(self.positions, options, withOrigin, lastCoordinate)
+
+    def drawOnWorldImage(self, nPixelsPerUnitDistance, imageHeight, options = '', withOrigin = False):
         from matplotlib.pylab import plot
         imgPositions = [[x*nPixelsPerUnitDistance for x in self.positions[0]],
                         [-x*nPixelsPerUnitDistance+imageHeight for x in self.positions[1]]]
         Trajectory._draw(imgPositions, options, withOrigin)
 
-    def length(self):
-        return len(self.positions[0])
-
     def getXCoordinates(self):
         return self.positions[0]
 
@@ -478,8 +492,8 @@
     def draw(self, options = '', withOrigin = False):
         self.positions.draw(options, withOrigin)
 
-    def drawOnImage(self, nPixelsPerUnitDistance, imageHeight, options = '', withOrigin = False):
-        self.positions.drawOnImage(nPixelsPerUnitDistance, imageHeight, options, withOrigin)
+    def drawWorldOnImage(self, nPixelsPerUnitDistance, imageHeight, options = '', withOrigin = False):
+        self.positions.drawWorldOnImage(nPixelsPerUnitDistance, imageHeight, options, withOrigin)
 
     def getInstantsCrossingLane(self, p1, p2):
         '''Returns the instant(s)