Mercurial Hosting > traffic-intelligence
changeset 317:d280b881e860
added indicator min distance
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 12 Apr 2013 18:03:04 -0400 |
parents | c5518a35df5f |
children | 82a8fba99bec 4b5fe2de1e8d |
files | python/events.py python/moving.py |
diffstat | 2 files changed, 22 insertions(+), 3 deletions(-) [+] |
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
--- a/python/moving.py Fri Apr 12 15:22:00 2013 -0400 +++ b/python/moving.py Fri Apr 12 18:03:04 2013 -0400 @@ -540,6 +540,7 @@ self.positions = positions self.geometry = geometry self.userType = userType + self.features = None # compute bounding polygon from trajectory def getObjectInTimeInterval(self, inter):