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

Obrót obiektu w stronę kursora. Kąt pomiędzy wektorami.

Object Storage Arubacloud
0 głosów
1,136 wizyt
pytanie zadane 28 maja 2016 w C i C++ przez Kyoya Początkujący (260 p.)

Witam. Próbuję stworzyć aplikację graficzną przy użyciu biblioteki SFML, w której obiekt odwraca się zawsze w kierunki kursora. Poczyniłem już cały szereg obliczeń i nastałem pewien problem.

Otóż kąt pomiędzy wektorem "v" i "w" jest taki sam jak kąt pomiędzy wektorami "v" i "~w". To wszystko się zgadza, lecz potrzebuję zrobić tak, żeby określić ramie początkowe i końcowe kąta. Wszystko to oczywiście w C++. Chodzi o to, że kąt o który musi się obrócić obiekt należy do przedziału <0;180>, a ja potrzebuję, żeby kąt był mierzony zawsze "w jedną stronę", czyli, żeby należał do przedziału <-180;180>, albo <0;360>. Spotkał się już ktoś z Was z takim problemem? Pozdrawiam.

3 odpowiedzi

+1 głos
odpowiedź 28 maja 2016 przez criss Mędrzec (172,590 p.)

Nie skumałem do końca tego co napisałeś, ale pewnie przekombinowałeś. Nie wiem i nie chce wiedzieć skąd tam się wziął arccos XD Na pewno przyda ci się arctangengs. W C++ masz taką funkcje jak atan2. Przyjmuje ona dwa argumenty. W pierwszym Y, w drugim X. Także w pierwszym argumencie wrzuć różnice między pozycją y myszki a pozycją y obiektu i analogicznie w drugim. Pamiętaj tylko, że atan2 zwraca kąt w radianach. Konwersja do miary kątowej:

angleInRads *= (180.f/3.14f);

I jeszcze odejmij od tego 180, bo inaczej obiekt odwróci dokładnie w drugą strone. To wynika z odwroconej osi Y w SFML.

komentarz 28 maja 2016 przez Kyoya Początkujący (260 p.)
Nie czytałem nic na temat tego problemu w internecie - chciałem dojść do tego sam. Znam wzór na cosinus alfa, gdy alfa jest kątem pomiędzy wektorami. Stąd właśnie arccos. :) O sposobie z arctangensem już czytałem. Wiesz może na jakiej zasadzie dokładnie to działa? Bo nie ukrywam, że to interesuje mnie najbardziej. :)
komentarz 28 maja 2016 przez criss Mędrzec (172,590 p.)
Cóż.. to po prostu funkcja trygonometryczna. Nie wiem jak "działa", nigdy sie w to nie zgłębiałem.
0 głosów
odpowiedź 28 maja 2016 przez Bondrusiek Maniak (61,410 p.)
Witam,

Trochę nie rozumiem pytania jak chcesz "określić ramie początkowe" to są to współrzędne z tego co rozumiem. Musisz stworzyć  układ współrzędnych. Wtedy możesz określi położenie oraz wartość kąta(pamiętaj, że w C/C++ wartości funkcji trygometrycznych sin(), cos() itp. podajemy w radianach gdzie PI == 180). W tym przypadku wykorzystujesz właściwości trygometryczne.

X = cos(O)*ramie

Y = sin(O)*ramie

O = arctg(Y/X)

ramie = sqrt(X^2 + Y^2)

Przekształcając czy wykorzystując te wzory powinieneś bez problemu znaleźć współrzędne i kąt.
0 głosów
odpowiedź 28 maja 2016 przez Patrycjerz Mędrzec (192,320 p.)
edycja 28 maja 2016 przez Patrycjerz

O - Oś obrotu obiektu

P - Pozycja kursora myszy

  1. Liczysz wartość sinusa (a / b) lub cosinusa (b / a) kąta α.
  2. Liczysz wartość kąta α za pomocą funkcji arcus sinus lub arcus cosinus.
  3. Sprawdzasz, gdzie znajduje się kursor myszy. Jeśli w I ćwiartce układu, to pozostawiasz kąt obrotu bez zmian. Jeśli w II, to kąt obrotu ma miarę 180° - α. Jeśli w III, to 180° + α. Jeśli w IV, to 360° - α.
komentarz 28 maja 2016 przez katolik6 Dyskutant (8,140 p.)
Lepiej będzie liczyć z tangensa, bo tam po prostu używamy różnicy wartości O.x iP.x oraz O.y i P.y Do sinusa trzeba liczyć b z pitagorasa. Kyoya wklej proszę kod jak skończysz, chcę sprawdzić, czy mam szybszy :)
komentarz 28 maja 2016 przez katolik6 Dyskutant (8,140 p.)
Jeszcze jedno: układ pokazany powyżej jest inny, niż używany przez sf::Sprite Przede wszystkim oś Y ma przeciwny zwrot, do tego sf::Sprite porusza się zgodnie ze wskazówkami zegara, lubię umieszczeć 0° y>0 && x==0 ale w praktyce zależy to od tego, w którą stronę narysujesz przód obiektu.

Podobne pytania

+1 głos
1 odpowiedź 188 wizyt
0 głosów
1 odpowiedź 766 wizyt
pytanie zadane 6 kwietnia 2017 w C i C++ przez K4mczi Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 107 wizyt

92,624 zapytań

141,482 odpowiedzi

319,822 komentarzy

62,005 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...