Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C]Symulacja zderzeń kulek

Ostatnio zmodyfikowano 2015-01-04 19:02
Autor Wiadomość
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.
C/C++
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;
    }
}
P-124074
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 :
C/C++
int ludzie = 15, /// liczba ludzi w pomieszczeniu
a = 0,
osoba = 0,
postac_x[ ludzie ],
postac_y[ ludzie ],
szer_kratki_los_x, ///szerokość przedziału do losowania pozycji postaci
szer_kratki_los_y, ///wysokość przedziału do losowania pozycji postaci
/// Zakładając, że pokój ma wymiary 500x500
/// Jak jest wiesz że ma być 15 to napisz deklaracje, że ma być 3x5 pól
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
P-124117
« 1 »
  Strona 1 z 1