Warsztat.GD

Programowanie => Matematyka i fizyka => Wątek zaczęty przez: chester w Styczeń 08, 2010, 21:32:02

Tytuł: Pileczka - kat odbicia
Wiadomość wysłana przez: chester w Styczeń 08, 2010, 21:32:02
Witam

Odrazu przejde do rzeczy.. mam taki oto kod


  if(y==450) kierunek_y=-1;
  if(y==0) kierunek_y=1;

  y+=kierunek_y;

  if(x==610) kierunek_x=-1;
  if(x==0) kierunek_x=1;

  x+=kierunek_x;

za jego pomoca odbijam sobie moja pileczka od krawedzi na mojej planszy 640x480.

Moj problem polega na tym ze chcialbym aby moje odbicie bylo bardziej naturalne. Wyczytalem gdzies ze mozna by to bylo zrealizowac za pomoca funkcji trygonometrycznych.

(http://img46.imageshack.us/img46/976/img1m.jpg)

Teraz obliczam wektor a i c. Obliczam cos mojego kata i zamiast y+=kierunek_y wstawilbym y+=cos(a/c).
Czy moje myslenice jest dobre ? Bo przy takim rozwiazaniu pojawia mi sie duzo problemow ktorych nie moge obejsc. Poczytalem co nieco tutki o wektorach itp. ale i tak idzie mi troche ciezko.
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: janisz w Styczeń 08, 2010, 22:27:57
Prawie dobrze. Pędkość piłki któr to też wektor, który należy rozbić na dwa wektory składowe równoległe do każdej z osi. I teraz w zalezności od której ścianki piłka się odbija zmieniasz konkretny wektor składowy na przeciwyny. Jeżeli np. kierunek_x = 3 a kierunek_y = 4 to piłeczka ma prędkość pięć, jest zwrucona do góry pod kątem ok. 53* ( sinA = 0.8 ) to jeżeli teraz odbije się od górnej ścianki to jej prędkość pionowa powinna się zmienić na przeciwną czyli kierunek_y *= -1. Samo dodawanie jakiekolwiek funkcji trygonometrycznej nic tu nieda, one mogą się przydac jeżeli chcesz losować kąt i dobrac predkości składowe.

Jeszcze się przyjrzałem i cos(a/c) - wyciągasz cosinus z cosinusa?
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: Avaj w Styczeń 09, 2010, 00:37:24
prawo odbicia: kąt padania = kąt odbicia
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: Dab w Styczeń 09, 2010, 00:45:31
prawo odbicia: kąt padania = kąt odbicia
Przy założeniu że powierzchnia od której piłka się odbija jest nieruchoma.
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: lastseeds w Styczeń 09, 2010, 00:52:42
mu chyba chodzi o straty energii ?
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: mach12 w Styczeń 09, 2010, 01:15:53
@up
Oj wątpię  ;)
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: chester w Styczeń 09, 2010, 14:09:35
faktycznie napisalem cos z cos moj blad,

ktos tam pisal o stracie energi, nie nie, mi chodzi o najprostsze odbicie pileczki od sciany bez brania pod uwage masy, grawitacji, oporow itp. ja i bez tego mam problemy.

Kat padania usiluje obliczyc za pomoca funkcji cos. Czy madrze ? nie wiem. Wtedy bym zastosowal to prawo odbicia. Janisz mi chodzi wlasnie oto ze jak piszesz gdy pileczka odbije sie np. od gornej scianki to jej predkosc nie wynosila -1 tylko tam 0.63424 itp. bo tak wychodzi np. z funkcji cos. Wtedy zamiast y+=1 zrobilym y+=0.63424.

Czyli w mojej petli glownej mialbym:

x+=1;
y+=0.63424; // ta wartosc wziolem z a/c.

  if(y>=445 && y<=450) kierunek_y=-1;
  if(y>=0 && y<=5) kierunek_y=1;



  y+=cos(780); // a/c

  if(x==610) kierunek_x=-1;
  if(x==0) kierunek_x=1;

  x+=kierunek_x;

Tak to probuje mniej wiecej zrealizowac, i tak probuje juz od paru dni ;)
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: Kamma w Styczeń 09, 2010, 14:27:12
Funkcje trygonometryczne będziesz potrzebował tylko przy kolizjach piłeczki z powierzchniami nachylonymi ( kąt nachylenia różny od 0 lub 90 stopni ). Jeśli występują u Ciebie tylko ściany pionowe i poziome, to odbicie polega na przemnażaniu jednej ze współrzędnych wektora prędkości piłki przez -1.
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: chester w Styczeń 09, 2010, 14:48:59
Funkcje trygonometryczne będziesz potrzebował tylko przy kolizjach piłeczki z powierzchniami nachylonymi ( kąt nachylenia różny od 0 lub 90 stopni ). Jeśli występują u Ciebie tylko ściany pionowe i poziome, to odbicie polega na przemnażaniu jednej ze współrzędnych wektora prędkości piłki przez -1.

  if(y==450) kierunek_y=-1;
  if(y==0) kierunek_y=1;

  y+=kierunek_y;

  if(x==610) kierunek_x=-1;
  if(x==0) kierunek_x=1;

  x+=kierunek_x;

