• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SFML - wyliczenie pozycji w czasie rotacji

0 głosów
126 wizyt
pytanie zadane 11 czerwca 2016 w C i C++ przez Maciek123233 Gaduła (3,210 p.)

Witam!

oknoAplikacji.clear();
obrazek.setOrigin(500,500);
obrazek.rotate(1);

sf::Vector2f poz= obrazek.getPosition();
cout<<poz.x<<" i "<<poz.y<<endl;

oknoAplikacji.draw( obrazek );
oknoAplikacji.display();

Gdy obrazek się obraca to poz.x i poz.y i tak wskazuje ten sam punkt.

Jak wyliczyć dokładny punkt?

2 odpowiedzi

+1 głos
odpowiedź 11 czerwca 2016 przez MetRiko Nałogowiec (36,870 p.)

Sprawianie by jakiś obiekt, krążył dookoła innego przez zmianę Origin jest niepoprawne.
W celu osiągnięcia tego i uzyskania pozycji obiektu krążącego musisz użyć matmy, a dokładniej trygonometrii :)
Trochę ci w tym pomogę:
1. Musisz zainkludować bibliotekę <cmath>, będzie potrzebna do funkcji trygonometrycznych.
1. Potrzebujesz zmiennej (nazwijmy ją) Time, która będzie się inkrementować w każdym obiegu pętli głównej, będzie to czas naszej gry.. w końcu pozycja będzie się zmieniać z czasem.
2. Proponuję ustawić Origin w obu obiektach na środku. Ok nazwijmy obiektem krążącym, a Oc obiektem centralnym.
3. A teraz ustawiamy pozycję Ok:
   > Ok.x=Oc.x+Radius*cos(Time/Cycle);
  
> Ok.y=Oc.y+Radius*sin(Time/Cycle);
   Gdzie:
   Radius - Promień naszego okręgu
   Time - Czas gry
   Cycle - Zmienna kontrolująca szybkość jednego cyklu.. mówiąc inaczej im jest większa tym Ok będzie krążył wolniej.

   Ważne by wszystkie zmienne wymienione wyżej były typu zmiennoprzecinkowego (np. float, double)

0 głosów
odpowiedź 11 czerwca 2016 przez niezalogowany
I dobrze się dzieje. getPosition() zwraca pozycję Origin (pivota), a podczas rotacji jego pozycja się nie zmienia (bo jest dokonywana względem tego punktu).

Jaki punkt chcesz obliczyć?
komentarz 11 czerwca 2016 przez Maciek123233 Gaduła (3,210 p.)

#mistrzpa9i

#mistrzpainta

zakładamy  że czerwone kółko to wymiary origin, zielone kółko się obraca wokół czerwonego kółka ale pozycja zielonego się nie zmienia. No ale skoro obraca się wokół drugiego kółka to się musi zmieniać.

I chcę wyliczyć tą prawdziwą pozycję.

komentarz 11 czerwca 2016 przez niezalogowany

Wymiary? Raczej pozycja. Origin to punkt. Pozwól że skorzystamy z mojego obrazka, po lewej mamy figurę w stanie początkowym (znane są nam wszystkie wartości początkowe), po prawej mamy figurę po rotacji o znany nam ß, (xc, yc) to punkt origin, więc jest identyczny przed i po rotacji. Chcesz obliczyć np wartości (x1',y1')?

[full size]

komentarz 11 czerwca 2016 przez Maciek123233 Gaduła (3,210 p.)
Dokładnie o to chodzi! Przepraszam, czy to ty zrobiłeś poradnik dla pocz. na temat SMFL?
komentarz 11 czerwca 2016 przez Boshi VIP (100,660 p.)
Tak, to Szymon ;)

Podobne pytania

0 głosów
0 odpowiedzi 105 wizyt
pytanie zadane 29 kwietnia 2017 w C i C++ przez Pajdas Mądrala (5,930 p.)
0 głosów
2 odpowiedzi 143 wizyt
pytanie zadane 16 marca 2017 w C i C++ przez 10kw10 Pasjonat (22,750 p.)
0 głosów
3 odpowiedzi 248 wizyt
pytanie zadane 19 lutego 2017 w C i C++ przez Munvik Dyskutant (8,450 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

66,476 zapytań

113,246 odpowiedzi

239,802 komentarzy

46,618 pasjonatów

Przeglądających: 231
Pasjonatów: 10 Gości: 221

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...