vrecko
virtual reality framework
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
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
include
vreckoAP
CarSim
Junction.h
Generated on Tue Feb 19 2013 10:23:42 for vrecko by
1.8.3.1