Avatar billede soreno Praktikant
13. november 2001 - 13:40 Der er 3 kommentarer og
1 løsning

kollsions detektion

jeg er igang med at lave noget grafisk 2d programmering, og har lidt problemer med kollisions detektion mellem 2 cirkler.

ball: en cirkel med radius 13, og centrum(x,y) er kendt
paddle: en cirkel med radius 18, og centrum kendes også.

Jeg vil teste med hvilken vinkel paddle rammer ball (for at kunne beregne ny retning til ball).

Jeg bruger i øjeblikket pytagoras til at beregne om der er kollision ved at sige at:
for(int i=0;i<360;i+=10)
{
  x = ball.getX()+(sin((i)*3.141592654/180)*13);
  y = ball.getY()+(cos((i)*3.141592654/180)*13);
  if(sqrt((paddle.getX()-x)*(paddle.getX()-x)+(paddle.getY()-y)*(paddle.getY()-y)) < 18)
    //kollision
    //vinkel = i
}

men jeg er ikke tilfreds med at teste i sådan et loop, da det favoritisere lave tal. Derfor hjælper det heller ikke at sætte \"opløsningen\" op i \"for\" sætningen.

Hvordan kan jeg gøre det smartere?

Mvh
Søren Olesen
Avatar billede henrik_ffc Nybegynder
13. november 2001 - 13:54 #1
xdiff = ball.getX - paddle.getX;
ydiff = ball.getY - paddle.getY;

if (sqrt(ydiff*ydiff + xdiff*xdiff) < (13+18)) // kollision
// afstanden mellem de to centrummer er mindre end summen af de to radiuser!
Avatar billede soreno Praktikant
13. november 2001 - 14:12 #2
det ser sgu godt ud, men hvordan finder jeg så vinklen som paddle rammer ball med?
Avatar billede henrik_ffc Nybegynder
13. november 2001 - 14:29 #3
Du kender de to punkter (centrum) i koordinatsystemet, så det er bare at bestemme hældningen.
Avatar billede soreno Praktikant
13. november 2001 - 14:33 #4
selvfølgelig, mange tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester