SUMO - Simulation of Urban MObility
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
PositionVector.h
Go to the documentation of this file.
1
/****************************************************************************/
9
// A list of positions
10
/****************************************************************************/
11
// SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
12
// Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
13
/****************************************************************************/
14
//
15
// This file is part of SUMO.
16
// SUMO is free software: you can redistribute it and/or modify
17
// it under the terms of the GNU General Public License as published by
18
// the Free Software Foundation, either version 3 of the License, or
19
// (at your option) any later version.
20
//
21
/****************************************************************************/
22
#ifndef PositionVector_h
23
#define PositionVector_h
24
25
26
// ===========================================================================
27
// included modules
28
// ===========================================================================
29
#ifdef _MSC_VER
30
#include <
windows_config.h
>
31
#else
32
#include <
config.h
>
33
#endif
34
35
#include <vector>
36
#include "
AbstractPoly.h
"
37
38
39
// ===========================================================================
40
// class declarations
41
// ===========================================================================
42
class
Line
;
43
class
Boundary
;
44
45
46
// ===========================================================================
47
// class definitions
48
// ===========================================================================
53
class
PositionVector
:
public
AbstractPoly
,
private
std::vector<Position> {
54
55
private
:
56
typedef
std::vector<Position>
vp
;
57
58
public
:
63
PositionVector
();
64
65
69
PositionVector
(
const
std::vector<Position>& v);
70
71
73
~PositionVector
();
74
75
using
vp::iterator;
76
using
vp::const_iterator;
77
using
vp::const_reference;
78
using
vp::value_type;
79
using
vp::begin;
80
using
vp::end;
81
using
vp::push_back
;
82
using
vp::pop_back;
83
using
vp::clear;
84
using
vp::size;
85
using
vp::front;
86
using
vp::back;
87
using
vp::reference;
88
89
92
93
97
void
push_back
(
const
PositionVector
& p);
99
100
102
void
push_front
(
const
Position
& p);
103
105
Position
pop_front
();
106
107
void
insertAt
(
int
index,
const
Position
& p);
108
109
void
replaceAt
(
int
index,
const
Position
& by);
110
111
void
eraseAt
(
int
i);
112
115
bool
around
(
const
Position
& p,
SUMOReal
offset = 0)
const
;
116
119
bool
overlapsWith
(
const
AbstractPoly
& poly,
SUMOReal
offset = 0)
const
;
120
122
bool
intersects
(
const
Position
& p1,
const
Position
& p2)
const
;
123
125
bool
intersects
(
const
PositionVector
& v1)
const
;
126
128
Position
intersectsAtPoint
(
const
Position
& p1,
129
const
Position
& p2)
const
;
// !!!
130
132
PositionVector
intersectionPoints2D
(
const
Line
& line)
const
;
133
136
std::vector<SUMOReal>
intersectsAtLengths2D
(
const
PositionVector
& other)
const
;
// !!!
137
140
std::vector<SUMOReal>
intersectsAtLengths2D
(
const
Line
& line)
const
;
// !!!
141
143
Position
intersectsAtPoint
(
const
PositionVector
& v1)
const
;
// !!!
144
146
void
closePolygon
();
147
150
const
Position
&
operator[]
(
int
index)
const
;
151
Position
&
operator[]
(
int
index);
152
154
Position
positionAtOffset
(
SUMOReal
pos)
const
;
155
157
Position
positionAtOffset2D
(
SUMOReal
pos)
const
;
158
160
SUMOReal
rotationDegreeAtOffset
(
SUMOReal
pos)
const
;
161
163
SUMOReal
slopeDegreeAtOffset
(
SUMOReal
pos)
const
;
164
166
static
Position
positionAtOffset
(
const
Position
& p1,
167
const
Position
& p2,
SUMOReal
pos);
168
170
static
Position
positionAtOffset2D
(
const
Position
& p1,
171
const
Position
& p2,
SUMOReal
pos);
172
174
Boundary
getBoxBoundary
()
const
;
175
178
Position
getPolygonCenter
()
const
;
179
181
Position
getCentroid
()
const
;
182
184
void
scaleSize
(
SUMOReal
factor);
185
186
Position
getLineCenter
()
const
;
187
189
SUMOReal
length
()
const
;
190
191
193
SUMOReal
area
()
const
;
194
196
bool
partialWithin
(
const
AbstractPoly
& poly,
SUMOReal
offset = 0)
const
;
197
199
std::pair<PositionVector, PositionVector>
splitAt
(
SUMOReal
where)
const
;
200
202
friend
std::ostream&
operator<<
(std::ostream& os,
const
PositionVector
& geom);
203
204
bool
crosses
(
const
Position
& p1,
const
Position
& p2)
const
;
205
206
void
add
(
SUMOReal
xoff,
SUMOReal
yoff,
SUMOReal
zoff);
207
208
void
reshiftRotate
(
SUMOReal
xoff,
SUMOReal
yoff,
SUMOReal
rot);
209
210
PositionVector
convexHull
()
const
;
211
212
int
appendWithCrossingPoint
(
const
PositionVector
& v);
213
214
// @brief append the given vector to this one
215
void
append
(
const
PositionVector
& v);
216
217
PositionVector
getSubpart
(
SUMOReal
beginOffset,
SUMOReal
endOffset)
const
;
218
219
PositionVector
getSubpart2D
(
SUMOReal
beginOffset,
SUMOReal
endOffset)
const
;
220
221
void
sortAsPolyCWByAngle
();
222
223
void
sortByIncreasingXY
();
224
225
void
extrapolate
(
SUMOReal
val);
226
227
PositionVector
reverse
()
const
;
228
229
void
move2side
(
SUMOReal
amount);
230
231
Line
lineAt
(
size_t
pos)
const
;
232
233
Line
getBegLine
()
const
;
234
235
Line
getEndLine
()
const
;
236
237
238
// @brief inserts p between the two closest positions and returns the insertion index
239
int
insertAtClosest
(
const
Position
& p);
240
242
bool
operator==
(
const
PositionVector
& v2)
const
;
243
244
class
as_poly_cw_sorter
{
245
public
:
247
as_poly_cw_sorter
() {};
248
249
public
:
251
int
operator()
(
const
Position
& p1,
const
Position
& p2)
const
;
252
253
};
254
255
class
increasing_x_y_sorter
{
256
public
:
258
explicit
increasing_x_y_sorter
();
259
260
public
:
262
int
operator()
(
const
Position
& p1,
const
Position
& p2)
const
;
263
264
};
265
266
// !!!
267
SUMOReal
isLeft
(
const
Position
& P0,
const
Position
& P1,
const
Position
& P2)
const
;
268
269
void
pruneFromBeginAt
(
const
Position
& p);
270
void
pruneFromEndAt
(
const
Position
& p);
271
272
SUMOReal
beginEndAngle
()
const
;
273
274
SUMOReal
nearest_offset_to_point2D
(
const
Position
& p,
bool
perpendicular =
true
)
const
;
275
276
/* @brief index of the closest position to p
277
* @note: may only be called for a non-empty vector */
278
int
indexOfClosest
(
const
Position
& p)
const
;
279
280
// distances of all my points to s and all of s points to myself
281
std::vector<SUMOReal>
distances
(
const
PositionVector
& s)
const
;
282
283
SUMOReal
distance
(
const
Position
& p)
const
;
284
285
void
push_back_noDoublePos
(
const
Position
& p);
286
void
push_front_noDoublePos
(
const
Position
& p);
287
288
bool
isClosed
()
const
;
289
294
void
removeDoublePoints
(
SUMOReal
minDist =
POSITION_EPS
,
bool
assertLength =
false
);
295
296
void
removeColinearPoints
();
297
298
};
299
300
301
#endif
302
303
/****************************************************************************/
304
home
gladk
tmp
05
sumo-0.17.1~dfsg
src
utils
geom
PositionVector.h
Generated on Sun Jun 16 2013 07:08:23 for SUMO - Simulation of Urban MObility by
1.8.1.2