49
« dnia: 09 Lutego 2017, 07:45:18 »
Zrobiłem funkcję rzutującą pozycję komórki na tor. Narazie w wersji wstępnej niezoptymalizowanej wygląda to jak:
1. Weź punkt1 toru.
2. Policz odległość od eventu.
3. Policz punkt na bezierze w odległości +0.1 od poprzedniego
3. Policz odległość od eventu
4. Jeśli mniejsza wróć do punktu 3. Jeśli koniec toru przejdź na następny.
Algorytm łopatologiczny, nieoptymalny, dający odległość w rozdzielczości obecnie ok. 10m ale eventów jest na tyle mało, że nie powinien specjalnie rzutować na wydajność a na ruch też nie. W następnej wersji zwiększę rozdzielczość sprawdzania dla znalezionej pary punktów pomiędzy którymi jest event do mniej więcej 1m.
Ponadto zmieniłem deque dla wskaźników na std::list ze względu na to, że potrafię sobie wyobrazić przypisanie wskaźników w odwrotnej kolejności i w dziwnych miejscach. Obecnie przerabiam funkcję TableUpdate. Przy okazji pytanie czy nie lepiej konwertować czas przyjazdu i odjazdu w rozkładzie na czas, nie trzymać jak obecnie. Jak do tej pory po zmianie poprzednich funkcji schodzę o mniej więcej 2 do 3 "wcięć" w kodzie. Szczególnie, że teraz rozbijam sprawdzanie pozycji osobno na tabelę tylko z torami i tylko ze wskaźnikami.
Aktualizacja wpisów w tabelce teraz polega tylko na sprawdzeniu stanów, a aktualizacja dystansu jest osobno za pomocą odległości przejechanej przez pierwszy pojazd. Czyli po bożemu. Do zrobienia jest zaktulizowanie przeliczania długości toru podczas jego inicjalizacji na propozycję @HTD co powinno polepszyć przemieszczanie taboru po torach i aktualizację tabelki, aczkolwiek obecna metoda jest wystarczająco dokładna to raczej nieoptymalna.
Co do fizyki, to z podziałem TMover to jak najbardziej. Tu się troszkę nie zrozumieliśmy. Mnie chodzi to, żeby nie powstała sytuacja w której masz taki układ:
pociąg -> pojazd -> wagon
-> wagon
-> pojazd -> wagon
-> pojazd -> wagon
-> pojazd -> wagon
-> pojazd -> wagon
-> pojazd -> wagon
-> pojazd -> wagon
-> pojazd -> wagon
i tak 40 razy. Czym to się różni w architekturze od obecnego:
Train -> DynamicObject
-> TCab
DynamiObject -> TMoverParameters
DynamiObject -> TMoverParameters
DynamiObject -> TMoverParameters
DynamiObject -> TMoverParameters
DynamiObject -> TMoverParameters
itd.