[C]Symulacja zderzeń kulek
Ostatnio zmodyfikowano 2015-01-04 19:02
Entgen Temat założony przez niniejszego użytkownika |
[C]Symulacja zderzeń kulek » 2015-01-04 14:47:23 Mam za zadanie napisać program w C symulujący ucieczkę ludzi z budynku. Ludzie mają byc przedstawieni w postaci kulek i mają się kierować w strone wyjścia na oślep mogą się przy tym ze sobą zderzyć, przez co przez chwilę pruszają się bezwładnie, ale po kilku krokach orientują się w przestrzeni i znów nadają sobie prędkość w kierunku wyjścia. Może potem dojść do następnych zderzeń.Mam dwa poważne problemy przy losowaniu współrzędnych ludzi w budynku nachodzą oni na siebie i nie mogę tego wyeliminować oraz nie działa mi zderzania się ludzi, które powinien realizować poniższy fragment kodu. Uprzejmie proszę o pomoc i z góry dziękuje. for( int j = 0; j < N; j++ ) { L = sqrt(( x[ i ] - x[ j ] ) *( x[ i ] - x[ j ] ) +( y[ i ] - y[ j ] ) *( y[ i ] - y[ j ] ) ); if( L < 2 * w ) { v1x = vx[ i ] - vx[ j ]; v1y = vy[ i ] - vy[ j ]; nx =( x[ i ] - x[ j ] ) / L; ny =( y[ i ] - y[ j ] ) / L; vnx =( v1x * nx + v1y * ny ) * nx; vny =( v1x * nx + v1y * ny ) * ny; vx[ i ] = vx[ i ] +( v1x - vnx ); vy[ i ] = vy[ i ] +( v1y - vny ); vx[ j ] = vx[ j ] + vnx; vy[ j ] = vy[ j ] + vny; } } |
|
Joda332 |
» 2015-01-04 19:02:12 Co do losowania pozycji ludzi zrób na zasadzie tabeli tzn. że jakaś postać może się wylosować w przedziale x > 0, x < 100, y > 0, y < 100 a np druga postać będzie sie losować w przedziale x > 100, x < 200, y > 100, y < 200 wtedy postacie nie będą na siebie nachodzić po wylosowaniu. Jeśli masz zmienną liczbę ludzi to możesz zrobić tak : int ludzie = 15, a = 0, osoba = 0, postac_x[ ludzie ], postac_y[ ludzie ], szer_kratki_los_x, szer_kratki_los_y,
kol_x = 5, kol_y = 3, kol_szer = 500 kol_x, kol_wys = 500 kol_y, poz_x = 0, poz_y = 0;
do { postac_x[ ludzie ] = 0, a++ } while( a != ludzie ); a = 0; do { postac_y[ ludzie ] = 0, a++ } while( a != ludzie ); a = 0;
do { postac_x[ osoba ] = losowanie_szeroko ś ci_w_przedziale( postac_x[ osoba ] > poz_x * kol_szer && postac_x[ osoba ] < poz_x + 1 * kol_szer ); postac_y[ osoba ] = losowanie_wysoko ś ci_w_przedziale( postac_y[ osoba ] > poz_y * kol_wys && postac_x[ osoba ] < poz_y + 1 * kol_wys ) if( poz_x == 4 ) poz_x = 0, poz_y++; } while( poz_x != 4 && poz_y != 4 ); poz_x = 0, poz_y = 0;
Jak się nie mylę to będzie coś takiego, próbowałem zrobić coś takiego że wystarczy podać ilość ludzi a pogram sam poda ilość kolumn i wgl. Ale działało tylko jak liczbę ludzi można było spierwiastkować tak by wynikiem była liczba całkowita. Pozdrawiam mam nadzieje że to ci pomoże, przy okazji jak i symulacja to i silnik graficzny a więc jaki jak to kiedyś do mnie admin przemówił nie mamy niestety szklanej kuli :D |
|
« 1 » |