blob: ef439f4772a6ce4f23196c5b186a12fcb47a4cf4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
Beräkning av position
Det finns två fall när positionen ska beräknas. När en givare har passerats och
när en givare inte har passerats. Under första varvet görs endast det första
och från varv 2 och frammåt görs båda paralellt.
Om en ny givare har passerats, \emph{car.new_check_point == true}, ökar
programmet nuvarande segment (emph{car.segment}) med 1. emp{car.segment}, som
alltid ligger mellan 1 och 9, används som index för att välja position i en
lista (emph{car.pos_at}).
Om ingen givare har passerars och bilen har avslutat första varvet, alltså
oftast, görs lite mer avancerade beräkningar. För att beräkna positionen
använder proggrammet först en funktion \emph{get_aprox_v}. Denna utgår
ifrån förra varvets segmentstider
(\emph{car.seg_times}) och segmentslängder (\emph{car.seg_len}) och beräknar
med v = s/t medelhastigheten för nuvarnade segment, men förra varvet. Denna
antas vara ungefär samma sak som nuvarande hastiget.
Sedan beräknas den fakiska positionen, i meter från målgivaren, med funktionen
\emph{get_position}. Den använder den ungefärliga hastigheten beräknad av
emph\aprox_v och tiden sedan denna beräkning gjordes senast (en programcykel)
och beräknar med s = v * t den sträcka som bilen har äkt. Sedan adderas denna
med förra kända postionen och retuneras i \emph{car.position}.
|