Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

sudari krugova i njihovo odbijanje...

[es] :: Art of Programming :: sudari krugova i njihovo odbijanje...

[ Pregleda: 4209 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zaraza

Član broj: 19938
Poruke: 1139
*.ptt.yu



+4 Profil

icon sudari krugova i njihovo odbijanje...27.02.2004. u 00:39 - pre 245 meseci
kako racunati odbijanje dva kruga, a da se oni naravno odbiju kako treba?
razmisljao da postavim tangentu pri sudaru na jedan od njih i posle toga bi trebalo prakticno odbiti ovaj drugi kao od zid...
e problem je sto nemam pojma kako ide jednacina za tangentu kruga, a nesto ni na netu nisam uspeo da nadjem
u stvari jel ima neko drugaciji predlog?
 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
*.rcub.bg.ac.yu

ICQ: 20785904


+4 Profil

icon Re: sudari krugova i njihovo odbijanje...27.02.2004. u 01:27 - pre 245 meseci
mozes da koristis i normalu na tangentu tj zid.
spoji im centre, i posmatraj im vektor brzine neposredno pre udara u odnosu na duz koja spaja centre u trenutku sudara.

 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.beotel.net

Sajt: localhost


+5 Profil

icon Re: sudari krugova i njihovo odbijanje...27.02.2004. u 12:57 - pre 245 meseci
kada sam bio mlađi (čitaj, kada još nisam posedovao matematički aparat), ja sam za jednu igricu odbojanje odradio tako što sam objektima samo razmenio (swapovao) vektore brzina.

znači, posle sudara, krug A se kretao u pravcu, smeru i 0.9*brzinom kruga B pre sudara, i obrnuto.

naravno, ovo nije tačno, i sada to tako ne bi radio, ali ako praviš neku zajebanciju, onda ti ovo brzo i jednostavno rešenje verovatno može završiti posao.. ;)

 
Odgovor na temu

zaraza

Član broj: 19938
Poruke: 1139
*.ptt.yu



+4 Profil

icon Re: sudari krugova i njihovo odbijanje...27.02.2004. u 14:02 - pre 245 meseci
pa u principu za ovo sto radim mozda bi tako nesto i odgovaralo, al nesto mi se ne svidja :)
uglavnom, resio sam problem, jos samo da regulisem kada se sudaraju direktno, tj jedan ide u 0 drugi 180....nesto tu ne stima, ali dobro, ako bude problema, ja cu opet da se javim :)
 
Odgovor na temu

StMilan

Član broj: 5061
Poruke: 144
*.ptt.yu



Profil

icon Re: sudari krugova i njihovo odbijanje...27.02.2004. u 19:16 - pre 245 meseci
Hehe, ovo i ja radim iz domaceg iz objektnog softvera.
Treba malo vektorskih i skalarnih proizvoda
 
Odgovor na temu

Goq

Član broj: 12091
Poruke: 79
*.yubc.net



Profil

icon Re: sudari krugova i njihovo odbijanje...06.07.2004. u 21:58 - pre 240 meseci
Ja sam se ranije bavio tom tematikom, jer sam bio odusevljen pozadinom u igri ElastoMania na kojoj su se "odbijali" krugovi
raznih dimenzija i brzina. U tom matematickom sistemu nije bilo mase, trenja, kao ni ubrzanja. Krug je momentalno
menjao smer kretanja i brzinu prilikom kontakta sa susednim objektima (krugovima i zidovima), dok se van tih situacija
kretao konstantnom brzinom.

Pokusacu da objasnim kako je moguce doci do tacke "sudara" dva kruga (bez ikakvih "aproksimacija"):

U JEDNOM programskom ciklusu (t), dva kruga se pomere u pravcu svog vektora brzine. Centri krugova imaju svoju
pocetnu (za t=0) i krajnjnu tacku (za t=1).

