Mercurial Hosting > traffic-intelligence
changeset 542:a3add9f751ef
added differentiate function for curvilinear trajectories and modified the addPosition functions
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Mon, 07 Jul 2014 16:54:10 -0400 |
parents | 048b43654870 |
children | cb213269d330 |
files | c/feature-based-tracking.cpp python/moving.py python/storage.py python/tests/moving.txt |
diffstat | 4 files changed, 37 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
diff -r 048b43654870 -r a3add9f751ef c/feature-based-tracking.cpp --- a/c/feature-based-tracking.cpp Mon Jul 07 12:30:46 2014 -0400 +++ b/c/feature-based-tracking.cpp Mon Jul 07 16:54:10 2014 -0400 @@ -374,6 +374,8 @@ } else if (params.groupFeatures) { cout << "The program groups features" << endl; groupFeatures(params); + } else { + cout << "Main option missing or misspelt" << endl; } return 0;
diff -r 048b43654870 -r a3add9f751ef python/moving.py --- a/python/moving.py Mon Jul 07 12:30:46 2014 -0400 +++ b/python/moving.py Mon Jul 07 16:54:10 2014 -0400 @@ -541,10 +541,12 @@ return Trajectory([[a-b for a,b in zip(self.getXCoordinates(),traj2.getXCoordinates())], [a-b for a,b in zip(self.getYCoordinates(),traj2.getYCoordinates())]]) - def differentiate(self): + def differentiate(self, doubleLastPosition = False): diff = Trajectory() for i in xrange(1, self.length()): diff.addPosition(self[i]-self[i-1]) + if doubleLastPosition: + diff.addPosition(diff[-1]) return diff def norm(self): @@ -654,15 +656,30 @@ def getLanes(self): return self.lanes - def addPosition(self, s, y, lane): + def addPositionSYL(self, s, y, lane): self.addPositionXY(s,y) self.lanes.append(lane) + def addPosition(self, p): + 'Adds position in the point format for curvilinear of list with 3 values' + self.addPositionSYL(p[0], p[1], p[2]) + def setPosition(self, i, s, y, lane): self.setPositionXY(i, s, y) if i < self.__len__(): self.lanes[i] = lane + def differentiate(self, doubleLastPosition = False): + diff = CurvilinearTrajectory() + p1 = self[0] + for i in xrange(1, self.length()): + p2 = self[i] + diff.addPositionSYL(p2[0]-p1[0], p2[1]-p1[1], p1[2]) + p1=p2 + if doubleLastPosition: + diff.addPosition(diff[-1]) + return diff + def getIntersections(self, S1, lane = None): '''Returns a list of the indices at which the trajectory goes past the curvilinear coordinate S1
diff -r 048b43654870 -r a3add9f751ef python/storage.py --- a/python/storage.py Mon Jul 07 12:30:46 2014 -0400 +++ b/python/storage.py Mon Jul 07 16:54:10 2014 -0400 @@ -452,7 +452,7 @@ objects[objNum].curvilinearPositions = moving.CurvilinearTrajectory() if (warmUpLastInstant == None or firstInstants[objNum] >= warmUpLastInstant) and objNum in objects: objects[objNum].timeInterval.last = instant - objects[objNum].curvilinearPositions.addPosition(s, y, lane) + objects[objNum].curvilinearPositions.addPositionSYL(s, y, lane) return objects.values() @@ -504,7 +504,7 @@ else: obj.laneNums.append(int(numbers[13])) obj.positions.addPositionXY(float(numbers[6]), float(numbers[7])) - obj.curvilinearPositions.addPosition(float(numbers[5]), float(numbers[4]), obj.laneNums[-1]) + obj.curvilinearPositions.addPositionSYL(float(numbers[5]), float(numbers[4]), obj.laneNums[-1]) obj.speeds.append(float(numbers[11])) obj.precedingVehicles.append(int(numbers[14])) obj.followingVehicles.append(int(numbers[15]))
diff -r 048b43654870 -r a3add9f751ef python/tests/moving.txt --- a/python/tests/moving.txt Mon Jul 07 12:30:46 2014 -0400 +++ b/python/tests/moving.txt Mon Jul 07 16:54:10 2014 -0400 @@ -77,6 +77,14 @@ >>> t1.getTrajectoryInPolygonNoShapely(np.array([[10,10],[14,10],[14,13],[10,13]])).length() 0 +>>> t1.differentiate() +(1.000000,3.000000) (1.000000,3.000000) +>>> t1.differentiate(True) +(1.000000,3.000000) (1.000000,3.000000) (1.000000,3.000000) +>>> t1 = Trajectory([[0.5,1.5,3.5],[0.5,2.5,7.5]]) +>>> t1.differentiate() +(1.000000,2.000000) (2.000000,5.000000) + >>> from utils import LCSS >>> lcss = LCSS(lambda x,y: Point.distanceNorm2(x,y) <= 0.1) >>> Trajectory.lcss(t1, t1, lcss) @@ -102,6 +110,12 @@ >>> Point.timeToCollision(p2, p1, v2, v1, 0.) == None True +>>> t = CurvilinearTrajectory(S = [1., 2., 3., 5.], Y = [0.5, 0.5, 0.6, 0.7], lanes = ['1']*4) +>>> t.differentiate() # doctest:+ELLIPSIS +[1.0, 0.0, '1'] [1.0, 0.099..., '1'] [2.0, 0.099..., '1'] +>>> t.differentiate(True) # doctest:+ELLIPSIS +[1.0, 0.0, '1'] [1.0, 0.099..., '1'] [2.0, 0.099..., '1'] [2.0, 0.099..., '1'] + >>> o1 = MovingObject(positions = Trajectory([[0]*3,[2]*3]), velocities = Trajectory([[0]*3,[1]*3])) >>> o1.classifyUserTypeSpeedMotorized(0.5, np.median) >>> userTypeNames[o1.getUserType()]