22 #ifndef NBContHelper_h 23 #define NBContHelper_h 61 EdgeVector::const_iterator& from);
66 EdgeVector::const_iterator& from);
73 static std::ostream&
out(std::ostream& os,
const std::vector<bool>& v);
108 myRefIncoming(e->getToNode() == n) {
186 myAngle = getEdgeAngleAt(e, n);
195 return getDiff(e1) > getDiff(e2);
246 : myAngle(e->getTotalAngle()) {}
342 std::pair<double, double> mm1 = getMinMaxRelAngles(e1);
343 std::pair<double, double> mm2 = getMinMaxRelAngles(e2);
344 if (mm1.first == mm2.first && mm1.second == mm2.second) {
350 (mm1.first <= mm2.first && mm1.second <= mm2.second)
352 (mm1.first >= mm2.first && mm1.second >= mm2.second));
353 return (mm1.first >= mm2.first && mm1.second >= mm2.second);
363 for (EdgeVector::const_iterator i = ev.begin(); i != ev.end(); ++i) {
366 if (min == 360 || min > angle) {
369 if (max == 360 || max < angle) {
373 return std::pair<double, double>(
min,
max);
384 : myReferenceEdge(edge) { }
388 myReferenceEdge->isTurningDirectionAt(e);
static double getMinAngleDiff(double angle1, double angle2)
Returns the minimum distance (clockwise/counter-clockwise) between both angles.
double getEdgeAngleAt(const NBEdge *const e, const NBNode *const n) const
Returns the given edge's angle at the given node.
double getDiff(const NBEdge *const e) const
Computes the angle difference between the related and the given edge.
double myAngle
the angle to find the edge with the opposite direction
static double maxSpeed(const EdgeVector &ev)
static double getMinSpeed(const EdgeVector &edges)
NBEdge * myEdge
the edge to compute the relative angle of
static double normRelAngle(double angle1, double angle2)
ensure that reverse relAngles (>=179.999) always count as turnarounds (-180)
const NBNode *const myNode
The related node.
const NBEdge *const myEdge
friend std::ostream & operator<<(std::ostream &os, const EdgeVector &ev)
The representation of a single edge during network building.
Class to sort edges by their angle in relation to the given edge.
double getSpeed() const
Returns the speed allowed on this edge.
opposite_finder(NBEdge *edge)
constructor
static void nextCW(const EdgeVector &edges, EdgeVector::const_iterator &from)
relative_outgoing_edge_sorter(NBEdge *e)
constructor
NBNode * myDestinationNode
straightness_sorter(const NBNode *n, const NBEdge *e)
constructor
EdgeVector getConnectedEdges() const
Returns the list of outgoing edges unsorted.
edge_similar_direction_sorter(const NBEdge *const e)
constructor
double getTotalAngle() const
Returns the angle at the start of the edge.
edge_opposite_direction_sorter(const NBEdge *const e, const NBNode *const n)
Constructor.
const std::string & getID() const
Returns the id.
double getShapeEndAngle() const
Returns the angle at the end of the edge.
int operator()(NBEdge *e1, NBEdge *e2) const
comparing operation
int getPriority() const
Returns the priority of the edge.
static std::ostream & out(std::ostream &os, const std::vector< bool > &v)
int operator()(NBEdge *e1, NBEdge *e2) const
comparing operation
A point in 2D or 3D with translation and scaling methods.
NBEdge * myEdge
the edge to compute the relative angle of
int getNumLanes() const
Returns the number of lanes.
bool isTurningDirectionAt(const NBEdge *const edge) const
Returns whether the given edge is the opposite direction to this edge.
std::pair< double, double > getMinMaxRelAngles(NBEdge *e) const
int operator()(NBEdge *e1, NBEdge *e2) const
Comparing operation.
edge_by_angle_to_nodeShapeCentroid_sorter(const NBNode *n)
constructor
double myAngle
The angle of the related edge at the given node.
int operator()(NBEdge *e1, NBEdge *e2) const
comparing operator
same_connection_edge_sorter()
constructor
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
const NBEdge *const myEdge
const PositionVector & getGeometry() const
Returns the geometry of the edge.
const NBNode * myNode
the edge to compute the relative angle of
Represents a single node (junction) during network building.
double getShapeStartAngle() const
Returns the angle at the start of the edge.
static double getMaxSpeed(const EdgeVector &edges)
relative_incoming_edge_sorter(NBEdge *e)
constructor
static double angleDiff(const double angle1, const double angle2)
Returns the difference of the second angle to the first angle in radiants.
bool operator()(NBEdge *e) const
const PositionVector & getLaneShape(int i) const
Returns the shape of the nth lane.
double angleAt2D(int pos) const
get angle in certain position of position vector
static void nextCCW(const EdgeVector &edges, EdgeVector::const_iterator &from)
int operator()(NBEdge *e1, NBEdge *e2) const
comparing operation
static NBEdge * findConnectingEdge(const EdgeVector &edges, NBNode *from, NBNode *to)
NBNode * getFromNode() const
Returns the origin node of the edge.