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.
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?
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?
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.
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 :/