Autor Wątek: Obiekt poruszający się po okręgu w przestrzeni 2d  (Przeczytany 5350 razy)

maxest

  • Gość
# Maj 31, 2007, 21:09:59
Witam

Chciałbym aby obiekt mające współrzędne x, y poruszam się po okręgu o danym promieniu w przestrzeni 2d.
Mam kilka pomysłów jak to zrobić ale albo są one wolne ale bezsensowne.

Proszę o pomoc

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline ziomber

  • Użytkownik

  • Zbanowany
# Maj 31, 2007, 21:30:57
kazda nowa klatka daje angle = angle + 1;

angle ustawiamy na początku = 0;
pozniej

pozycjaX := srodekX+promien*sin(angle*pi/180);
pozycjaY := srodekY+promien*cos(angle*pi/180);
mozna jescze if angle = 360 then angle := 0;

maxest

  • Gość
# Maj 31, 2007, 21:52:14
Drugi prostszy sposób to stałe skrętne velocity co klatke. Coś jak trzymanie W FPS'ach przodu, plus skrętu w lewo. Ale wtedy, raczej ciężko specyficzny radius zapodać.

maxest

  • Gość
# Czerwiec 01, 2007, 11:30:55
kazda nowa klatka daje angle = angle + 1;

angle ustawiamy na początku = 0;
pozniej

pozycjaX := srodekX+promien*sin(angle*pi/180);
pozycjaY := srodekY+promien*cos(angle*pi/180);
mozna jescze if angle = 360 then angle := 0;

Witam

Używając tego sposobu w moim kodzie nie mam sensu bo do końca nie wiem o co w nim chodzi.

angle*pi/180 - to jest chyba zamiana stopni na radiany. Ale po co ?
czemu właśnie sin i cos nie wiem czemu mają tu służyć.

dziękuje za pomoc

Offline andnoonesthere

  • Użytkownik

# Czerwiec 01, 2007, 11:35:26
Proponuję zapoznać się z teorią dotyczącą funkcji trygonometrycznych :)

maxest

  • Gość
# Czerwiec 01, 2007, 12:02:46
Proponuję zapoznać się z teorią dotyczącą funkcji trygonometrycznych :)

oki

maxest

  • Gość
# Czerwiec 01, 2007, 12:18:03
sin() działa w radianach.

maxest

  • Gość
# Czerwiec 01, 2007, 13:16:58
Cytuj
if angle = 360 then angle := 0;

Chyba bardziej...
if angle >= 360 then angle := 0;
Jesli w kodzie bedziemy zwiekszac/zmniejszac angle o np. 7, to raczej jest malo prawdopodobne ze natrafimy wlasnie na 360 :)

Offline Hadrian W.

  • Użytkownik
    • Homepage

# Czerwiec 01, 2007, 13:50:13
Więc przez to raczej powinniśmy brać ... then angle := angle - 360;, ewentualnie poprawki na wielokrotności 360.
Problem można jeszcze rozwiązać prawami fizyki - wzór na przyspieszenie dośrodkowe i jedziem ;)

maxest

  • Gość
# Czerwiec 01, 2007, 14:10:18
Cytuj
Więc przez to raczej powinniśmy brać ... then angle := angle - 360;
Ano fakt - bedzie to znacznie lepsze rozwiazanie :)

Cytuj
Problem można jeszcze rozwiązać prawami fizyki - wzór na przyspieszenie dośrodkowe i jedziem
Mozesz zademonstrowac? :>

Offline Hadrian W.

  • Użytkownik
    • Homepage

# Czerwiec 01, 2007, 14:32:46

Ale w tym wypadku jest to chyba zbędne ;)

Offline ziomber

  • Użytkownik

  • Zbanowany
# Czerwiec 01, 2007, 14:50:15
nie wiem co to za problem obliczyc nowa pozycje kulki, zeby ją narysować

Offline Humman

  • Użytkownik

# Czerwiec 02, 2007, 15:00:01
kazda nowa klatka daje angle = angle + 1;

angle ustawiamy na początku = 0;
pozniej

pozycjaX := srodekX+promien*sin(angle*pi/180);
pozycjaY := srodekY+promien*cos(angle*pi/180);
mozna jescze if angle = 360 then angle := 0;

Witam

Używając tego sposobu w moim kodzie nie mam sensu bo do końca nie wiem o co w nim chodzi.

angle*pi/180 - to jest chyba zamiana stopni na radiany. Ale po co ?
czemu właśnie sin i cos nie wiem czemu mają tu służyć.

dziękuje za pomoc

Powyższe instrukcję do obliczania pozycji x i y  pochodzą od parametrycznego równania okręgu.
Funkcję sin() i cos() w c++ przynajmniej pobirają wartość w radianach i zwracają wartość między -1 a 1.
Wartość promień powiększa zwracaną wcześniej wartość, przy czym dla x może być ona inna niż dla y tworząc elipsę.
Wartość obrotu w radianach powinna wynosić od 0 do pi*2 czyli jakieś 6,28 ,większe czy mniejsze wartości zostaną podzielone wewnątcz funkcji sin(),cos() przez pi*2 i nie ma potrzeby ich zamykać w  zakresie od 0 do 360 stopni.

maxest

  • Gość
# Czerwiec 02, 2007, 17:29:34
Cytuj
i nie ma potrzeby ich zamykać w  zakresie od 0 do 360 stopni.
To oczywiste, ze dla tych obliczen nie jest to wymagane. Ale czasami katy wykorzystuje sie tez do innych rzeczy, gdzie zakres [0, 360] jest bardzo pozadany :)

Offline Hadrian W.

  • Użytkownik
    • Homepage

# Czerwiec 02, 2007, 18:10:39
No i może wyjść nam bzdura jak się licznik przekręci :P