vrecko
virtual reality framework
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
vrecko
Vrecko - the Virtual Reality Engine
Dynamic Art module
L-system plant modeler - module for Vrecko
Head Up Display module
Space Partitioning - module for Vrecko
Todo List
Deprecated List
Namespaces
Classes
Files
File List
include
base
helpers
vrecko
vreckoAP
ArtificialWorld
behindO
Boids
CableEditor
CameraMovement
CameraPath
CarSim
AP_CarSim.h
AP_Filter.h
CarControlUnit.h
CarEnvirons.h
CarExecutionUnit.h
CarPartsNodeCache.h
CarState.h
CCUStructs.h
Edge.h
Junction.h
PolygonPoint.h
Remover.h
RoadsEdges.h
RoadsState.h
TLsOnJuncManager.h
ConnectEditor
ConstrainedMovement
DynamicArt
EditorController
EditorQAbilities
FFDEditor
Filter
games
Garden
GUI
HeadTracking
HelloWorld
HUD
InputConnector
LightsEditor
Menu
Nature
navigation
ObjectUtils
ODE
RoomEdit
ShootingSimulation
SpacePartitioning
TextOutput
vreckoDP
vreckoUtils
src
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