eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingpetla kolizji -> spacjala kolizyjnaRe: petla kolizji -> spacjala kolizyjna
  • Data: 2011-12-08 21:27:00
    Temat: Re: petla kolizji -> spacjala kolizyjna
    Od: " " <f...@N...gazeta.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    > > jakies uwagi ntt?
    >
    > nie ca=B3kiem rozumiem Tw=F3j pomys=B3, ale chyba mi si=EA nie podoba.
    >
    > m=F3j ca=B3kiem nieoptymalny kod analityczny (100 kulek, i czasem nie wy=
    > rabia) =
    >
    > wygl=B1da=B3 jako=B6 tak:
    > //szkic w notacji C#
    > delegate void Cont();
    > Pair<float,Cont>? findCollision(Ball a,Ball b);
    > //je=B6li kulki si=EA nie zderzaj=B1, to null,
    > //zwraca par=EA -- moment tego zderzenia, i procedur=EA modyfikuj=B1ca s=
    > tan =
    >
    > bior=B1cych udzia=B3 w zderzeniu kulek, je=B6li to zderzenie zajdzie
    > //je=B6li mamy kulki a,b i c, to findCollision wo=B3amy dla (a,b), (a,c)=
    > i =
    >
    > (b,c), mo=BFemy dosta=E6 od 0 do 3 procedur, ale wykonujemy najwy=BFej j=
    > edn=B1 -- =
    >
    > dla pierwszego zderzenia,
    > //albowiem potem kulki lec=B1 inna trasa, i pozosta=B3e zderzenia s=B1 n=
    > iewa=BFne =
    >
    > (bo zak=B3adaj=B1, =BFe kulki lec=B1 po niezmodyfikowanej trasie)
    > Pair<float,Cont>? zapCol=3Dnull;//najblizsza kolizja do wykonania,
    >
    > w funkcji Update robilem cos takiego
    >
    > T=3Dnow();
    > while(zapCol=3D=3Dnull || zapCol.t<=3DT){
    > if(zapCol!=3Dnull){
    > zapCol.proc();
    > }
    > zapCol=3Dnull;//
    > Pair<float,Cont>? f=3Dnull;//w=B3a=B6nie znaleziona kolizja
    > for(int i=3D0;i<balls.length;i++){
    > f=3Dnull;
    > b=3Dballs[i];
    > //tu byly testy kolizji ze scianami, pomijam dla czytelnosci
    > for(int j=3D0;j<i;j++){
    > a=3Dballs[j];
    > f=3DfindCollision(a,b);
    > if(zapCol=3D=3Dnull || (f!=3Dnull && f.t<zapCol.t)){//
    je=B6li znalezi=
    > ona =
    >
    > kolizja jest bli=BFsza w czasie ni=BF zapami=EAtana
    > zapCol=3Df;//to b=EAdzie u=BFyta
    > }
    > }
    > }
    > }
    >
    > ale to robi O(n^2) dla ka=BFdej kolizji, mo=BFna by znalezione kolizje (=
    > f) =
    >
    > zapami=EAtywa=E6 gdzie=B6, i invalidowa=E6 tylko te, w kt=F3rych uczestn=
    > iczy=B3y kulki =
    >
    > dla wykonywanej (proc()) kolizji.
    >
    > kod iteracyjny te=BF si=EA si=EA da optymalizowa=E6, i kto=B6 si=EA tym =
    > pewnie =
    >
    > zajmowa=B3, ale ja wola=B3em si=EA pobawi=E6 analitycznym
    >

    moim zdaniem to co powyzej jest bardzo dziwne
    bo nie trzeba sie tak wcale babrac z czasami itp

    ja poki co uzywam tutaj

    http://dl.dropbox.com/u/42887985/kulki2d.zip

    tylko trywialnej 'kwadratowej' detekcji kolizji
    (i to grubo bo kulek jest 200 ramek okolo 100/s
    i fizyka jest 5x na ramke - czyli to leci 100tys
    detekcji kolizji na sekunde)

    klawisze: 't' wlacza tlumienie, spacja przelacza
    grawitacje, 'z' wlacza pokazywanie wektorow predkosci
    (ale nie jest to dokonczony programik (bo zrobilbym
    wystrzeliwanie kulek mysza itd) tylko fragment do testu)

    kolizji zreszta nie chce mi sie poprawiac (200 kulek starczy)
    wolalbym dopracowac ta fizyke (bo jestem jej jakos niepewny/
    niezadowolony) przed zaciemnieniem wszystkiego
    optymalizacja kolizji


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

  • 08.12.11 21:46
  • 08.12.11 21:57

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: