GRY-Online.pl --> Archiwum Forum

Matematyka : Uzyskanie dokładnej wartości kąta miedzy 2 wektorami w 3 wy...

25.11.2006
19:49
smile
[1]

Toolism [ GameDev ]

Matematyka : Uzyskanie dokładnej wartości kąta miedzy 2 wektorami w 3 wy...

Szukam szukam, myslę, myślę i wymyślić nie mogę. Może ktoś z was jest dobry z trygonometrii i ogólnie z geometrii i będzie znał odpowiedz na pytanie które zaraz postawię?

Mam 2 wektory w trójwymiarze. Jeśli policzę DOT-product ( wybaczcie ale nie wiem jak to się nazywa po polsku ) otrzymam cosinus ( theta ) gdzie theta będzie równa kątowi zawartemu między nimi. Jeśli teraz wynik cosinusa( theta ) podstawię jako parametr arcusa Cosinusa
czyli coś w stylu acos( wynik cosinusa(theta ) ) to otrzymam to co mnie interesuje mianowicie THETE. Problem w tym.. ze z racji tego , iż funkcja cosinus nie jest różnowartościowa w przedziale od 0 do 2PI ... to niestety dla 1 wartości cosinusa ( theta ) dostaję 2 możliwe kąty..

przykładowo cos(45 stopni ) = w przyblizeniu 0,7017coś..
teraz acos (0.7017..) = w przyblizeniu daje 45.. czyli niby się zgadza..
ale...

cos(315 stopni) również = 0.7017.. a wiemy już że acos( 0.7017 ) da nam 45 stopni więc nie jestem w stanie otrzymać wartosci 315 stopni..

Teraz najważniejsze pytanie :)

Czy ktoś ma pomysł jak uzyskać tą wartość 315 stopni wiedząc że cos(315) = 0.7017..
Oczywiscie nie chodzi mi tylko o tę wartość a o wszystkie wartości w ogóle..;)

PS. po co mi to? Potrzebuję znać kąt miedzy dwoma wektorami bo w mojej gierce musze wiedziec o jaki kąt ma obrócić się jednostka kiedy wydam jej komendę MOVE w konkretne miejsce;)

25.11.2006
19:57
[2]

Cainoor [ Mów mi wuju ]

DOT-product - iloczyn skalarny

Arcus cosinus masz opisany tutaj:


Wartość funkcji możesz wziąć z tablic matematycznych lub napisać prosty program, który Ci będzie to liczył. Nie jestem pewien, ale chyba Excel ma ją już w sobie zaszytą :)

25.11.2006
20:06
[3]

Toolism [ GameDev ]

Cainoor -> czy napewno przeczytałeś to co napisałem dokładnie?

1) Umiem liczyć iloczyn skalarny
2) Umiem obliczyc arcus cosinusa.
3) moje pytanie dotyczy czego innego..

25.11.2006
20:11
[4]

Cainoor [ Mów mi wuju ]

To sprecyzuj pytanie. Bo ja rozumiem to tak, że mając konkretną liczbę (wynik funkcji cosinus) chcesz otrzymać kąt w stopniach. Zgadza się?

25.11.2006
20:15
[5]

Toolism [ GameDev ]

tak jest!:)

i tu leży problem bo mająć konkretną wartość można obliczyć 2 kąty a nie jeden. I moje pytanie dotyczy tego jak obliczyć jeden i drugi.
Posłużę się jeszcze raz przykładem z 1 posta.

cosinus(45stopni) = 0,7017
acos(0,7017) = 45. Tu dziala fajnie.. a teraz
cosinus(315 stopni) = RÓWNIEŻ 0,7017
acos(0,7017) da nam wynik 45 a nie 315..

Teraz jeśli wiesz ze cos(theta) = 0,7017 to ile wynosi THETA? jeśli mogą być to 2 wartości?
i jak np otrzymać z arcusa tego co wyszło wynik 315 w tym wypadku?

25.11.2006
20:21
[6]

Cainoor [ Mów mi wuju ]

Musisz zdefiniować przedział cosinus i ograniczyć go np. tylko do [0, PI]. W takim przedziale funkcja jest malejąca, różnowartościowa, a więc posiada funkcje odwrotną (arc cos). Inaczej tego nie możesz zrobić.

