comparison python/moving.py @ 67:ded58c424783

added indicator computation and modified severity indicator constructor
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Sun, 07 Nov 2010 04:21:26 -0500
parents 56fe4ef1377e
children 846fa9dc47de
comparison
equal deleted inserted replaced
66:56fe4ef1377e 67:ded58c424783
64 def __iter__(self): 64 def __iter__(self):
65 self.iterInstantNum = 0 65 self.iterInstantNum = 0
66 return self 66 return self
67 67
68 def next(self): 68 def next(self):
69 if self.iterInstantNum >= self.length(): 69 if self.iterInstantNum >= self.length()-1:
70 raise StopIteration 70 raise StopIteration
71 else: 71 else:
72 self.iterInstantNum += 1 72 self.iterInstantNum += 1
73 return self[self.iterInstantNum] 73 return self[self.iterInstantNum]
74 74
135 '2-norm distance (Euclidean distance)' 135 '2-norm distance (Euclidean distance)'
136 return sqrt(self.norm2Squared()) 136 return sqrt(self.norm2Squared())
137 137
138 def aslist(self): 138 def aslist(self):
139 return [self.x, self.y] 139 return [self.x, self.y]
140
141 @staticmethod
142 def dot(p1, p2):
143 return p1.x*p2.x+p1.y*p2.y
140 144
141 @staticmethod 145 @staticmethod
142 def distanceNorm2(p1, p2): 146 def distanceNorm2(p1, p2):
143 return (p1-p2).norm2() 147 return (p1-p2).norm2()
144 148
304 def getPositionAt(self, i): 308 def getPositionAt(self, i):
305 return self.positions[i] 309 return self.positions[i]
306 310
307 def getVelocityAt(self, i): 311 def getVelocityAt(self, i):
308 return self.velocities[i] 312 return self.velocities[i]
313
314 def getPositionAtInstant(self, i):
315 return self.positions[i-self.getFirstInstant()]
316
317 def getVelocityAtInstant(self, i):
318 return self.velocities[i-self.getFirstInstant()]
309 319
310 def getXCoordinates(self): 320 def getXCoordinates(self):
311 return self.positions.getXCoordinates() 321 return self.positions.getXCoordinates()
312 322
313 def getYCoordinates(self): 323 def getYCoordinates(self):
332 else: 342 else:
333 ratio = 0 343 ratio = 0
334 instants.append(self.timeInterval[i]*(1-ratio)+ratio*self.timeInterval[i+1]) 344 instants.append(self.timeInterval[i]*(1-ratio)+ratio*self.timeInterval[i+1])
335 return instants 345 return instants
336 346
337 # def computeVelocities(self): 347 @staticmethod
348 def collisionCourseDotProduct(movingObject1, movingObject2, instant):
349 'A positive result indicates that the road users are getting closer'
350 deltap = movingObject1.getPositionAtInstant(instant)-movingObject2.getPositionAtInstant(instant)
351 deltav = movingObject2.getVelocityAtInstant(instant)-movingObject1.getVelocityAtInstant(instant)
352 return moving.Point.dot(deltap, deltav)
353
354 @staticmethod
355 def collisionCourseCosine(movingObject1, movingObject2, instant):
356 'A positive result indicates that the road users are getting closer'
357 deltap = movingObject1.getPositionAtInstant(instant)-movingObject2.getPositionAtInstant(instant)
358 deltav = movingObject2.getVelocityAtInstant(instant)-movingObject1.getVelocityAtInstant(instant)
359 return moving.Point.dot(deltap, deltav)/(deltap.norm2()*deltav.norm2())
338 360
339 def plotRoadUsers(objects, colors): 361 def plotRoadUsers(objects, colors):
340 '''Colors is a PlottingPropertyValues instance''' 362 '''Colors is a PlottingPropertyValues instance'''
341 from matplotlib.pyplot import figure, axis 363 from matplotlib.pyplot import figure, axis
342 figure() 364 figure()
364 class SeverityIndicator(TemporalIndicator): 386 class SeverityIndicator(TemporalIndicator):
365 '''Class for severity indicators 387 '''Class for severity indicators
366 field mostSevereIsMax is True 388 field mostSevereIsMax is True
367 if the most severe value taken by the indicator is the maximum''' 389 if the most severe value taken by the indicator is the maximum'''
368 390
369 def __init__(self, name, values, mostSevereIsMax=True, ignoredValue = None): 391 def __init__(self, name, values, timeInterval=None, mostSevereIsMax=True, ignoredValue = None):
370 # , timeInterval=None # implement later 392 TemporalIndicator.__init__(self, name, values, timeInterval)
371 TemporalIndicator.__init__(self, name, values, timeInterval=None)
372 self.mostSevereIsMax = mostSevereIsMax 393 self.mostSevereIsMax = mostSevereIsMax
373 self.ignoredValue = ignoredValue 394 self.ignoredValue = ignoredValue
374 395
375 def getMostSevereValue(self, minNInstants=1): 396 def getMostSevereValue(self, minNInstants=1):
376 from matplotlib.mlab import find 397 from matplotlib.mlab import find