comparison python/events.py @ 317:d280b881e860

added indicator min distance
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 12 Apr 2013 18:03:04 -0400
parents f7ca78a11ea6
children 419f30491a4b 4b5fe2de1e8d
comparison
equal deleted inserted replaced
316:c5518a35df5f 317:d280b881e860
49 speedDifferentials = {} 49 speedDifferentials = {}
50 for instant in self.timeInterval: 50 for instant in self.timeInterval:
51 deltap = self.movingObject1.getPositionAtInstant(instant)-self.movingObject2.getPositionAtInstant(instant) 51 deltap = self.movingObject1.getPositionAtInstant(instant)-self.movingObject2.getPositionAtInstant(instant)
52 deltav = self.movingObject2.getVelocityAtInstant(instant)-self.movingObject1.getVelocityAtInstant(instant) 52 deltav = self.movingObject2.getVelocityAtInstant(instant)-self.movingObject1.getVelocityAtInstant(instant)
53 collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav) 53 collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav)
54 distances[instant] = deltap.norm2() # todo compute closest feature distance, if features 54 distances[instant] = deltap.norm2()
55 speedDifferentials[instant] = deltav.norm2() 55 speedDifferentials[instant] = deltav.norm2()
56 if collisionCourseDotProducts[instant] > 0: 56 if collisionCourseDotProducts[instant] > 0:
57 collisionCourseCosines[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant])) 57 collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant]))
58 58
59 # todo shorten the time intervals based on the interaction definition 59 # todo shorten the time intervals based on the interaction definition
60 self.addIndicator(indicators.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts)) 60 self.addIndicator(indicators.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts))
61 self.addIndicator(indicators.SeverityIndicator('Distance', distances)) 61 self.addIndicator(indicators.SeverityIndicator('Distance', distances))
62 self.addIndicator(indicators.SeverityIndicator('Speed Differential', speedDifferentials)) 62 self.addIndicator(indicators.SeverityIndicator('Speed Differential', speedDifferentials))
63 self.addIndicator(indicators.SeverityIndicator('Collision Course Cosine', collisionCourseCosines)) 63 self.addIndicator(indicators.SeverityIndicator('Collision Course Angle', collisionCourseAngles))
64 64
65 # todo test for interaction instants and interval, compute indicators 65 # todo test for interaction instants and interval, compute indicators
66
67 # if we have features, compute other indicators
68 if self.movingObject1.features and self.movingObject2.features:
69 from scipy.spatial.distance import cdist
70 minDistance={}
71 for instant in self.timeInterval:
72 positions1 = [f.getPositionAtInstant(instant).astuple() for f in self.movingObject1.features if f.existsAtInstant(instant)]
73 positions2 = [f.getPositionAtInstant(instant).astuple() for f in self.movingObject2.features if f.existsAtInstant(instant)]
74 distance = cdist(positions1, positions2, metric = 'euclidean')
75 minDistance[instant] = distance.min()
76 self.addIndicator(indicators.SeverityIndicator('Minimum Distance', minDistance))
77
78 def computeCollisionPoints(self, predictionParameters, collisionDistanceThreshold, timeHorizon):
79 if self.movingObject1.features and self.movingObject2.features:
80 collisionPoints = prediction.computeCollisions(self.movingObject1, self.movingObject2, predictionParameters, collisionDistanceThreshold, timeHorizon)
81 self.addIndicator(indicators.SeverityIndicator('collisionPoints', collisionPoints))
82 else:
83 print('Features not associated with objects')
66 84
67 def addVideoFilename(self,videoFilename): 85 def addVideoFilename(self,videoFilename):
68 self.videoFilename= videoFilename 86 self.videoFilename= videoFilename
69 87
70 def addInteractionType(self,interactionType): 88 def addInteractionType(self,interactionType):