NBContHelper.cpp
Go to the documentation of this file.00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifdef _MSC_VER
00025 #include <windows_config.h>
00026 #else
00027 #include <config.h>
00028 #endif
00029
00030 #include <vector>
00031 #include <map>
00032 #include <cassert>
00033 #include "NBContHelper.h"
00034 #include <utils/geom/GeomHelper.h>
00035
00036 #ifdef CHECK_MEMORY_LEAKS
00037 #include <foreign/nvwa/debug_new.h>
00038 #endif // CHECK_MEMORY_LEAKS
00039
00040
00041
00042
00043
00044
00045
00046
00047 void
00048 NBContHelper::nextCW(const EdgeVector * edges, EdgeVector::const_iterator &from) {
00049 from++;
00050 if (from==edges->end()) {
00051 from = edges->begin();
00052 }
00053 }
00054
00055
00056 void
00057 NBContHelper::nextCCW(const EdgeVector * edges, EdgeVector::const_iterator &from) {
00058 if (from==edges->begin()) {
00059 from = edges->end() - 1;
00060 } else {
00061 --from;
00062 }
00063 }
00064
00065
00066 std::ostream &
00067 NBContHelper::out(std::ostream &os, const std::vector<bool> &v) {
00068 for (std::vector<bool>::const_iterator i=v.begin(); i!=v.end(); i++) {
00069 os << *i;
00070 }
00071 return os;
00072 }
00073
00074
00075 NBEdge *
00076 NBContHelper::findConnectingEdge(const EdgeVector &edges,
00077 NBNode *from, NBNode *to) {
00078 for (EdgeVector::const_iterator i=edges.begin(); i!=edges.end(); i++) {
00079 if ((*i)->getToNode()==to && (*i)->getFromNode()==from) {
00080 return *i;
00081 }
00082 }
00083 return 0;
00084 }
00085
00086
00087
00088 SUMOReal
00089 NBContHelper::maxSpeed(const EdgeVector &ev) {
00090 assert(ev.size()>0);
00091 SUMOReal max = (*(ev.begin()))->getSpeed();
00092 for (EdgeVector::const_iterator i=ev.begin()+1; i!=ev.end(); i++) {
00093 max =
00094 max > (*i)->getSpeed()
00095 ? max : (*i)->getSpeed();
00096 }
00097 return max;
00098 }
00099
00100
00101
00102
00103
00104
00105 int
00106 NBContHelper::edge_by_junction_angle_sorter::operator()(NBEdge *e1, NBEdge *e2) const {
00107 return getConvAngle(e1) < getConvAngle(e2);
00108 }
00109
00110
00111
00112 SUMOReal
00113 NBContHelper::edge_by_junction_angle_sorter::getConvAngle(NBEdge *e) const {
00114
00115 SUMOReal angle;
00116
00117 if (e->getFromNode()==myNode) {
00118 angle = e->getNormedAngle(*myNode);
00119 angle += (SUMOReal) 180.;
00120 if (angle>=(SUMOReal) 360.) {
00121 angle -= (SUMOReal) 360.;
00122 }
00123 } else {
00124 angle = e->getNormedAngle(*myNode);
00125 }
00126 if (angle<0.1||angle>359.9) {
00127 angle = (SUMOReal) 0.;
00128 }
00129 assert(angle>=(SUMOReal)0 && angle<(SUMOReal)360);
00130 return angle;
00131 }
00132
00133
00134
00135
00136
00137
00138 NBContHelper::node_with_incoming_finder::node_with_incoming_finder(const NBEdge * const e)
00139 : myEdge(e) {}
00140
00141
00142 bool
00143 NBContHelper::node_with_incoming_finder::operator()(const NBNode * const n) const {
00144 const EdgeVector &incoming = n->getIncomingEdges();
00145 return std::find(incoming.begin(), incoming.end(), myEdge)!=incoming.end();
00146 }
00147
00148
00149
00150
00151
00152
00153 NBContHelper::node_with_outgoing_finder::node_with_outgoing_finder(const NBEdge * const e)
00154 : myEdge(e) {}
00155
00156
00157 bool
00158 NBContHelper::node_with_outgoing_finder::operator()(const NBNode * const n) const {
00159 const EdgeVector &outgoing = n->getOutgoingEdges();
00160 return std::find(outgoing.begin(), outgoing.end(), myEdge)!=outgoing.end();
00161 }
00162
00163
00164
00165
00166
00167
00168 NBContHelper::edge_with_destination_finder::edge_with_destination_finder(NBNode *dest)
00169 : myDestinationNode(dest) {}
00170
00171
00172 bool
00173 NBContHelper::edge_with_destination_finder::operator()(NBEdge *e) const {
00174 return e->getToNode()==myDestinationNode;
00175 }
00176
00177
00178 std::ostream &
00179 operator<<(std::ostream &os, const EdgeVector &ev) {
00180 for (EdgeVector::const_iterator i=ev.begin(); i!=ev.end(); i++) {
00181 if (i!=ev.begin()) {
00182 os << ", ";
00183 }
00184 os << (*i)->getID();
00185 }
00186 return os;
00187 }
00188
00189
00190
00191
00192 SUMOReal
00193 NBContHelper::getMaxSpeed(const EdgeVector &edges) {
00194 if (edges.size()==0) {
00195 return -1;
00196 }
00197 SUMOReal ret = (*(edges.begin()))->getSpeed();
00198 for (EdgeVector::const_iterator i=edges.begin()+1; i!=edges.end(); i++) {
00199 if ((*i)->getSpeed()>ret) {
00200 ret = (*i)->getSpeed();
00201 }
00202 }
00203 return ret;
00204 }
00205
00206
00207 SUMOReal
00208 NBContHelper::getMinSpeed(const EdgeVector &edges) {
00209 if (edges.size()==0) {
00210 return -1;
00211 }
00212 SUMOReal ret = (*(edges.begin()))->getSpeed();
00213 for (EdgeVector::const_iterator i=edges.begin()+1; i!=edges.end(); i++) {
00214 if ((*i)->getSpeed()<ret) {
00215 ret = (*i)->getSpeed();
00216 }
00217 }
00218 return ret;
00219 }
00220
00221
00222
00223
00224