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
Edge.h
Go to the documentation of this file.
1
#ifndef EDGE
2
#define EDGE
3
// kazda hrana ma komplementarni hranu (pouze s prohozenymi krizovatkami
4
// fromJunction, toJunction); jestlize ma hrana numLanes 0, je nesjizdna
5
// (auta na ni nemuze jet z bodu Out do In)
6
7
// hrany jsou vetsinou normalni, vyjimky tvori nasledujici pripady
8
#define NORMAL_EDGE 1
9
// ultrakratka (nebo take velmi kratka) hrana - ma nejaky pruh a splnuje nejmene
10
// 1 z podminek:
11
// 1. vzdalenost mezi from a to hrany je <= nez 1.5*prumerna delka auta
12
// 2. bod OUT vychazi az za bod IN (bod In vychazi blize krizovatce fromJunction
13
// nez bod Out)
14
// 3. pro komplementarni hranu plati predchozi podminka
15
#define ULTRA_SHORT_EDGE 2
16
// ultrakratka hrana bez pruhu
17
#define ULTRA_SHORT_EDGE_WITHOUT_ANY_LANE 3
18
// kratka hrana – hrana se povazuje za kratkou, pokud neni velmi kratka, ma
19
// nejmene jeden pruh a splnuje alespon jedno z tvrzeni:
20
// a) teoreticky existuje auto (s maximalni moznou delkou, ktere by u bodu Out
21
// vyjelo maximalni moznou rychlosti prujezdu krizovatkou), ktere na ni nemuze
22
// zastavit, aniz by ohrozilo provoz na krizovatce pred nim nebo za nim;
23
// jinymi slovy vzdalenost mezi OUT a IN <= 3*prumerna delka auta + 0.4 (rezerva)
24
// (mezi autem, ktere stoji na normalni hrane a bodem IN
25
// ci bodem OUT by mela byt vzdy vzdalenost aspon 0.5 * prumerna delka auta)
26
// b) hrana ma komplementarni kratkou hranu
27
#define SHORT_EDGE 4
28
// normalni nebo kratka hrana bez pruhu
29
#define NORMAL_OR_SHORT_EDGE_WITHOUT_ANY_LANE 5
30
// program ACG vynechava silnice na kraji mesta pri vytvareni jejich XML reprezentace;
31
// kolem stredu nekterych krizovatek tak vznikaji prazdna mista, ktera jsou zaplnena
32
// specialnimi hranami - terminatory
33
#define TERMINATOR_EDGE 6
34
35
// defaultni hodnota pro tlGreenInterv
36
#define TL_GREEN_INTERV_DEFAULT 6
37
38
#include <queue>
39
40
namespace
CarSim {
41
// u normalni hrany budou uchovany nektere informace o autu,
42
// jestlize na ni bude mezi body OUT a IN:
43
struct
EdgesCar
{
44
// offset predni casti auta (predniho narazniku) na hrane
45
float
headOffset
;
46
// offset zadni casti auta (zadniho narazniku) na hrane
47
float
rearOffset
;
48
// id dalsiho auta (0 - neplatne id - za autem se
49
// zadne dalsi auto nevyskytuje)
50
unsigned
int
frontCarId
;
51
// id predchoziho auta (0 - neplatne id - pred autem se
52
// zadne predchozu auto nevyskytuje)
53
unsigned
int
backCarId
;
54
// rychlost tohoto auta
55
float
vel
;
56
};
57
58
// informace o hrane
59
struct
Edge
{
60
// id silnice (Road z XML souboru), ke ktere tato hrana patri
61
unsigned
int
roadId
;
62
// smer hrany v ramci silnice (Road v XML souboru),
63
// true urcuje normalni smer dopredu (pravou stranu silnice),
64
// false znaci opacny smer v silnici (levou stranu silnice)
65
bool
direction
;
66
// id zakladni krizovatky (puvodni krizovatka z XML souboru),
67
// ze ktere hrana vychazi
68
unsigned
int
from
;
69
// id zakladni krizovatky, do ktere hrana vstupuje
70
unsigned
int
to
;
71
// id krajniho bodu (PolygonPoint), ktery urcuje tvar
72
// hrany, tento bod je u krizovatky from
73
unsigned
int
fromPointRight
;
74
// to stejne, akorat tento bod je u krizovatky to
75
unsigned
int
toPointRight
;
76
// pocet pruhu na hrane (v silnici v jednom smeru)
77
unsigned
int
numLanes
;
78
// delka hrany
79
float
length
;
80
// IN je bod, kde auto vstupuje do krizovatky a kde auto zacne zatacet
81
// (pouze pro kratke a normalni hrany, u ostatnich hran je [0,0,0])
82
osg::Vec3
inPos
;
83
// bod, ve kterem auto prestane zatacet (kde auto vyjizdi ze krizovtky)
84
// (pouze pro kratke a normalni hrany, u ostatnich hran je [0,0,0])
85
osg::Vec3
outPos
;
86
// vektor z bodu OUT do bodu IN, jedna se o smer, jakym v idealnim pripade
87
// pojede hranou auto;
88
// (pouze pro kratke a normalni hrany, u ostatnich hran je [0,0,0])
89
osg::Vec3
outInVec
;
90
// normala teto hrany (uz je znormalizovana)
91
osg::Vec3
normal
;
92
// offset (ne v procentech, ale in (0,1)), ktery urcuje bod mezi body Out a In, kde auto
93
// zastavi svym prednim naraznikem, jestlize se rozhodne zastavit pred dalsi krizovatkou;
94
// ten bod se nachazi 0.5*(prumerna delka auta) pred bodem IN hrany;
95
// mezi posledni stojicim autem na hrane a bodem IN se nechava prostor dlouhy
96
// 0.5*(prumerna delka auta), aby auto neohrozilo provoz u nasledujici kriz.
97
// (pouze pro normalni hrany, u ostatnich hran je 0)
98
float
stopBeforeJuncOffset
;
99
// offset (ne v procentech, ale in (0,1)), ktery urcuje bod mezi body OUT a IN, ktery
100
// kdyz auto prejede svym prednim naraznikem, rozhodne se, jestli projede dalsi
101
// krizovatkou hned nebo bude brzdit k bodu stopBeforeJunc (aby dalo nejakemu autu prednost);
102
// tato pozice se nachazi 2.0*(prumerna delka auta) pred bodem IN hrany;
103
// (pouze pro normalni hrany, u ostatnich hran je 0)
104
float
stopOrGoDecisionOffset
;
105
// typ hrany - hodnoty viz vyse
106
unsigned
int
type
;
107
// sirka hrany u bodu toPointRight;
108
// (pouze pro kratke a normalni hrany, u ostatnich hran je 0)
109
float
widthTPR
;
110
// sirka hrany u bodu fromPointRight;
111
// (pouze pro kratke a normalni hrany, u ostatnich hran je 0)
112
float
widthFPR
;
113
// offset, ktery urcuje bod, za kterym (smerem k bodu IN) se musi nachazet zadni cast
114
// auta na startu a v cili; ten bod je vzdalen 0.5*prumerna delka auta
115
// od bodu OUT a ocita se za timto bodem (smerem k IN);
116
// (ma smysl pouze pro normalni hrany - auto musi zacinat a koncit na normalni hrane)
117
float
lowBoundForStartStopPosOffset
;
118
// jestlize hrana je normalni, jsou zde pro kazde auto (klic - id auta) na teto hrane
119
// mezi OUT a IN ulozeny informace ve strukture EdgesCar
120
std::map<unsigned int,EdgesCar>
edgesCars
;
121
// id 1. auta na hrane mezi body OUT a IN;
122
// (0 - neplatne id - na hrane jeste zadne auto neni);
123
// (opet pouze pro normalni hrany)
124
unsigned
int
fstCarId
;
125
// id posledniho auta na hrane mezi body OUT a IN;
126
// (0 - neplatne id - na hrane jeste zadne auto neni);
127
// (opet pouze pro normalni hrany)
128
unsigned
int
lastCarId
;
129
130
// ma vyznam pouze u kratke hrany - jsou tam id aut, ktera pres ni pojedou
131
// (z Out do In) ve sve pristi velke krizovatce, jsou posledni na normalni hrane
132
// a jsou blizko dalsi krizovatky (tak, ze ostatni auta, ktera pojedou
133
// pres cast te kratke hrany za bodem In, zvazuji, zda jim daji prednost);
134
// mapovana hodnota obsahuje true, jestlize auto na normalni hrane stoji
135
std::map<unsigned int,bool>
incomingCars
;
136
137
// u normalnich hran zde je fronta s id odsunutych/odskocenych aut
138
// (byla docasne odsunuta, protoze branila prujezdu ostatnich aut
139
// - stala pred bodem stopBeforeJunc hrany prilis dlouho);
140
// prvni auto (vpredu fronty) bylo nejdrive odsunuto, posledni auto zase nejpozdeji
141
// ze vsech aktualne odsunutych aut na hrane
142
std::queue<unsigned int>
putAsideCars
;
143
144
// pocet sekund, po ktere ma na semaforu u puvodni krizovatky to pro tuto hranu svitit
145
// zelena (pokud puvodni krizovatka to ani ji nadrazena mala krizovatka (pokud se sloucila
146
// do vetsi krizovatky) nejsou rizeny pomoci semaforu, nebude tato hodnota pouzita; tato hodnota
147
// se nacita z XML konfiguracniho souboru, pokud v nem neni uvedena, pouzije se defaultni hodnota
148
// - viz nahore)
149
unsigned
int
tlGreenInterv
;
150
};
151
}
152
153
#endif
154
155
include
vreckoAP
CarSim
Edge.h
Generated on Tue Feb 19 2013 10:23:42 for vrecko by
1.8.3.1