[SFML] Ulepszenie kolizji zderzających się kółek
Ostatnio zmodyfikowano 2013-08-31 23:13
SeaMonster131 |
» 2013-08-20 11:00:52 Kąt między środkami tych okręgów/kół? Użyj funkcji atan2() . |
|
maly |
» 2013-08-20 11:30:37 bool kolizja( vec pozycjaA, float promienA, vec pozycjaB, float promienB, float & glebokosc, vec & normalna ) { float lp = dlugosc( pozycjaA, pozycjaB ); float lr = promienA + promienB; if( lp > lr ) return false; glebokosc = fabs( lp - lr ); if( glebokosc <= 0 ) return false; normalna = pozycjaA - pozycjaB; return true; }
if( kolizja( pozycjaA, promienA, pozycjaB, promienB, glebokosc, normalna ) ) { normalize( normalna ); normalna *= glebokosc; pozycjaA += normalna; vec nowyKierunek( kierunekA.x - 2 *- normalna.x, kierunekA.y - 2 *- normalna.y ); normalize( nowyKierunek ); nowyKierunek *= szybkosc; kierunekA = nowyKierunek; }
Pisane z pamięci więc mogłem się gdzieś walnąć. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-08-20 16:06:09 Rozumiem ze funkcja długość oblicza odległość miedzy punktami ?? Po co używasz funkcji fabs ?? Wielkie dzięki :) |
|
maly |
» 2013-08-20 17:09:19 Faktycznie mogłem nazwać to odleglosc a glebokosc musi mieć dodatnią wartość więc prewencyjnie użyłem fabs. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-08-20 17:46:06 A o co chodzi z tymi normalnymi ?? ( vector normalne i funkcja normalize ) |
|
pekfos |
» 2013-08-20 18:19:55 |
|
maly |
» 2013-08-20 18:57:12 normalize to funkcja ustawiająca wektor do długości 1.0.
normalize( vec & v ) { float l = dlugosc( v ); if( l ) v /= l; } |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-08-20 18:57:54 No dobra , ale vec nowyKierunek( kierunekA.x - 2 *- normalna.x, kierunekA.y - 2 *- normalna.y ); jest dla mnie nie zrozumiałe , czy 2 oznacza o ile sie ma obiekt przemiescic ?? "-2*-" mógłbyś wytłumaczyć mały :) ?? Pefkos dzięki , nie mogłem tego znaleźć :) |
|
1 2 « 3 » 4 |