[Algorytmy] Wzór na odległość między punktami
[Algorytmy] Wzór na odległość między punktami
Witam,
od dłuższego już czasu borykam się z pewnym problemem a forum to zawsze było mi pomocne i do tej pory nie miałem potrzeby się rejestrować, gdyż zawsze znajdowałem to, czego szukałem. Dziś jest jednak inaczej.
Sytuacja wygląda tak, że gram sobie w pewną grę przeglądarkową i mam taki oto zgrabny wzorek na policzenie czasu jaki potrzeba by dostać się do drugiego punktu na mapie
\(\displaystyle{ T = \frac{50 \times dist}{6} + 900}\)
gdzie:
\(\displaystyle{ T}\) to czas (w sekundach)
\(\displaystyle{ dist}\) wektorowa odległość w pixelach pomiędzy dwoma punktami na mapie liczona ze wzoru:
\(\displaystyle{ dist= \sqrt{\left( x_{b} - x_{a} \right)^{2} + \left( y_{b} - y_{a} \right)^{2} }}\)
problem jest następujący:
Jeśli liczę odległość wzdłuż którejś z osi, wszystkie dane się zgadzają, czas jest zgodny z tym widocznym na stronie co do sekundy.
Jeśli odległość jest liczona po ukosie, zaczynają się schody, bo wartość \(\displaystyle{ T}\) już nijak ma się do tej oczekiwaniej.
Przykładowo:
dla współrzędnych
\(\displaystyle{ A \left( 91933, 29018\right)}\)
\(\displaystyle{ B \left( 81408, 29003 \right)}\)
\(\displaystyle{ C \left( 92969, 28436\right)}\)
\(\displaystyle{ dist_{AB} = 10525}\)
\(\displaystyle{ T_{AB}=88608}\)
i się zgadza
jednak dla AC
\(\displaystyle{ dist_{AC} = 1187}\)
\(\displaystyle{ T_{AC}=10795}\) i tu się nie zgadza, bo powinno być \(\displaystyle{ T_{AC}=10850}\) i dopiero przy \(\displaystyle{ dist_{AC} = 1194}\) wychodzi oczekiwana wartość \(\displaystyle{ T_{AC}}\)
a więc zwiększenie \(\displaystyle{ dist_{AC}}\) o 7 jednostek zwiększy \(\displaystyle{ T_{AC}}\) o 55s
co ciekawe, jeśliby znaleźć punkt D oddalony 8x dalej niż punkt C, dla którego
\(\displaystyle{ dist_{AD} = 8716}\)
to wtedy
\(\displaystyle{ T_{AD}=73533}\)
a powinno być \(\displaystyle{ T_{AD}=73525}\) i tyle wyniesie, jeśli \(\displaystyle{ dist_{AD} = 8715}\)
więc przy większej odległości zmniejszenie \(\displaystyle{ dist_{AD}}\) o 1 jednostkę zmniejszy czas o 8s.
Nie mam najmniejszego pomysłu jak do tego podejść.
Pomoże ktoś?
od dłuższego już czasu borykam się z pewnym problemem a forum to zawsze było mi pomocne i do tej pory nie miałem potrzeby się rejestrować, gdyż zawsze znajdowałem to, czego szukałem. Dziś jest jednak inaczej.
Sytuacja wygląda tak, że gram sobie w pewną grę przeglądarkową i mam taki oto zgrabny wzorek na policzenie czasu jaki potrzeba by dostać się do drugiego punktu na mapie
\(\displaystyle{ T = \frac{50 \times dist}{6} + 900}\)
gdzie:
\(\displaystyle{ T}\) to czas (w sekundach)
\(\displaystyle{ dist}\) wektorowa odległość w pixelach pomiędzy dwoma punktami na mapie liczona ze wzoru:
\(\displaystyle{ dist= \sqrt{\left( x_{b} - x_{a} \right)^{2} + \left( y_{b} - y_{a} \right)^{2} }}\)
problem jest następujący:
Jeśli liczę odległość wzdłuż którejś z osi, wszystkie dane się zgadzają, czas jest zgodny z tym widocznym na stronie co do sekundy.
Jeśli odległość jest liczona po ukosie, zaczynają się schody, bo wartość \(\displaystyle{ T}\) już nijak ma się do tej oczekiwaniej.
Przykładowo:
dla współrzędnych
\(\displaystyle{ A \left( 91933, 29018\right)}\)
\(\displaystyle{ B \left( 81408, 29003 \right)}\)
\(\displaystyle{ C \left( 92969, 28436\right)}\)
\(\displaystyle{ dist_{AB} = 10525}\)
\(\displaystyle{ T_{AB}=88608}\)
i się zgadza
jednak dla AC
\(\displaystyle{ dist_{AC} = 1187}\)
\(\displaystyle{ T_{AC}=10795}\) i tu się nie zgadza, bo powinno być \(\displaystyle{ T_{AC}=10850}\) i dopiero przy \(\displaystyle{ dist_{AC} = 1194}\) wychodzi oczekiwana wartość \(\displaystyle{ T_{AC}}\)
a więc zwiększenie \(\displaystyle{ dist_{AC}}\) o 7 jednostek zwiększy \(\displaystyle{ T_{AC}}\) o 55s
co ciekawe, jeśliby znaleźć punkt D oddalony 8x dalej niż punkt C, dla którego
\(\displaystyle{ dist_{AD} = 8716}\)
to wtedy
\(\displaystyle{ T_{AD}=73533}\)
a powinno być \(\displaystyle{ T_{AD}=73525}\) i tyle wyniesie, jeśli \(\displaystyle{ dist_{AD} = 8715}\)
więc przy większej odległości zmniejszenie \(\displaystyle{ dist_{AD}}\) o 1 jednostkę zmniejszy czas o 8s.
Nie mam najmniejszego pomysłu jak do tego podejść.
Pomoże ktoś?
Ostatnio zmieniony 28 lut 2013, o 16:59 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
-
- Użytkownik
- Posty: 145
- Rejestracja: 16 lis 2007, o 09:06
- Płeć: Mężczyzna
- Lokalizacja: Gniezno
- Podziękował: 2 razy
- Pomógł: 27 razy
[Algorytmy] Wzór na odległość między punktami
Zasadniczo jak masz podany wzór, dokładne punkty na mapie i wynik wychodzi inny to winna jest jego implementacja w grze lub jest ona inna, chyba że są pola zwiększające lub zmniejszające prędkość lub nie wliczające się do ruchu.
[Algorytmy] Wzór na odległość między punktami
dziwi mnie tylko, ze na kazdej odleglosci w linii poziomej, lub pionowej wszystko sie zgadza.
Cyrki sa tylko przy poruszaniu sie na ukos... :/
Cyrki sa tylko przy poruszaniu sie na ukos... :/
[Algorytmy] Wzór na odległość między punktami
zostal podany przez czlonka teamu na oficjalnym forum
podanego przez Ciebie wzoru tez probowalem, ale wtedy wartosc \(\displaystyle{ dist}\) wychodzi wieksza o jakies 30-40%
podanego przez Ciebie wzoru tez probowalem, ale wtedy wartosc \(\displaystyle{ dist}\) wychodzi wieksza o jakies 30-40%
-
- Użytkownik
- Posty: 311
- Rejestracja: 30 gru 2011, o 02:21
- Płeć: Mężczyzna
- Lokalizacja: Puławy
- Podziękował: 11 razy
- Pomógł: 53 razy
[Algorytmy] Wzór na odległość między punktami
Może błędy zaokrągleń. ;p
Jeżeli poruszamy się pionowo lub poziomo to oczywiście wzór redukuje się do:
\(\displaystyle{ |x_{a}-x_{b}|}\) lub \(\displaystyle{ |y_{a}-y_{b}|}\)
I w tym wypadku wszystko jest git.
Jeżeli poruszamy się pionowo lub poziomo to oczywiście wzór redukuje się do:
\(\displaystyle{ |x_{a}-x_{b}|}\) lub \(\displaystyle{ |y_{a}-y_{b}|}\)
I w tym wypadku wszystko jest git.
- Zordon
- Użytkownik
- Posty: 4977
- Rejestracja: 12 lut 2008, o 21:42
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Podziękował: 75 razy
- Pomógł: 910 razy
[Algorytmy] Wzór na odległość między punktami
Pitagoras opracował model ruchu w grze komputerowej?Ser Cubus pisze:toż to PitagorasZordon pisze:A skąd masz ten wzór?
-
- Użytkownik
- Posty: 1406
- Rejestracja: 6 maja 2012, o 22:46
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Podziękował: 107 razy
- Pomógł: 145 razy
[Algorytmy] Wzór na odległość między punktami
nie, ale ten wzór jaknajbardziej
\(\displaystyle{ dist= \sqrt{\left( x_{b} - x_{a} \right)^{2} + \left( y_{b} - y_{a}}\)
\(\displaystyle{ dist= \sqrt{\left( x_{b} - x_{a} \right)^{2} + \left( y_{b} - y_{a}}\)