SUMO - Simulation of Urban MObility
GeomHelper.h
Go to the documentation of this file.
1 /****************************************************************************/
10 // Some static methods performing geometrical operations
11 /****************************************************************************/
12 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
13 // Copyright (C) 2001-2015 DLR (http://www.dlr.de/) and contributors
14 /****************************************************************************/
15 //
16 // This file is part of SUMO.
17 // SUMO is free software: you can redistribute it and/or modify
18 // it under the terms of the GNU General Public License as published by
19 // the Free Software Foundation, either version 3 of the License, or
20 // (at your option) any later version.
21 //
22 /****************************************************************************/
23 #ifndef GeomHelper_h
24 #define GeomHelper_h
25 
26 
27 // ===========================================================================
28 // included modules
29 // ===========================================================================
30 #ifdef _MSC_VER
31 #include <windows_config.h>
32 #else
33 #include <config.h>
34 #endif
35 
36 #include <cmath>
37 #include "Position.h"
38 #include "PositionVector.h"
40 
41 #ifndef M_PI
42 #define M_PI 3.1415926535897932384626433832795
43 #endif
44 
45 #define DEG2RAD(x) static_cast<SUMOReal>((x) * M_PI / 180.)
46 #define RAD2DEG(x) static_cast<SUMOReal>((x) * 180. / M_PI)
47 
48 
49 // ===========================================================================
50 // class definitions
51 // ===========================================================================
55 class GeomHelper {
56 
57 public:
59  static const SUMOReal INVALID_OFFSET;
60 
68  static bool intersects(const Position& p11, const Position& p12,
69  const Position& p21, const Position& p22);
70 
71 
78  static bool pointOnLine(const Position& p, const Position& from, const Position& to);
79 
80 
90  static void FindLineCircleIntersections(const Position& c, SUMOReal radius, const Position& p1, const Position& p2,
91  std::vector<SUMOReal>& into);
92 
93 
99  const Position& p11, const Position& p12,
100  const Position& p21, const Position& p22);
101 
102  static SUMOReal Angle2D(SUMOReal x1, SUMOReal y1, SUMOReal x2, SUMOReal y2);
103 
104  static Position interpolate(const Position& p1,
105  const Position& p2, SUMOReal length);
106 
107  static Position extrapolate_first(const Position& p1,
108  const Position& p2, SUMOReal length);
109 
110  static Position extrapolate_second(const Position& p1,
111  const Position& p2, SUMOReal length);
112 
114  const Position& l1, const Position& l2,
115  const Position& p, bool perpendicular = true);
116 
118  static SUMOReal distancePointLine(const Position& point,
119  const Position& lineStart, const Position& lineEnd);
120 
125  static SUMOReal closestDistancePointLine2D(const Position& point,
126  const Position& lineStart, const Position& lineEnd,
127  Position& outIntersection);
128 
130  const Position& lineBeg, const Position& lineEnd,
131  SUMOReal amount);
132 
133 
134  static Position crossPoint(const Boundary& b,
135  const PositionVector& v);
136 
137  static std::pair<SUMOReal, SUMOReal> getNormal90D_CW(const Position& beg,
138  const Position& end, SUMOReal length, SUMOReal wanted_offset);
139 
140  static std::pair<SUMOReal, SUMOReal> getNormal90D_CW(const Position& beg,
141  const Position& end, SUMOReal wanted_offset);
142 
148  static SUMOReal getCCWAngleDiff(SUMOReal angle1, SUMOReal angle2);
149 
150 
156  static SUMOReal getCWAngleDiff(SUMOReal angle1, SUMOReal angle2);
157 
158 
164  static SUMOReal getMinAngleDiff(SUMOReal angle1, SUMOReal angle2);
165 
166 
172  static SUMOReal getMaxAngleDiff(SUMOReal angle1, SUMOReal angle2);
173 
174 
175 private:
179  static bool intersects(
180  const SUMOReal x1, const SUMOReal y1, const SUMOReal x2, const SUMOReal y2,
181  const SUMOReal x3, const SUMOReal y3, const SUMOReal x4, const SUMOReal y4,
182  SUMOReal* x, SUMOReal* y, SUMOReal* mu);
183 
184 };
185 
186 
187 #endif
188 
189 /****************************************************************************/
static std::pair< SUMOReal, SUMOReal > getNormal90D_CW(const Position &beg, const Position &end, SUMOReal length, SUMOReal wanted_offset)
Definition: GeomHelper.cpp:373
static SUMOReal Angle2D(SUMOReal x1, SUMOReal y1, SUMOReal x2, SUMOReal y2)
Definition: GeomHelper.cpp:224
static SUMOReal getCWAngleDiff(SUMOReal angle1, SUMOReal angle2)
Returns the distance of second angle from first angle clockwise.
Definition: GeomHelper.cpp:395
static SUMOReal getCCWAngleDiff(SUMOReal angle1, SUMOReal angle2)
Returns the distance of second angle from first angle counter-clockwise.
Definition: GeomHelper.cpp:385
static Position intersection_position2D(const Position &p11, const Position &p12, const Position &p21, const Position &p22)
returns the intersection point of the (infinite) lines p11,p12 and p21,p22. If the given lines are pa...
Definition: GeomHelper.cpp:203
static Position interpolate(const Position &p1, const Position &p2, SUMOReal length)
Definition: GeomHelper.cpp:237
static Position extrapolate_second(const Position &p1, const Position &p2, SUMOReal length)
Definition: GeomHelper.cpp:253
static Position extrapolate_first(const Position &p1, const Position &p2, SUMOReal length)
Definition: GeomHelper.cpp:245
static void FindLineCircleIntersections(const Position &c, SUMOReal radius, const Position &p1, const Position &p2, std::vector< SUMOReal > &into)
Returns the positions the given circle is crossed by the given line.
Definition: GeomHelper.cpp:163
static Position crossPoint(const Boundary &b, const PositionVector &v)
Definition: GeomHelper.cpp:340
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:48
static SUMOReal nearest_offset_on_line_to_point2D(const Position &l1, const Position &l2, const Position &p, bool perpendicular=true)
Definition: GeomHelper.cpp:261
static bool intersects(const Position &p11, const Position &p12, const Position &p21, const Position &p22)
return whether given lines intersect
Definition: GeomHelper.cpp:145
Some static methods performing geometrical operations.
Definition: GeomHelper.h:55
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
static Position transfer_to_side(Position &p, const Position &lineBeg, const Position &lineEnd, SUMOReal amount)
Definition: GeomHelper.cpp:324
A list of positions.
static SUMOReal distancePointLine(const Position &point, const Position &lineStart, const Position &lineEnd)
Definition: GeomHelper.cpp:288
static SUMOReal closestDistancePointLine2D(const Position &point, const Position &lineStart, const Position &lineEnd, Position &outIntersection)
Definition: GeomHelper.cpp:312
static SUMOReal getMinAngleDiff(SUMOReal angle1, SUMOReal angle2)
Returns the minimum distance (clockwise/counter-clockwise) between both angles.
Definition: GeomHelper.cpp:405
static SUMOReal getMaxAngleDiff(SUMOReal angle1, SUMOReal angle2)
Returns the maximum distance (clockwise/counter-clockwise) between both angles.
Definition: GeomHelper.cpp:411
#define SUMOReal
Definition: config.h:218
static bool pointOnLine(const Position &p, const Position &from, const Position &to)
Returns whether the given point lies on the given line.
Definition: GeomHelper.cpp:153
static const SUMOReal INVALID_OFFSET
a value to signify offsets outside the range of [0, Line.length()]
Definition: GeomHelper.h:59