[Algorytmy] Wzór na odległość między punktami

G4rcU
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 27 lut 2013, o 01:04
Płeć: Mężczyzna
Lokalizacja: A'dam

[Algorytmy] Wzór na odległość między punktami

Post autor: G4rcU »

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ś?
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.
witekkq
Użytkownik
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

Post autor: witekkq »

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.
G4rcU
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 27 lut 2013, o 01:04
Płeć: Mężczyzna
Lokalizacja: A'dam

[Algorytmy] Wzór na odległość między punktami

Post autor: G4rcU »

dziwi mnie tylko, ze na kazdej odleglosci w linii poziomej, lub pionowej wszystko sie zgadza.
Cyrki sa tylko przy poruszaniu sie na ukos... :/
Awatar użytkownika
Zordon
Użytkownik
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

Post autor: Zordon »

A skąd masz ten wzór?
Spróbuj takiej odległości: \(\displaystyle{ dist= | x_{b} - x_{a}|+|y_{b} - y_{a}|}\)
G4rcU
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 27 lut 2013, o 01:04
Płeć: Mężczyzna
Lokalizacja: A'dam

[Algorytmy] Wzór na odległość między punktami

Post autor: G4rcU »

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%
gryxon
Użytkownik
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

Post autor: gryxon »

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.
Rjiuk
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 6 sty 2012, o 13:50
Płeć: Mężczyzna
Lokalizacja: Mszczonów
Podziękował: 1 raz
Pomógł: 1 raz

[Algorytmy] Wzór na odległość między punktami

Post autor: Rjiuk »


Zobacz , która metryka pasuje ew. uważaj na zaokrąglenia
Ser Cubus
Użytkownik
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

Post autor: Ser Cubus »

Zordon pisze:A skąd masz ten wzór?
toż to Pitagoras
Awatar użytkownika
Zordon
Użytkownik
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

Post autor: Zordon »

Ser Cubus pisze:
Zordon pisze:A skąd masz ten wzór?
toż to Pitagoras
Pitagoras opracował model ruchu w grze komputerowej?
Ser Cubus
Użytkownik
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

Post autor: Ser Cubus »

nie, ale ten wzór jaknajbardziej
\(\displaystyle{ dist= \sqrt{\left( x_{b} - x_{a} \right)^{2} + \left( y_{b} - y_{a}}\)
ODPOWIEDZ