eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingrasteryzacja malych kulek › Re: rasteryzacja malych kulek
  • Data: 2013-07-16 10:19:07
    Temat: Re: rasteryzacja malych kulek
    Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2013-07-16 09:42, firr pisze:
    >>
    >> *) oczywiście nie n^2, ale też nie porządna miotła,
    >> kulki sortuję po jednej współrzędnej.
    >>
    >>
    > a w jakim kontenerze i jakim algorytmem ?
    > jak pozniej wyglada petla na warunek
    > ew testu kolizji ?

    Algorytm to dużo powiedziane. Normalnie masz dwie
    zagnieżdżone pętle, sprawdzające każdy z każdym. Jeśli
    jednak kulki mam posortowane po jednej zmiennej,
    np x, to mogę sprawdzić, czy już nie odjechałem po x
    o 2r - wtedy na pewno już kolizji nie bedzie i mogę
    przerwać wewnętrzną pętlę.

    sort(kule.begin(),kule.end(),[](kulka&a,kulka&b){ret
    urn
    (a.pozycja.x<b.pozycja.x);});

    for (auto it=kule.begin();it!=kule.end();++it)
    {
    it->evolucja((clock.getElapsedTime()-t).asSeconds()*
    predkosc);

    for (auto itt=it+1; (itt!=kule.end()) && abs(itt->pozycja.x -
    it->pozycja.x)<=itt->r+it->r;++itt) //wbrew pozorom zakladamy stale r
    {
    it->kolizja(*itt);
    }
    }


    Klasa kilka ma metodę evolucja, pobierającą odstęp czasu i przesuwającą
    kulkę oraz kolizja, która wprost twierdzeniem pitagorasa sprzwdza,
    czy wystąpiła kolizja i ewentualnie podmienia prędkości.


    Miotła pewnie byłaby lepsza.

    Mięsko z kolizji:

    bool zaszla=false;
    if (dot(pozycja-druga.pozycja)<kw(r+druga.r))
    {
    zaszla=true;
    sf::Vector2< float > normalna = pozycja-druga.pozycja;
    normalna = normalna / sqrt(dot(normalna));

    float v_zbl = dot(normalna,predkosc) - dot(normalna,druga.predkosc);
    sf::Vector2f dv = normalna* v_zbl;
    if (v_zbl<0)
    {
    predkosc -= dv;
    druga.predkosc += dv;
    }
    }

    kw to kwadrat, dot to iloczyn skalarny (sam ze sobą dla
    jednego argumentu)

    pzdr
    bartekltg



Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: