Mercurial Hosting > traffic-intelligence
diff python/prediction.py @ 939:a2f3f3ca241e
work in progress
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Mon, 17 Jul 2017 17:56:52 -0400 |
parents | b67a784beb69 |
children | d8ab183a7351 |
line wrap: on
line diff
--- a/python/prediction.py Mon Jul 17 16:11:18 2017 -0400 +++ b/python/prediction.py Mon Jul 17 17:56:52 2017 -0400 @@ -72,20 +72,30 @@ to the ratio of the user instantaneous speed and the trajectory closest speed)''' def __init__(self, initialPosition, initialVelocity, prototypeTrajectory, constantSpeed = False, probability = 1.): + ''' prototypeTrajectory is a MovingObject''' self.prototypeTrajectory = prototypeTrajectory self.constantSpeed = constantSpeed self.probability = probability self.predictedPositions = {0: initialPosition} - self.closestPointIdx = prototypeTrajectory.getClosestPoint(initialPosition) - self.deltaPosition = prototypeTrajectory[self.closestPointIdx]-initialPosition - self.initialSpeed = initialVelocity.norm() + self.closestPointIdx = prototypeTrajectory.getPositions().getClosestPoint(initialPosition) + self.deltaPosition = initialPosition-prototypeTrajectory.getPositionAt(self.closestPointIdx) + self.initialSpeed = initialVelocity.norm2() #self.predictedSpeedOrientations = {0: moving.NormAngle(moving.NormAngle.fromPoint(initialVelocity).norm, findNearestParams(initialPosition,prototypeTrajectory)[1])}#moving.NormAngle.fromPoint(initialVelocity)} def predictPosition(self, nTimeSteps): if nTimeSteps > 0 and not nTimeSteps in self.predictedPositions.keys(): if self.constantSpeed: # calculate cumulative distance - pass + traj = self.prototypeTrajectory.getPositions() + traveledDistance = nTimeSteps*self.initialSpeed + traj.getCumulativeDistance(self.closestPointIdx) + i = self.closestPointIdx + while i < traj.length() and traj.getCumulativeDistance(i) < traveledDistance: + i += 1 + if i == traj.length(): + v = self.prototypeTrajectory.getVelocityAt(-1) + self.predictedPositions[nTimeSteps] = self.deltaPosition+traj[i-1]+v*((traveledDistance-traj.getCumulativeDistance(i-1))/v.norm2()) + else: + self.predictedPositions[nTimeSteps] = self.deltaPosition+traj[i-1]+(traj[i]-traj[i-1])*((traveledDistance-traj.getCumulativeDistance(i-1))/traj.getDistance(i-1)) else: # see c++ code, calculate ratio speedNorm= self.predictedSpeedOrientations[0].norm instant=findNearestParams(self.predictedPositions[0],self.prototypeTrajectory)[0]