• 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,830 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,720 p.)
Tak, to Szymon ;)

Podobne pytania

0 głosów
0 odpowiedzi 99 wizyt
pytanie zadane 29 kwietnia 2017 w C i C++ przez Pajdas Mądrala (5,990 p.)
0 głosów
2 odpowiedzi 139 wizyt
pytanie zadane 16 marca 2017 w C i C++ przez 10kw10 Pasjonat (23,020 p.)
0 głosów
3 odpowiedzi 229 wizyt
pytanie zadane 19 lutego 2017 w C i C++ przez Munvik Dyskutant (8,270 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

64,182 zapytań

110,584 odpowiedzi

231,742 komentarzy

46,956 pasjonatów

Przeglądających: 259
Pasjonatów: 12 Gości: 247

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.

...