Promenljive:
(x1,y1)(x2,y2) - pocetna i krajnja pozicija centra prvog kruga
(X1,Y1)(Y2,Y2) - pocetna i krajnja pozicija centra drugog kruga
(r) - poluprecnik prvog kruga
(R) - poluprecnik drugog kruga
(s1,s2,s3,s4) - pomocne promenljive (da povecaju citljivost kasnije)
(x,y,X,Y) - koriste se u "teoretskom" delu
(Z) - (Z=r+R)


DEFINICIJE:
x=x1 + t*(x2-x1);//
y=y1 + t*(y2-y1);//koordinate centra prvog kruga u vremenu (t) (0<=t<=1)

X=X1 + t*(X2-X1);//
Y=Y1 + t*(Y2-Y1);//koordinate centra drugog kruga u vremenu (t) (0<=t<=1)

d(t)=sqrt( (x-X)^2 + (y-Y)^2 );//Rastojanje izmedju centara dva kruga u vremenu (t).
Kada je ono jednako zbiru poluprecnika oba kruga, znaci da se krugovi dodiruju u jednoj tachci.

Zatim se postavlja sledeca jednacina:

Z = sqrt( (x-X)^2 + (y-Y)^2 );//Cilj je pronaci (t) za koje vazi ova jednakost (ukoliko postoji);

...pa dalje...

Z =sqrt( (x1+tx2-tx1-X1-tX2+tX1)^2 + (y1+ty2-ty1-Y1-tY2+tY1)^2 );

Z^2= (x1-X1+t*(x2-x1-X2+X1))^2 + (y1-Y1+t*(y2-y1-Y2+Y1))^2;

IMPLEMENTACIJA:
s1=x1-X1; s2=x2-x1-X2+X1;
s3=y1-Y1; s4=y2-y1-Y2+Y1;

Z^2 = s1^2 + 2*s1*s2*t + s2^2*t^2 +
+ s3^2 + 2*s3*s4*t + s4^2*t^2;

t^2*(s2^2 + s4^2) + t*(2*s1*s2 + 2*s3*s4) + (s1^2 + s3^2 - Z^2) = 0;

Kao sto se vidi, dobija se kvadratna jednacina. Ispitivanjem diskriminante potrebno je odrediti broj njenih resenja:
1.ako je diskriminanta < 0 znaci da nema resenja (krugovi se ne sudaraju) za (0<=t<=1)
2.ako je diskriminanta > 0 znaci da se krugovi dva puta dodirnu u jednoj tachci u vremenskom intervalu (0<=t<=1).
Pritom nas zanima manje t, jer je ono nastupilo pre
3.ako je diskriminanta = 0 znaci da se za (0<=t<=1) krugovi jednom dodiruju u jednoj tachci.

t1/2 se zatim nalazi preko jednacina (-B(+/-)sqrt(D))/2A;

Nasavsi (t) mozemo da odredimo pozicije oba kruga prilikom sudara.
Zatim, TACKU dodira je moguce odrediti koristeci se deljenjem duzi (centarKrug1-centarKrug2 u trenutku sudara) proporcijalno
duzinama poluprecnika.


[Ovu poruku je menjao Goq dana 07.07.2004. u 08:02 GMT]

[Ovu poruku je menjao Goq dana 07.07.2004. u 12:31 GMT]
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
*.vdial.verat.net



+3 Profil

icon Re: sudari krugova i njihovo odbijanje...07.07.2004. u 02:34 - pre 240 meseci
Pogledaj ovaj OpenGL primer -> download <40kb
Arhiva sadrzi i source code.

Komande:

left/right - decrease/increase gravity
up/down - increase/decrease velocity
g - gravity on/off
e - elastic collisions on/off
r - time slow
t - time speed up
f - line circle/filled circle
w - wrapped on/off
c - collision on/off
n - add a ball
m - delete a ball
O_o
 
Odgovor na temu

Goq

