eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming? vs ? › Re: ? vs ?
  • Data: 2011-12-09 20:35:02
    Temat: Re: ? vs ?
    Od: " " <f...@W...gazeta.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    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/

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: