Symulator EU07 (i nie tylko) > Na warsztacie
Super szybki algorytm na długości krzywych Beziera
ShaXbee:
Pierwszy wzor znam na pamiec ;-) Moze rzeczywiscie daloby sie automatycznie skonwertowac wiekszosc, ale wsparcie musi zostac dla flexow.
firleju:
Jak dużo obliczeń nam zajmie konwersja tam i z powrotem? Jest sens to robić? Łatwiej przerobić krzywą 1-st na beziera czy z powrotem?
No i drugie pytanie czy można zrobić tak, żeby dany typ krzywej był okreslany parametrem enum i był brany odpowiedni typ obliczeń do przemieszczania.
HTD:
Równie łatwo w obie strony. Chyba, że masz na myśli ilość taktów CPU, to nie sprawdzałem, ale miałoby to znaczenie tylko w przypadku przeliczania w czasie rzeczywistym. Ale i tu jeśli chcesz zastąpić algorytm iteracyjny całkowym to dostaniesz kod o rząd wielkości szybszy, więc nie ma się co zastanawiać, jeśli aproksymujesz długość powiedzmy z 10 czy 100 odcinków, to po prostu można z miejsca zastąpić konwersją do 1 stopnia i policzeniem całki z podanego wzoru. Jeśli oczywiście potrzebujesz długości w czasie rzeczywistym. Użycie CPU spadnie, na słabszych maszynach powinien nawet podskoczyć FPS ;)
Krzywa 2-go stopnia ma sens tylko jeśli ktoś w scenerii umieścił bardzo nietypowo krzywy tor, wygięty w kierunku jednego z końców, nierównomiernie. To można sprawdzić kiedyś skanując wszystkie pliki torów i licząc odchylenie pomiędzy długością 2 stopnia a 1 stopnia. Z drugiej strony - biorąc pod uwagę promienie łuków i długości odcinków torów - wizualna różnica powinna być niezauważalna. Różnica w długości też groszowa. Różnica w szybkości obliczania długości za to znacząca.
Dodatkowo, zapisanie w pliku 1 toru wymaga jednego parametru mniej. Pliki mogą się skrócić. Można je skrócić jeszcze bardziej poprzez zaokrąglenie wartości do cyfr rzeczywiście znaczących, część miejsc dziesiętnych w parametrach to zwykły "szum bitowy".
Nawigacja
Idź do wersji pełnej