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
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
dodając je i dzieląc przez dwa działa
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ł.
Jeśli jesteś zainteresowany tylko w kierunku, należy je dodać i znormalizować wektor wynik,
(v1 + v2)/abs(v1 + v2)
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;
Czy takie rzeczy nie zostałyby zoptymalizowane przez kompilator, więc '/ 2.0' jest identyczne z' * 0.5'? –
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
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 ;-)
To nie jest takie proste, jak mogłoby się wydawać: musisz użyć interpolacji slerp, aby znaleźć pół obrotu na jednostce sfery: http://en.wikipedia.org/wiki/Slerp Głębokość tutaj: http://www.essentialmath.com/index.htm
Technicznie tak, ale dla wektorów jednostkowych, Slerp z równymi ciężarami redukuje się do prostej średniej + normalizacji. –
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.
- 1. Obliczyć minimalną parę wektorów.
- 2. Jak obliczyć średni czas oczekiwania i średni czas zwrotu w harmonogramie SJF?
- 3. Jak obliczyć średni kolor obrazu w tablicy numpy?
- 4. obliczyć kierunek siły przyciągania między planetami
- 5. Jak obliczyć kointegracje dwóch list?
- 6. Jak obliczyć podobieństwo kosinusa za pomocą dwóch macierzy
- 7. Scalanie dwóch wektorów przez non NA ceni
- 8. Jak obliczyć podobieństwo dwóch liczb całkowitych?
- 9. Jak skutecznie obliczyć wewnętrzny produkt dwóch słowników?
- 10. Jak obliczyć różnicę dwóch miar kątowych?
- 11. "Blokowanie" dwóch wektorów i ich sortowanie
- 12. Kartezjański produkt dwóch wektorów w Julii
- 13. Wypełnienie tablicy numpy z różnicy dwóch wektorów
- 14. Porównywanie dwóch wektorów w instrukcji if
- 15. Scalanie dwóch wektorów STL z układem naprzemiennym
- 16. Obliczanie odległości Hamminga dla dwóch wektorów w R?
- 17. Obliczanie iloczynu krzyżowego dwóch wektorów w Fortranie 90
- 18. Średni czas LINQ?
- 19. Jak uzyskać kierunek kompasu
- 20. jak obliczyć przypomnienie float dla dwóch wartości float
- 21. Jak można obliczyć procent nakładania się dwóch prostokątów?
- 22. jak obliczyć minimum dwóch zmiennych po prostu w bash?
- 23. Jak obliczyć podobieństwo dwóch rysunków linii w szybkim
- 24. Zastosowanie „lub” funkcji do więcej niż dwóch wektorów Matlab
- 25. Użyj dynamicznej alokacji pamięci dzielonej dla dwóch różnych wektorów.
- 26. Tworzenie ramki danych z dwóch wektorów przy użyciu cbind
- 27. Unix znajdź średni rozmiar pliku
- 28. Reduktory Clojure - efektywnie stosują funkcję do dwóch wektorów w równoleżniku
- 29. Tworzenie ciągów z indeksów dwóch wektorów w Matlab
- 30. Funkcja R dla wykonywania porównań parami dla dwóch wektorów
Podział od zera! –
niech v1! = V2 ... – RickyA
jeśli interesuje tylko kierunek, v1 i v2 muszą zostać najpierw znormalizowane. – pikaille