Przesuwanie obrazka

0

Cześć, witajcie.

Jestem nowy na forum, a to mój pierwszy temat ;D.

Zwracam się do Was z prośbą o wytłumaczenie mi jak mogłoby wyglądać rozwiązanie mojego problemu, otóż:

Obrazek stoi na współrzędnych 0,0. Chcę go przesunąć po prostej do punktu x, y. Jak to zrobić?
Przeszukałem to forum i wiele innych w poszukiwaniu odpowiedzi, ale natrafiałem tylko na wytłumaczenie, gdzie znaliśmy kąt nachylenia.

Tutaj takiego kąta nie mam, czy da się go wyliczyć?

Skorzystałbym z prostych funkcji trygonometrycznych, no ale nadal nie mam kąta. Jest jakiś sposób na rozwiązanie tej zagwozdki?

0

Obrazek stoi na współrzędnych 0,0. Chcę go przesunąć po prostej do punktu x, y. Jak to zrobić?
Przeszukałem to forum i wiele innych w poszukiwaniu odpowiedzi, ale natrafiałem tylko na wytłumaczenie, gdzie znaliśmy kąt nachylenia.

Kąt nachylenia jesteś wstanie wyliczyć z tangensa.

1
kat_w_pi=atan2(y,x);
kat_w_stopniach=180*atan2(y,x)/M_PI;

Tylko po kiego ci ten kąt?

Jeżeli chcesz to zrobić płynnie w StepCount krokach to:

for(unsigned s=1;s<=StepCount;++s)
  {
   unsigned tx=(unsigned)(x*s/StepCount+0.5),ty=(unsigned)(y*s/StepCount+0.5);
   // przemieść obrazek w tx,ty
  }
0

Zrobiłem sobie na razie surowy kod, obliczyłem kąt poprzez tangensa - atan2(abs(koniecX - startX), abs(koniecY - startY)) - wyszedł, ok.

Teraz uzależniłem dodawanie/odejmowanie od pozycji początkowej wyników sinusów i cosinusów:

while (fromX != toX && fromY != toY)
	{
		if (fromX >= toX)
		{
			fromX -= cos(angle);
		}
		else
		{
			fromX += cos(angle);
		}

		if (fromY >= toY)
		{
			fromY -= sin(angle);
		}
		else
		{
			fromY += sin(angle);
		}

		al_draw_tinted_bitmap(bitmap, al_map_rgba(255, 255, 255, 255), fromX, fromY, 0);

		al_flip_display();

		al_rest(0.01); // Wait a moment
	}

Jakby co to Allegro 5.

Super się wszystko wykonuje, ale niestety to nie idzie po linii prostej. Co zrobiłem źle?

@_13th_Dragon Dzięki za pomoc, porusza się to mniej więcej tak jakbym chciał, tylko chciałbym się jeszcze dowiedzieć, jak to zrobić od dowolnego startX, startY? :)

Wystarczy sprawdzić w warunkach kierunek ruchu i od startX dodać/odjąć tX i od startY dodać/odjąć tY?

0

Nie potrzebujesz żadnych sin/cos/tan:

double dx=ToX-FromX,dy=ToY-FromY;
unsigned len=(unsigned)(sqrt(dx*dx+dy*dy)+0.5);
ALLEGRO_COLOR clr=al_map_rgba(255,255,255,255);
for(unsigned pos=1;pos<=len;++pos)
  {
   al_draw_tinted_bitmap(bitmap,clr,(unsigned)((ToX*pos+FromX*(len-pos))/len+0.5),(unsigned)((ToY*pos+FromY*(len-pos))/len+0.5),0);
   al_flip_display();
   al_rest(0.01);
  }

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