Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jQuery] Obliczenie położenia punktu względem punktu A, B i długości od punktu A
Hazes
post 1.09.2016, 13:06:33
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 9.03.2016

Ostrzeżenie: (0%)
-----


Witam,

Mam dość niewygodny problem. Nie jestem aż tak dobry z matematyki żeby z tym sobie poradzić. Chodzi o to, że mam stworzoną mapę do gry. Gracz może się po niej przemieszczać. Gdy zaczyna się przemieszczać do bazy zapisują się wszystkie informacje o podróży wraz z czasem. Jeśli wejdzie na stronę ponownie - podróż jest nadal kontynuowana. Działa to na takiej zasadzie że czas który pozostał do ukończenia podróży zamieniany jest na milisekundy i daje wtedy pozostały czas animacji. Wtedy za pomocą $.animate() przesuwam gracza do pozycji końcowych X i Y. Problem w tym, że nie mogę rozgryźć równania, które względem koordynacji Ax, Ay, Bx, By, oraz długości ścieżki wyliczy gdzie teraz znajduje się gracz.

Mam już takie obliczenia: Całkowity czas podróży, czas który pozostał, czas który gracz już przebył, odcinek który gracz już przebył (w px), nawet procent który przebył. Ale nie mogę nadal wyliczyć tych końcowych koordynatów X i Y. Proszę o pomoc, bo męczę się z tym już długi czas.

Oto kod:

  1. //FUNKCJA ZNAJDUJĄCA POZYCJĘ GRACZA WZGLĘDEM PUNKTU A I B, ORAZ WZGLĘDEM CZASU KTÓRY GRACZ PRZEBYŁ
  2. function findPosition(aX, aY, bX, bY) {
  3.  
  4. var travelTime = localStorage.travel;
  5.  
  6. var startPos = gridToPos(aX, aY); //to po prostu zamienia numer grid'a na pozycję w pikselach
  7. var endPos = gridToPos(bX, bY); //to również
  8.  
  9. var timeFull = tileDistanceTo(aX, aY, bX, bY); //to wylicza czas który zajmie graczowi przejście do grida zaokrąglając do jednej dziesiętnej
  10. var timeFullSeconds = (timeFull[0]*60*60) + timeFull[1]*60; //zamienia czas z funkcji wyżej na sekundy
  11.  
  12. var timeNow = new Date().getTime();
  13. timeNowSeconds = timeNow/1000;
  14.  
  15. var secondsDifference = travelTime - timeNowSeconds; //różnica między czasem teraz a czasem przyszłym - w którym gracz dotrze na miejsce
  16.  
  17. var timeTraveled = timeFullSeconds - secondsDifference; //czas który przebył już gracz
  18.  
  19. var timeStart = timeNow - timeTraveled; //czas w którym gracz rozpoczął podróż (unix)
  20.  
  21. var pathLength = pixelDistanceTo(startPos[0], startPos[1], endPos[0], endPos[1]); //znajduje długość ścieżki od punktu A do punktu B, zwraca długość ścieżki w px
  22.  
  23. var pathTraveled = (timeTraveled * pathLength) / timeFullSeconds; //cała droga którą przebył od początku gracz (w px)
  24.  
  25. var percent = (pathTraveled / pathLength) * 100; //procent przebytej drogi
  26.  
  27. var startX = startPos[0];
  28. var startY = startPos[1];
  29. var endX = endPos[0];
  30. var endY = endPos[1];
  31.  
  32. var A = [startX, startY];
  33. var B = [endX, endY];
  34. var r = pathTraveled;
  35.  
  36. var a = A[1] - B[1];
  37. a = a / A[0] - B[0];
  38. var b = A[1] - (a * A[0]);
  39.  
  40. alert(a+" "+b);
  41.  
  42. var Dx = r*Math.sqrt(Math.pow(a, 2) + Math.pow(1, 2))+2*b; //to powinno wyliczyć moją pozycję X.
  43. Dx = Dx / 2*a; //a to pozycję Y.
  44. var Dy = a*Dx+b;
  45.  
  46.  
  47.  
  48. window.player.css({
  49. left: Dx+"px",
  50. top: Dy+"px"
  51. });
  52. }


Niestety funkcja nie działa, numery wychodzą ujemne albo ekstremalnie duże. Proszę o pomoc.

Pozdrawiam,
Hazes.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:48