eGospodarka.pl
eGospodarka.pl poleca

Ilość wypowiedzi w tym wątku: 12

  • 11. Data: 2011-12-09 20:35:02
    Temat: Re: ? vs ?
    Od: " " <f...@W...gazeta.pl>

    bartekltg <b...@g...com> napisał(a):

    > W dniu 2011-12-09 20:34, Sławomir Szczyrba pisze:
    > > Quidquid MsgId est, timeo profesor fire et dona ferentem...
    > >
    > >> 1) MATEMATYKA /metoda statyczna
    > >> albo dac duze kroki-skoki pozycji kulek w kazdej
    > >> iteracji i wyznaczac dokladnie punkty kolizji z
    > >> matematyki (i probowalem tak robic bo nie jest to az
    > >> tak trudne by sie nie dalo przynajmniej zaczac -
    > >> trzeba przepisac na kod rownanie "dist(x,y,nx,ny) == 2*R"
    > >> (jest to rownanie kwadratowe liczy sie pierwiastki)
    > >>
    > > Moment.
    > > Twierdzisz, że √(a²+b²) jest równaniem kwadratowym?
    >
    > Takim zakamuflowanym...
    >
    > > W ktĂłrym miejscu, przepraszam...
    >
    > ( Dist(x,y) )^2 = 4R^2
    > już jest w pełni.
    >
    tu chodzi o wzor na dist(x1,y1,x2,y2):
    sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))

    dokladniej to chodzi o przyrownanie do 2*R odleglosci miedzy
    poruszajaca sie kulka (ja rozwiazywalem wzgledem parametru t
    gdzie t jest miedzy 0 a 1)

    dist(x+t*vx, y+t*vy , ox, oy) = 2*R

    jest to rownanie kwadratowe wzgledem t,


    dokl. kawalek kodu na brudno z krtorym probowalem:

    float px = prev_ball_x ; //poruszajaca sie kulka
    float py = prev_ball_y ;

    float vx = ball[i].vx ; // jej predkosc
    float vy = ball[i].vy ;

    float ox = ball[jn].x ; // kulka kolizyjna
    float oy = ball[jn].y ;

    float R = 10.0;


    // px+t*vx-ox;
    // py+t*vy-oy;

    // (px-ox)*(px-ox)+t*2.0*vx*(px-ox)+t*t*vx*vx+
    // (py-oy)*(py-oy)+t*2.0*vy*(py-oy)+t*t*vy*vy-R*R=0;

    float a = vx*vx+vy*vy;
    float b = 2.0*vx*(px-ox)+2.0*vy*(py-oy);
    float c = (px-ox)*(px-ox)+(py-oy)*(py-oy)-R*R;
    // c*=-1;

    float delta = b*b-4.0*a*c;
    float t1=-1;
    float t2=-1;

    if(delta>=0)
    {
    t1= (-b+sqrt(delta))/(2*a);
    t2= (-b-sqrt(delta))/(2*a);
    }

    t2 jest zdaje sie zawsze blizszym przecieciem, t1 mozna wogole
    nie liczyc; (jak mowie to zdaje sie ze dzialalo (wygladalo ze dziala)
    ale natrafilem na dalsze komplikacje w zwiazku z tym ze trzebato by puszczac
    rekurencyjnie dla wielokrotnych odbic, a poniewaz trzebabylo
    ciagac pare paramatrow nie chcialo mi sie z tym babrac i
    przeszedlem na 'metode iteracyjna' po tej wczesnej probie (kod na
    brudno po prostu przepisany wzorek z kartki dlugopisem))



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


  • 12. Data: 2011-12-09 22:54:48
    Temat: Re: ? vs ?
    Od: bartekltg <b...@g...com>

    W dniu 2011-12-09 21:35, f...@W...gazeta.pl pisze:

    > tu chodzi o wzor na dist(x1,y1,x2,y2):
    > sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))
    >
    > dokladniej to chodzi o przyrownanie do 2*R odleglosci miedzy
    > poruszajaca sie kulka (ja rozwiazywalem wzgledem parametru t
    > gdzie t jest miedzy 0 a 1)
    >
    > dist(x+t*vx, y+t*vy , ox, oy) = 2*R
    >
    > jest to rownanie kwadratowe wzgledem t,


    Nie, jak zauważył Sławomir -formalnie nie jest. Ale staje się
    nim po podniesieniu obu stron do kwadratu, stąd stwierdzenie,
    że w sumie to takie 'zakamuflowane rownanie kwadratowe'.

    Co więcej, Można to zrobić jeszcze sprytniej. Kolizję
    wyliczać za pomocą _liniowego_ zagadnienie najmniejszyhc kwadratów.

    t*[vx;vy] = [ox;oy] - [x;y].

    Z LZNK dostajemy czas maksymalnego zbliżenia t0,
    obliczamy dystans D dla tego zbliżenia. Jeśli
    d>r+R, to nie mamy zderzenia, w przeciwnym wypadku
    pitagorasem obliczamy poprawkę:

    (?t*V)^2 + D^2 = (R+r)^2
    ?t = 1/V sqrt((R+r)^2 - D^2)
    V to moduł prędkośći,
    interesuje nas oczywiscie moment t0-?t.


    Upraszcza to obliczenia, pozwala uniknać sprawdzania znaku
    delty etc. Samo policzenie t sprowadza się właściwie do rzutu
    (i to niezależnie od wymiaru przestrzeni, w R^3 będzie to samo).



    pzdr
    bartekltg


strony : 1 . [ 2 ]


Szukaj w grupach

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: