XNA Vector2 obliczenie kierunku wektora

0

Witam, prosze o rade, robie prosta gre sobie na xna w ktorej jest punkt A, z tego punktu A do punktu dotyku na ekranie D rysuje linie i chodzi mi o to zeby ograniczyc promien w ktorym linia bedzie rysowana w pewnym promieniu od punktu A. Teraz nie bardzo wlasnie wiem jak obliczyc punkt na linii AD ktory bedzie w promieniu R od puntu A. Dzieki za pomoc.

0

Rozumiem, że w 2D?

No to tak:
a) liczysz sobie wektor AD, czyli (Dx-Ax, Dy-Ay) i go normalizujesz (kierunek zostaje ten sam, długość skrócona do 1).
b) mnożysz otrzymany wektor przez R - masz wektor o tym samym kierunku i długości R.
c) liczysz sobie punkt końcowy (masz wektor i jego punkt początkowy - możesz sobie go prosto policzyć).

Proste?

1

Bardziej tego nie mogłeś skomplikować... Ja szczerze mówiąc tylko się dymyślam o co chodzi... O wyliczenie wektora równoległego do podanego ale o określonej długości?

Copy&Paste z mojej klasy wektora - jeśli potrzebujesz możesz to łatwo zmienić na metode:

public float Length
{
    get { return (float)Math.Sqrt(X * X + Y * Y); }
    set
    {
        float scale = value / Length;
        this.X *= scale;
        this.Y *= scale;
    }
}

PS. W tym XNA nie ma do tego gotowej metody?

0
mnbvcX napisał(a)

Rozumiem, że w 2D?

No to tak:
a) liczysz sobie wektor AD, czyli (Dx-Ax, Dy-Ay) i go normalizujesz (kierunek zostaje ten sam, długość skrócona do 1).
b) mnożysz otrzymany wektor przez R - masz wektor o tym samym kierunku i długości R.
c) liczysz sobie punkt końcowy (masz wektor i jego punkt początkowy - możesz sobie go prosto policzyć).

Proste?

Dzieki wielkie o to mi chodzilo.

0
MSM napisał(a)

Bardziej tego nie mogłeś skomplikować... Ja szczerze mówiąc tylko się dymyślam o co chodzi... O wyliczenie wektora równoległego do podanego ale o określonej długości?

Copy&Paste z mojej klasy wektora - jeśli potrzebujesz możesz to łatwo zmienić na metode:

public float Length
{
    get { return (float)Math.Sqrt(X * X + Y * Y); }
    set
    {
        float scale = value / Length;
        this.X *= scale;
        this.Y *= scale;
    }
}

PS. W tym XNA nie ma do tego gotowej metody?

Jest chyba Vector2.Clamp ale nie wiem jak go uzywac bo nie ma opisu do niego :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1