Skocz do zawartości

[java] ruch po ścieżce


wlochaty7

Polecane posty

Cześć, jak wykonać ruch po ścieżce ?

 

Mam linie , znam jej (x,y) poczatkowe i końcowe. Gdyby to była linia równa osi X lub Y to by problemu nie było, ale jest ona nachylona pod pewnym kątem. Kąt znam no ale i tak są problemy gdyż.. używałem takiego wzoru:

 

this.y-=Math.rint(predkosc*Math.cos(kat));
               this.x+=Math.rint(predkosc*Math.sin(kat));

 

I wszystko pięknie łądnie, ino nie przy każdym kącie nachylenia linii obiekt poruszał się po niej, więc stad moje pytanie, jak można inaczej zapisać metode poruszania się obiektu po ścieżce by od początku do końca poruszał się po wskazanej linii?:>

Link do komentarza
Udostępnij na innych stronach

Stwórz sobie wektor kierunku... znormalizuj go i potem możesz śmiało przesuwać o ten wektor ew. mnożyć go przez jakąś prędkość tego czegoś co ma się przesuwać i będzie śmigać pod jakimś tam kątem i wzdłuż tej prostej.

 

Edit: albo jeszcze bardziej na upartego i mniej sensownie możesz zapisać równanie tej prostej z i niego korzystać... przesunięcie o ileś X i wyliczasz z tego przesunięcie o ileś Y mając to równanie (ale to bez sensu)

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Masz Pkt. początkowy i pkt. końcowy tego odcinka ("prostej") po której ma się poruszać.

 

Najpierw musisz sobie zrobić parę metod do wektorów i jakiś objekt typu wektor:

// Najpierw jakiś objekt typu wektor (zakładamy 2d)
Vector2d = record
   x,y : Single;
 end;

//Magnitude to długość wektora
Function VectorMagnitude(const v1 : Vector2d) : Single;
begin
 result := (sqrt(v1.x * v1.x + v1.y * v1.y));
end;

//Metoda do znormalizowania wektora  (na przykład tak: )
Function VectorNormalize(const v1 : Vector2d) : Vector2d;
var
 m : Single;
begin
 m := VectorMagnitude(v1);
 if (m <= tol) then m := 1;

 result.x := v1.x / m;
 result.y := v1.y / m;

 if (abs(result.x) < tol) then result.x := 0;
 if (abs(result.y) < tol) then result.y := 0;
end;
Ś)YŃ)ŃŹ)ŃŹ)YŃ9ąĄ

Oczywiście ta linijka tak od razu nie śmignie musisz zamiast tego zrobić metody do dodawania wektorów o ile pozycję zapisujesz również w strukturze wektora

i dodatkowo dopisać metodę do mnożenia wektora przez skalar.

 

Edit: of corz kod napisany jest w Delphi a nie w javie :P

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...