diff python/moving.py @ 27:44689029a86f

updated segmentIntersection and other
author Nicolas Saunier <nico@confins.net>
date Sat, 05 Dec 2009 15:40:28 -0500
parents 54d9cb0c902b
children 9ae709a2e8d0
line wrap: on
line diff
--- a/python/moving.py	Sat Dec 05 12:31:28 2009 -0500
+++ b/python/moving.py	Sat Dec 05 15:40:28 2009 -0500
@@ -25,17 +25,6 @@
     def __str__(self):
         return '%d %d'%(self.first, self.last)
 
-    def __iter__(self):
-        self.iterInstantNum = 0
-        return self
-
-    def next(self):
-        if self.iterInstantNum >= self.length():
-            raise StopIteration
-        else:
-            self.iterInstantNum += 1
-            return self.first+self.iterInstantNum
-
     def empty(self):
         '''
         >>> Interval().empty()
@@ -75,12 +64,28 @@
         '''Largest interval comprising self and interval2'''
         return TimeInterval(max(self.first, interval2.first), min(self.last, interval2.last))
 
-def TimeInterval(Interval):
+
+class TimeInterval(Interval):
     '''Temporal interval'''
 
     def __init__(self, first=0, last=-1):
         Interval.__init__(self, first, last, False)
 
+    def __getitem__(self, i):
+        if not self.empty():
+            return self.first+i
+
+    def __iter__(self):
+        self.iterInstantNum = 0
+        return self
+
+    def next(self):
+        if self.iterInstantNum >= self.length():
+            raise StopIteration
+        else:
+            self.iterInstantNum += 1
+            return self[self.iterInstantNum]
+
     def length(self):
         '''Returns the length of the interval
         
@@ -232,22 +237,19 @@
         '''Returns the instant(s) the object passes from one side of the segment to the other
         empty list if not'''
         instants = []
-        lane = [[p1[0],p2[0]], [p1[1],p2[1]]]
-
-        # refaire tout en points, marche pas
-        # self.positions[i] self.positions[i+1]
 
         for i in xrange(self.length()-1):
-            p = utils.segmentIntersection([self.positions[0][i:i+1],self.positions[1][i:i+1]], lane)
-            if p: # interpolate the instant
-                if self.positions[0][i] != self.positions[0][i+1]:
-                    ratio = (p[0]-self.positions[0][i])/(self.positions[0][i+1]-self.positions[0][i])
-                elif self.positions[1][i] != self.positions[1][i+1]:
-                    ratio = (p[1]-self.positions[1][i])/(self.positions[1][i+1]-self.positions[1][i])
+            p = utils.segmentIntersection(self.positions[i], self.positions[i+1], p1, p2)
+            if p:
+                if self.positions[i].x != self.positions[i+1].x:
+                    ratio = (p.x-self.positions[i].x)/(self.positions[i+1].x-self.positions[i].x)
+                elif self.positions[i].y != self.positions[i+1].y:
+                    ratio = (p.y-self.positions[i].y)/(self.positions[i+1].y-self.positions[i].y)
                 else:
                     ratio = 0
                 instants.append(self.timeInterval[i]*(1-ratio)+ratio*self.timeInterval[i+1])
         return instants
+
     # def computeVelocities(self):
 
 # need for a class representing the indicators, their units, how to print them in graphs...