Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 21. 02. 2012 19:48

ReVolt
Příspěvky: 99
Škola: UPOL
Pozice: Student
Reputace:   
Web
 

Kolize objektů - úparava

Ahoj, v Céčku jsem napsal program, který detekuje kolize rovinných objektů, chtěl bych ji upravit tak, aby byly objekty "nepropustné", zkrátka aby nemohl jeden zajet do druhého.
Detekce kolize:

Code:

int kolize_objektu(SDL_Rect A, SDL_Rect B) {
    int levaA, levaB, pravaA, pravaB;
    int horniA, horniB, dolniA, dolniB;

    levaA = A.x;
    levaB = B.x;
    pravaA = A.x + A.w;
    pravaB = B.x + B.w;
    horniA = A.y;
    horniB = B.y;
    dolniA = A.y + A.h;
    dolniB = B.y + B.w;

    if(levaA >= pravaB)
        return 0;
    if(pravaA <= levaB)
        return 0;
    if(horniA >= dolniB)
        return 0;
    if(dolniA <= horniB)
        return 0;

    return 1;
}

Neuměl by mě někdo navést jak to předělat, aby to plnilo výše popsanou funkci?

Díky


http://www.turistickyraj.cz - napsal jsem a spravuji

Offline

  • (téma jako vyřešené označil(a) ReVolt)

#2 21. 02. 2012 21:37

check_drummer
Příspěvky: 5511
Reputace:   106 
 

Re: Kolize objektů - úparava

↑ ReVolt:
Ahoj. Bohužel úloha není přesně zadána. Tvá funkce je statická a ty ji požaduješ použít v nějakém dynamickém řešení. Tedy popiš prosím co přesně má ta nová funkce dělat - kdy a jak se má chovat. Díky.


"Máte úhel beta." "No to nemám."

Offline

 

#3 22. 02. 2012 10:01

ReVolt
Příspěvky: 99
Škola: UPOL
Pozice: Student
Reputace:   
Web
 

Re: Kolize objektů - úparava

↑ check_drummer:
omlouvám se za nedostačující popis problému

používám okenní souřadnicový systém, každý objekt je struktura obsahující informace o souřadnicích y a x a výšce (h) a šířce (w) objektu, funkce, která je v prvním příspěvku detekuje kolizi libovolných dvou objektů (jejichž souřadnice nejsou stálé - pohybují se ve vymezeném prostoru), vymyslet detekci kolize nebylo těžké, ale nyní bych chtěl napsat funkci, která pro stejné objekty zajistí nepropustnost jejich stran

pokud program detekoval kolizi vypsal, že se objekty (které se pohybují - měnil jsem jejich x a y souřadnice) střetly, ale jakoby sebou navzájem propluly a pokračovaly dál v zadané dráze

v nové funkci bych chtěl aby sebou objekty nemohly proplouvat, pokud by do sebe narazily nebo pokud by narazili na statickou překážku (jiný objekt s fixními souřadnicemi) nemohly by objekty dál pokračovat ve stejné dráze

napsal jsem několik funkcí , kde jsem jako parametry předával ukazatele na struktury objektů a různě jsem nastavoval jejich souřadnice, třeba když objekt A zleva narazil na objekt B, tj. souřadnice A.x + A.w byla větší než souřadnice B.x a zároveň byla horní nebo dolní strana objektu A stále v rozsahu strany objektu B se souřadnicemi B.y a B.y + B.h (výška objektu) tak jsem udělat opatření aby nemohl objekt A pokračovat dál, třeba jsem zkusil nastavit A.x na B.x - A.w což byla taková souřadnice aby nemohl objekt A zajet do B

jen pro úplnost všechny objekty jsou obdélníky, postačí když mě navedete správným směrem

díky


http://www.turistickyraj.cz - napsal jsem a spravuji

Offline

 

#4 22. 02. 2012 20:24

check_drummer
Příspěvky: 5511
Reputace:   106 
 

Re: Kolize objektů - úparava

↑ ReVolt:
Ahoj. A nestačilo by před tím, než objekty "posuneš" otestovat, zda by se po onom posunu nedostaly do kolize a pokud ano, tak ten posun neprovést?


"Máte úhel beta." "No to nemám."

Offline

 

#5 23. 02. 2012 10:01

ReVolt
Příspěvky: 99
Škola: UPOL
Pozice: Student
Reputace:   
Web
 

Re: Kolize objektů - úparava

↑ check_drummer:
jo to mě včera taky napadlo a jakž takž to funguje, ještě to budu muset doladit, díky moc za tvůj čas


http://www.turistickyraj.cz - napsal jsem a spravuji

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson