vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Junction.h
Go to the documentation of this file.
1 #ifndef JUNCTION
2 #define JUNCTION
3 
4 #include <map>
5 
6 // rika, jakym zpusobem je na krizovatce rizen provoz
7 #define CONTROL_SYSTEM_RIGHT_HAND 1
8 #define CONTROL_SYSTEM_TRAFFIC_LIGHTS 2
9 
10 namespace CarSim {
11  // struktura, ve ktere jsou ulozeny atributy pro dvojici vstupni a vystupni
12  // hrany (ale vzdy kratke nebo normalni) krizovatky, ktera je nedilci -
13  // neexistuje nejaka krizovatka na vyssi urovni, ktera by ji obsahovala
14  struct InOutEdgesAttr {
15  // - uhel otoceni vektoru stred krizovatky to vstupni hrany -> stred jeji from
16  // krizovatky do vektoru stred krizovatky from vystupi hrany -> stred jeji
17  // to krizovatky (vzdy v xz) podle osy y (od uhlu je navic odecteno vzdy 0.001,
18  // aby uhel mezi vstupni a vystupni hranou v jedne silnici nebyl 0, ale 2*PI-0.001,
19  // vysledny uhel bude vzdy v intervalu [0,2*PI))
20  float angleInXZ;
21  // - bod predelu mezi 2 HF kubikami, ktere slouzi pro modelovani prujezdu
22  // auta z vstupni hrany do vystupni
23  osg::Vec3 hfCubicsBorder;
24  // - vektor pro ten bod (je normalizovany)
25  osg::Vec3 hfCubicsBorderVec;
26  // posledni dve polozky obsahuji pouze implicitni hodnoty, jestlize
27  // uhel otoceni (dale alfa) z C(stred kriz.)->IN vstupni hrany (v xz) do C->OUT
28  // vystupni hrany (v xz) podle osy y
29  // je <= nez 120 stupnu (pak je prujezd modelovan pouze pomoci jedne
30  // HF kubiky bez predelu - z bodu IN do bodu OUT)
31 
32  // pozn.: bod predelu a prislusny vektor (a i ostatni parametry u HF kubik)
33  // maji vzdy nulovou y-souradnici (HF kubiky slouzi pouze k modelovani prujezdu
34  // auta krizovatkou v rovine xz)
35  };
36 
37  // tato struktura slouzi k ulozeni informaci o hrane, ktera je u krizovatky
38  // (vstupuje do ni, vystupuje z ni nebo je jeji soucasti)
39  struct JuncsEdge {
40  // id pristi hrany (hrany kolem hrany jsou usporadany proti
41  // smeru hodinovych rucicek)
42  unsigned int nextEdgeId;
43  // id minule hrany
44  unsigned int prevEdgeId;
45  // rika, zda je hrana zamcena (zamceno -> >0, odemceno -> =0);
46  // udava take, kolikrat byla zamcena hrana (jednim autem);
47  // to je potreba ukladat,
48  // protoze jestlize auto pojede pres cyklus kratkych hran, muze se stat, ze
49  // auto pres nejakou hranu pojede vickrat, pak je treba neodemcit hrany, ktere
50  // uz auto (v ramci velke krizovatky) prejelo, ale pres ktere auto jeste pojede
51  // (v ramci velke krizovatky); proto se pri zamceni bude
52  // inkrementovat lockCount (pri odemykani dekrementovat);
53  // hrana se odemce, kdyz po jejim odemykani je lockCount 0
54  unsigned int lockCount;
55  // uhel, ktery svira osa x s hranou (vektorem tvorenym stredy krizovatek from,
56  // to hrany, pricemz prvni je tato krizovatka (ktera vlastni atribut orderedEdges)
57  // nebo dilci krizovatka, ktera je jeji soucasti) v xz;
58  // aby se odlisily hrany, ktere jsou ve stejne silnici, bude k vstupnim hranam
59  // pripocten uhel 0.001
60  float angle;
61  // barvy, ktere sviti na semaforu na konci normalni vstupujici hrany u krizovatky (pouze pro vstupujici
62  // normalni hrany a krizovatky, ktere jsou rizeny semafory; v ostatnich pripadech
63  // obsahuje nedefinovano - 0; barvy jsou popsany v TLsOnJuncManager.h)
64  unsigned int tlColors;
65  };
66 
67 
68  struct Junction {
69  unsigned int id;
70  osg::Vec3 position;
71  // zde jsou indexy na hrany, ktere do teto krizovatky vstupuji a vystupuji;
72  // slouzi k detekci prechodu auta pres hranice hran v krizovatce a k zamykani
73  // hran; hrany jsou usporadany proti smeru hodinovych rucicek
74  // (podle pravidla prave ruky s osou (0,1,0)
75  std::map<unsigned int,JuncsEdge> orderedEdges;
76 
77  // tato mapa ma smysl pouze u nedilcich hran (viz InOutEdgesAttr);
78  // 1. klic je vstupni hrana, 2. klic vystupni hrana,
79  // zde bude pro kazdou dvojici vstupnich a vystupnich hran (ale pouze
80  // normalnich a kratkych) ulozena struktura InOutEdgesAttrMap
81 
82  // tyto atributy se vypocitaji pred vlastni simulaci -> je to rychlejsi
83  std::map<unsigned int, std::map<unsigned int,InOutEdgesAttr>> inOutEdgesAttrMap;
84 
85  // jestlize je toto nova krizovatka, ktera vznikla z nekolika dilcich,
86  // nasledujici promenna obsahuje pocet tech dilcich krizovatek,
87  // jinak bude obsahovat - 1 (vznikla z jedne krizovatky)
88  unsigned int partJuncCardinality;
89  // jestlize tato krizovatka se sloucila do vetsi,
90  // obsahuje id teto krizovatky, jinak 0
91  unsigned int complexJunc;
92 
93  // id posledniho auta, ktere ve svem poslednim snimku u krizovatky
94  // odemklo hranu;
95  // jestlize nebyla v poslednim snimku zadneho auta odemcena hrana,
96  // obsahuje 0 (neplatne id)
97  unsigned int carIdUnlockedEdge;
98 
99  // rika, jakym zpusobem je na krizovatce nebo puvodni krizovatce rizen provoz;
100  // pokud se tato krizovatka sloucila z puvodnich krizovatek, z nichz alespon na jedne
101  // je provoz rizen semafory, je take rizena semafory;
102  // pokud je provoz rizen semafory, je tato krizovatka soucasti velke krizovatky,
103  // ktera se sklada pouze z jedne male krizovatky, ktera je rizena semafory a
104  // ktera propojuje 3-4 silnice, v nichz jsou alespon 2 normalni hrany, ktere smeruji
105  // do te male (velke) krizovatky
106  unsigned int controlSystem;
107 
108  // vstupni hrana, kterou chce vjet (vjelo) do male krizovatky posledni
109  // auto, ktere si u ni zamklo nejake hrany (zvysilo pocet zamceni);
110  // (pokud se jedna o puvodni a nemalou krizovatku nebo si u krizovatky jeste
111  // zadne auto zadnou hranu nezamklo, obsahuje nedefinovano - max. hodnotu)
112  unsigned int lastCarInEdge;
113 
114  // to stejne ale pro vystupni hranu
115  unsigned int lastCarOutEdge;
116  };
117 
118 }
119 
120 #endif
121 
122