-
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
Następne wpisy z tego wątku
Najnowsze wątki z tej grupy
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
Najnowsze wątki
- 2024-07-17 Lublin => Full Stack Java Developer <=
- 2024-07-17 Lublin => Java Full Stack Developer (+Angular) <=
- 2024-07-17 Turek => IT Project Manager (experience with C#) <=
- 2024-07-17 Warszawa => Mobile React Native Developer <=
- 2024-07-05 eSIM na czym polega
- 2024-07-15 Roaming poza unią
- 2024-07-16 Jak tanio dzwonic do Wielkiej Brytani?
- 2024-07-16 Dzień bez ICE
- 2024-07-15 Spalinówki płoną doszczętnie
- 2024-07-15 Pojemność akumulatora
- 2024-07-15 Elektryk8i dalej płoną.
- 2024-07-15 Motodziennik #284 NOWY MG HS z hybrydą oraz wraca FORD CAPRI (jako SUV)
- 2024-07-14 [FILM] SAMOCHODY ELEKTRYCZNE DO WIELKIE ŚCIEMA? TYLKO FAKTY!
- 2024-07-14 Znieczulica w narodzie
- 2024-07-13 Protect Your PC with IObit Malware Fighter Pro 11.3.0.1346 Multilingual