diff 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
line wrap: on
line diff
--- a/python/events.py	Fri Apr 12 15:22:00 2013 -0400
+++ b/python/events.py	Fri Apr 12 18:03:04 2013 -0400
@@ -51,19 +51,37 @@
             deltap = self.movingObject1.getPositionAtInstant(instant)-self.movingObject2.getPositionAtInstant(instant)
             deltav = self.movingObject2.getVelocityAtInstant(instant)-self.movingObject1.getVelocityAtInstant(instant)
             collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav)
-            distances[instant] = deltap.norm2() # todo compute closest feature distance, if features
+            distances[instant] = deltap.norm2()
             speedDifferentials[instant] = deltav.norm2()
             if collisionCourseDotProducts[instant] > 0:
-                collisionCourseCosines[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant]))
+                collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant]))
 
         # todo shorten the time intervals based on the interaction definition
         self.addIndicator(indicators.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts))
         self.addIndicator(indicators.SeverityIndicator('Distance', distances))
         self.addIndicator(indicators.SeverityIndicator('Speed Differential', speedDifferentials))
-        self.addIndicator(indicators.SeverityIndicator('Collision Course Cosine', collisionCourseCosines))
+        self.addIndicator(indicators.SeverityIndicator('Collision Course Angle', collisionCourseAngles))
 
         # todo test for interaction instants and interval, compute indicators
 
+        # if we have features, compute other indicators
+        if self.movingObject1.features and self.movingObject2.features:
+            from scipy.spatial.distance import cdist
+            minDistance={}
+            for instant in self.timeInterval:
+                positions1 = [f.getPositionAtInstant(instant).astuple() for f in self.movingObject1.features if f.existsAtInstant(instant)]
+                positions2 = [f.getPositionAtInstant(instant).astuple() for f in self.movingObject2.features if f.existsAtInstant(instant)]
+                distance = cdist(positions1, positions2, metric = 'euclidean')
+                minDistance[instant] = distance.min()
+            self.addIndicator(indicators.SeverityIndicator('Minimum Distance', minDistance))
+
+    def computeCollisionPoints(self, predictionParameters, collisionDistanceThreshold, timeHorizon):
+        if self.movingObject1.features and self.movingObject2.features:
+            collisionPoints = prediction.computeCollisions(self.movingObject1, self.movingObject2, predictionParameters, collisionDistanceThreshold, timeHorizon)
+            self.addIndicator(indicators.SeverityIndicator('collisionPoints', collisionPoints))	
+        else:
+            print('Features not associated with objects')
+
     def addVideoFilename(self,videoFilename):
         self.videoFilename= videoFilename