Kamma zgadza sie wszystko. Tu jest kod ktory realizuje to oczym mowisz. Ale ja chce zbadac kat pod jakim pileczka lecaca z sciany 'a' uderza w sciane 'b' i wypuscic ja pod takim samym katem. Czemu sie tak uparlem juz tumacze, napisalem gre w ktorej odbijam sobie pileczka od scian, taki ping-pong. Wszystko mi dziala ale chcialbym aby ruch mojej pileczki byl bardziej naturalny. Nawet zainteresowalem sie ksiazka "fizyka gier dla programistow" i innymi z tego tematu ale teraz juz wiem ze nic z tych ksiazek bym nie zrozumial dlatego zostalo mi liczyc na pomoc na forum.
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: mwojt w Styczeń 09, 2010, 14:59:50
kierunek piłki lepiej zapisać zmienną 0-360 stopni (kąt)
nx = sin(kąt*3.1415923865/180)*szybkość;
ny = cos(kąt*3.1415923865/180)*szybkość;
piłka_x+=nx;
piłka_y+=ny;
a później pokombinować coś z odbiciami.
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: RedHot w Styczeń 09, 2010, 15:18:17
prawo odbicia: kąt padania = kąt odbicia
Przy założeniu że powierzchnia od której piłka się odbija jest nieruchoma.
A jak będzie wyglądała ta sytuacja w przypadku ruchomej powierzchni ?

// 400 post  ;D
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: Avaj w Styczeń 09, 2010, 16:03:58
http://www.flashzone.pl/forum2/showthread.php?t=48440

polecam ostatni post z tego tematu, wektory upraszczają sprawę
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: Kamma w Styczeń 09, 2010, 16:05:21
Kamma zgadza sie wszystko. Tu jest kod ktory realizuje to oczym mowisz. Ale ja chce zbadac kat pod jakim pileczka lecaca z sciany 'a' uderza w sciane 'b' i wypuscic ja pod takim samym katem. Czemu sie tak uparlem juz tumacze, napisalem gre w ktorej odbijam sobie pileczka od scian, taki ping-pong. Wszystko mi dziala ale chcialbym aby ruch mojej pileczki byl bardziej naturalny. Nawet zainteresowalem sie ksiazka "fizyka gier dla programistow" i innymi z tego tematu ale teraz juz wiem ze nic z tych ksiazek bym nie zrozumial dlatego zostalo mi liczyc na pomoc na forum.

Dwa wektory:

n = [nx, ny] wektor normalny powierzchni odbicia
V = [Vx, Vy] wektor prędkości piłki

Kąt ALFA między powierzchnią, a wektorem prędkości:

cos BETA = ( nx*Vx+ny*Vy ) / ( |n| * |V| )
BETA = arc cos ( nx*Vx+ny*Vy ) / ( |n| * |V| )
ALFA = BETA - 90 stopni (lub PI/2)
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: Krzysiek K. w Styczeń 09, 2010, 23:51:50
Dwa wektory:

n = [nx, ny] wektor normalny powierzchni odbicia
V = [Vx, Vy] wektor prędkości piłki

Wektor prędkości po odbiciu:

V' = V - 2n(V o n)

Czyli:

d = Vx*Vx + nx*nx
V' = [ Vx - 2*nx*d, Vy - 2*ny*d ]

Wektor normalny musi mieć przy tym długość jednostkową.
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: chester w Styczeń 10, 2010, 13:40:12
o rany... zalamaliscie mnie tymi wzorami troche, mowic ze nigdy bym na to nie wpad to sobie moze odpuszcze ale myslalem ze bedzie to nieco prostsze (choc pewnie to trudne nie jest)

Dwa pytania:
We wzorze V' = V - 2n(V o n) symbol "o" oznacza ?
I w temacie ponizej w tym dziale na forum przeczytalem ze warto czasami skorzystac z gotowego juz silnika.
Box2D - Czy warto zainteresowac sie tym silnikiem czy sobie odpuscic ? Pytam na tle tego do czego bylby mi on potrzebny czyli odbijania pileczki od scian.

Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: Avaj w Styczeń 10, 2010, 13:45:43
o rany... zalamaliscie mnie tymi wzorami troche, mowic ze nigdy bym na to nie wpad to sobie moze odpuszcze ale myslalem ze bedzie to nieco prostsze (choc pewnie to trudne nie jest)

Dwa pytania:
We wzorze V' = V - 2n(V o n) symbol "o" oznacza ?
I w temacie ponizej w tym dziale na forum przeczytalem ze warto czasami skorzystac z gotowego juz silnika.
Box2D - Czy warto zainteresowac sie tym silnikiem czy sobie odpuscic ? Pytam na tle tego do czego bylby mi on potrzebny czyli odbijania pileczki od scian.


symbol "o" oznacza iloczyn skalarny wektorów
Tytuł: Odp: Pileczka - kat odbicia
Wiadomość wysłana przez: Kamma w Styczeń 10, 2010, 18:29:25
d = Vx*Vx + nx*nx

d = Vx*nx + Vy*ny :)