eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingrasteryzacja malych kulek › Re: rasteryzacja malych kulek
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: rasteryzacja malych kulek
    Date: Tue, 16 Jul 2013 10:19:07 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 65
    Message-ID: <ks2vlu$v8l$1@node2.news.atman.pl>
    References: <e...@g...com>
    <ks2mpe$s9l$1@node1.news.atman.pl>
    <1...@g...com>
    NNTP-Posting-Host: 89-73-65-59.dynamic.chello.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node2.news.atman.pl 1373962750 32021 89.73.65.59 (16 Jul 2013 08:19:10 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Tue, 16 Jul 2013 08:19:10 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130620
    Thunderbird/17.0.7
    In-Reply-To: <1...@g...com>
    Xref: news-archive.icm.edu.pl pl.comp.programming:204041
    [ ukryj 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: