2009-02-19 15 views
10

Piszę aplikację na iPhone'a opartą na opengl i chciałbym, aby użytkownik mógł przetłumaczyć widok w oparciu o kierunek, w którym poruszają dwoma palcami po ekranie. Dla jednego palca wiem, że mógłbym obliczyć wektor od pozycji początkowej do aktualnej pozycji palca użytkownika, a następnie znaleźć wektor jednostkowy tego, aby uzyskać tylko kierunek, ale nie wiem, jak bym to zrobił dla dwóch osób palce, nie sądzę, że dodanie komponentów wektorów i obliczenie średniej zadziała, więc utknąłem.Jak obliczyć średni kierunek dwóch wektorów

Odpowiedz

24

wektor matematyka działa tak jak myślisz:

v3 = (v1 + v2)/2 

// so: 
v3.x = (v1.x + v2.x)/2; 
// same for Y and Z 
3

dodając je i dzieląc przez dwa działa

5

Prosty eksperyment myślowy: Zrób to dla wektor jednostkowy w kierunku x i y. Intuicyjnie można sobie wyobrazić, że "średnia" byłaby wektorem jednostkowym pod kątem 45 stopni w górę iw prawo. Dokładnie to się dzieje. Eksperyment myślowy sugeruje, że musisz znormalizować średnią przez jej wielkość, aby uzyskać wektor jednostkowy. Radziłbym, żebyś to zrobił.

5

Jeśli jesteś zainteresowany tylko w kierunku, należy je dodać i znormalizować wektor wynik,

(v1 + v2)/abs(v1 + v2) 
+8

Podział od zera! –

+0

niech v1! = V2 ... – RickyA

+0

jeśli interesuje tylko kierunek, v1 i v2 muszą zostać najpierw znormalizowane. – pikaille

7

Zazwyczaj lepiej jest, aby pomnożyć niż podzielić ze względów prędkości robiąc grafiki programowania więc polecam ten :

v3 = (v1 + v2) * 0,5f;

+8

Czy takie rzeczy nie zostałyby zoptymalizowane przez kompilator, więc '/ 2.0' jest identyczne z' * 0.5'? –

+0

Tak, powinno to być przynajmniej z mojego doświadczenia z typowymi kompilatorami języka C. To inna historia, jeśli masz zmienną, która jest stała, powiedzmy dłuższą pętlę, w której coś przez nią dzielimy. Następnie mogę zmierzyć różnice, jeśli obliczysz nową zmienną (odwrotność) i pomnożysz w pętli. Jednak optymalizacja kompilatorów dość szybko się poprawia. – oli

3

Przepraszam, ale to jest złe. W świecie wektorów "średni" w sensie uśredniania składników nic nie znaczy. Wyobraź sobie (-1 0) i (1 0) -> średnia = 0 0 ;-)

1

Aby zrozumieć to intuicyjnie, można było narysować dwa wektory. Następnie narysuj odcinek linii między punktami końcowymi obu. Punkt środkowy tego segmentu jest średnim wektorem. Działa to dla dowolnej liczby wymiarów.

Powiązane problemy