Allegro 4.2.2 C++ - nachodzenie na siebie kul w trakcie odbicia

0

Witam,
mam pewien problem z programem dotyczącym zderzeń obiektów (tutaj kul). Zazwyczaj kule odbijają się normalnie, ale czasami widać jak przy odbiciu jakby jedna z kul nachodziła, czy też "wbiła" się w inną i po czym dopiero od niej odbiła. Tutaj rodzi się właśnie pytanie. Jak temu zapobiec? Przeforsowałem sporą część stron www (grzecznie googlując), jednakże wszystko bez skutku.

Oto fragment kodu odpowiedzialnego za detekcję zderzeń. Funkcje isMovingFoward oraz zarzadzaj_odbiciem są nie istotne (tj. działają w 100%).

 for(int x=0;x<liczba;x++){
		        for(int y=x+1;y<liczba;y++){  // y<=liczba
                
                        int xd = abs(tablica[x].x - tablica[y].x); 
                        int yd = abs(tablica[x].y - tablica[y].y);
                                           
                        float sumRadius = tablica[x].r + tablica[y].r;
                        float sqrRadius = sumRadius * sumRadius;
                          
                        float distSqr = (xd * xd) + (yd * yd);
                              
                        if(distSqr<sqrRadius){                                               
                        o++; 
                        textprintf(screen,font,10,410,makecol(255,0,0),"Liczba kolizji: %i",o); 
                        
                              if(isMovingForward(tablica[x],tablica[y])==true){                                                                          
                              zarzadzaj_odbiciem(tablica[x],tablica[y]);       
                              }//if
                        }//if
              }//for
        }//for  

Pozdrawiam

0

Nie jestem pewien, ale być może jednym z problemów są błędy wynikające z obliczeń na floatach, po prostu w niektórych momentach może się gubić dokładność reprezentacji. Ale to tylko moja teoria, bo nie wiadomo co siedzi w funkcjach odpowiedzialnych za odbicia.

0

Dziwna jest ta twoja reakcja na zdrzenie:

if(isMovingForward(tablica[x],tablica[y])==true){                                                                          
    zarzadzaj_odbiciem(tablica[x],tablica[y]);       
}

WTF! Co to właściwie robi? Co jeśli isMovingForward zwróci false?

Offtopic: fizykę najlepiej załatwić gotowym rozwiązaniem np Box2d.

0

Temat do zamknięcia. Problem rozwiązałem poprzez zmniejszenie wektorów prędkości wszystkich kulek - kulki przemieszczały się zbyt szybko przez co algorytm detekcji zderzeń po prostu nie wyrabiał i dochodziło do nachodzenia na siebie kulek.

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