Po prostu przy obliczaniu kąta w grze dodaj jeszcze jedną zmienną, która Ci powie z jakiego przedziału jest cosinus i dopiero jak ograniczysz ten przedział, licz arcusa. To chyba możesz zrobić?

Bo jeśli masz tylko samego arcusa, to dupa blada :)

25.11.2006
20:27
[7]

Voutrin [ Snop dywizora ]

Tak jak pisze Cainoor, nie moga byc dwie wartosci( dla 45 i 315), bo funkcje arcus rozpatrujesz na zawezonym przedziale gdzie kosinus jest roznowartosciowy, a w takim przedziale funkcja okreslona jest jednoznacznie. I np mozesz wybrac przedzial [0,pi] gdzie dla arc cos (0.707) istnieje jeden kat 45 stopni.

25.11.2006
20:28
[8]

Toolism [ GameDev ]

eeee.. no tak ale jeśli ograniczę się do tego przedziału to nie uzyskam nigdy wartości większej niż 180 stopni. a jeśli moja jednostka ma zrobić zwrot o 270?
wiem że to jest -(360 - 270 ) czyli -90 ale jakoś trzeba to obliczyć a jeśli bede miał maksymalną wartość 180 bo przecież ograniczę sobie przedział do PI to i obrót bede miał maksymalnie o 180.

25.11.2006
20:34
[9]

Cainoor [ Mów mi wuju ]

Stwórz zmienną pomocniczą x
Jeśli kąt będzie z przedziału [0,PI] to ustaw x=0
Jeśli [PI, 2PI] to x=1

Teraz w zależności od x obliczenie arcusa da Ci odpowiedz jednoznaczną :)

25.11.2006
20:39
[10]

Toolism [ GameDev ]

Cainoor -> wybacz ale gdybym wiedział z jakiego przedziału jest kąt to nie miałbym żadnego problemu:) Tu właśnie o ustalenie jaki to kąt chodzi. Skoro iloczyn skalarny daje mi jedynie wartość a z niej muszę wyprowadzić wartość kąta.. to jesteśmy w punkcie wyjścia... Bo wartość iloczynu skalarnego mogę interpretować dwojako.;(

25.11.2006
20:45
[11]

Milka^_^ [ Zjem ci chleb ]

A co za różnica jaki kąt otrzymasz. Przecież są wzory redukcyjne. Jeżeli o to chodzi i dobrze zrozumiałem o co.

26.11.2006
02:38
[12]

Cainoor [ Mów mi wuju ]

Toolism ---> Sorry, że dopiero teraz odpisuję, ale umówiłem się ze znajomymi.

Popraw mnie, jeśli się myle. Masz układ współrzędnych xyz. Masz dwa wektory opisane w tym układzie. Dobrze rozumuję?

26.11.2006
11:57
[13]

Toolism [ GameDev ]

Cainoor -> już problem rozwiązałem:) ale dzięki za pomoc.
Mówiłeś żeby badać czy kąt jest z przedziału 0, 180 czy z przedziału 180, 360. Ja z kolei mowiłem że jest to oczywiscie swietny pomysl tylko wymaga ode mnie znajomosci kąta a tu właśnie kąt był nieznany.. aale.. zaczęło mi świtać , że to przecież znaczy czy kliknieto na prawo od obiektu (0,180) czy na lewo (180,360).... czyli wystarczyło napisać funkcję która brała obiekt i brała punkt i stwierdzała czy jest on na lewo czy na prawo od obiektu i w zależności od tego ustawiała kąt lub -kąt:) Teraz działa świetnie:) Problem jeszcze z sytuowaniem obiektu z dobrymi rotacjami względem osi Z i osi X .:) zeby mi sie juz idealnie dopasowywała do terenu ale to już raczej łatwiejsze.

Milka -> wzory redukcyjne działają czadowo ale trzeba znać tą ALFĘ której się tak namiętnie używa. A w moim problemie ALFA była niewiadomą:)

26.11.2006
13:16
smile
[14]

Cainoor [ Mów mi wuju ]

Właśnie o coś takiego mi chodziło, tylko nie wiedziałem jak opisujesz umiejscowienie wektorów w przestrzeni. Powodzenia :)

© 2000-2025 GRY-OnLine S.A.