Član broj: 12091
Poruke: 79
*.yubc.net



Profil

icon Re: sudari krugova i njihovo odbijanje...07.07.2004. u 06:25 - pre 240 meseci
Linkovanje ka tom fajlu nije dozvoljeno:

"You are seeing this page because the file you selected is missing or you tried to link directly to a file on the NeHe Productions web site. Direct linking is not allowed. If you run a web site, please link to the main page! If you have no idea why you ended up on this page or you feel you were brought to this page in error, please visit the main page at http://nehe.gamedev.net and send me an email. "
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
*.vdial.verat.net



+3 Profil

icon Re: sudari krugova i njihovo odbijanje...07.07.2004. u 14:37 - pre 240 meseci
Do fajla se moze doci preko http://nehe.gamedev.net. U opciji downloads sa desne strane bira se "B", a zatim prvi primer "Balls".
O_o
 
Odgovor na temu

Nikola Knezevic

Član broj: 35927
Poruke: 5
*.ptt.yu



Profil

icon Re: sudari krugova i njihovo odbijanje...01.10.2004. u 00:02 - pre 238 meseci

Citat:
zaraza: kako racunati odbijanje dva kruga, a da se oni naravno odbiju kako treba?
razmisljao da postavim tangentu pri sudaru na jedan od njih i posle toga bi trebalo prakticno odbiti ovaj drugi kao od zid...
e problem je sto nemam pojma kako ide jednacina za tangentu kruga, a nesto ni na netu nisam uspeo da nadjem
u stvari jel ima neko drugaciji predlog?

Code:

//SUDAR KRUZNICA
//(x,y)-centar prvog kruga
//(x2,y2)-centar drugog kruga
//r,r2-boluprecnici
//bx,by   projekcije brzine prvog na ose
//bx2,by2 projekcije brzine drugog na ose    

double ras=sqrt( ( (x2-x)*(x2-x) )+( (y2-y)*(y2-y) ) );//rastojanje cenara kruznica
//ako je zbir oba poluprecnika veci ili jednak  trenutnom rastojanju centara 
if(ras<=(r+r2)){         // desio se sudar,trazi tacku sudara    
 double sx,sy,cos_a,sin_a;        //koordinate sudara i ugao tacke sudara
  cos_a=(x2-x)/ras;                     //cosinus ugla  tacke sudara 
  sin_a=(y2-y)/ras;                     //sinus ugla tacke sudara

  sx=x+r*cos_a;                         //x-koordinata tacke sudara                  
  sy=y+r*sin_a;                         //y-koordinata tacke sudara
//sad kada imamo tacku sudara neka odbijanje pocne
//sila odbijanja deluje od (sx,sy) prema (x,y) odnosno centru ,tako da imamo njen
//pravac i smer ali ne i intenzitet,intenzitet sile  u realnim uslovima zavisi od mase 
//ali neka ovde zavisi od poluprecnika krugova i njihovih brzina.

double silax,silay,sila;
double bu,bu2;               //ukupna brzina
bu=sqrt(bx*bx+by*by);        //ukupna brzina prvog
bu2=sqrt(bx2*bx2+by2*by2);    //ukupna brzina drugog    
                //OVE SILE SU ZA PRVU KRUZNICU
sila=(bu+bu2)/(drugi.r/r);        
silax=sila*cos_a;                      //sila po x-osi
silay=sila*sin_a;                      //sila po y-osi
        
 //sada imamo dve sucenjene sile koje se sabiraju po principu paralelograma
//ali posto imamo njihove projekcije na ose, mozemo  da saberemo njiove vrednosti
bx=-silax;  
 by=-silay;
//znak minus zavisi kako stoji koordinatni sistem,ovde je (0,0) u levom gornjem uglu 
}

 
Odgovor na temu

[es] :: Art of Programming :: sudari krugova i njihovo odbijanje...

[ Pregleda: 4209 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.