Mercurial Hosting > traffic-intelligence
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...