Cześć :)
Chciałbym okodowac dwie kulki ,ktore maja nasladowac bile znane nam z gry bilard Bile maja miec losowa predkosc i odbijac sie miedzy soba .Taka krotka symulacja.
Robie to w C++ CLR w Visula studio . Wczytuje Picturebox dla dwoch bili. Nastepnie animacje tworze wykorzystujac funkcjie z timerem. Dodajac z kazdym wykonaniem funkcji przesuniecie o kilka pikseli np:
pilka->Top +=5;
pilka->Left +=5;
kolizja z krawędzią stolu dziala dobrze ,zmieniam po prostu znak dla osi X na przeciwny czyli zamiast dodawać np 5 dodaje -5;
nastepnie licze odleglosc miedzy srodkami obu kul ,stosujac pitagorasa :)
distance = sqrt( ((pilka->Left + (pilka->Width / 2)) - (pilka2->Left + (pilka2->Width / 2))) * ((pilka->Left + (pilka->Width / 2)) - (pilka2->Left + (pilka2->Width / 2)))+ ( (pilka->Top + (pilka->Height / 2)) - (pilka2->Top + (pilka2->Height / 2))) * ((pilka->Top + (pilka->Width / 2)) - (pilka2->Top + (pilka2->Width / 2) )));
wykrycie kolizji miedzy bilami:
if ((distance < (pilka->Width / 2)+5 ) &&(z))
{
z=false;
}
else if(distance > pilka->Width / 2+5)
{
z=true;//potrzebna jest zmienna bool aby warnek zostal wykonany raz w momencie gdy pilki spelniaja warunek
}
no i teraz mam problem musze okodowac realistyczne odbijanie sie bili miedzy soba nie jest to tak latwe jak w przypadku odbic od krawedzi stolu :)
Pytanie mam w jaki sposob opisac wektor predkosci danej kulki ?
Mamy przemieszczenie bili w osi x czyli np pilka->Left +=5; ,mozemy tez zmierzyc czas w jakim te przemisczenie nastepuje , czyli za pomoca zegara systemowego ten czas wyznaczyc , dzielac przepieszczenie przez czas mamy predkosc na osi X czyli Vx ,analogicznie dla osi Y ,
Otrzymamy wektor predkosci V=(Vx )i+(Vy)j ,majac cos takiego jestem wstanie wtedy realnie to okodowac :) tylko jak ten wektor potem zapisac w c++ i wzglednic go w ruchu bili :)?