Mobilne Aplikacje Multimedialne
Transkrypt
Mobilne Aplikacje Multimedialne
Mobilne Aplikacje Multimedialne Rozszerzona rzeczywistość (AR, Augmented Reality) w Systemie Android Cz.1 Krzysztof Bruniecki Podstawy • Algebra liniowa, operacje na wektorach, macierzach, iloczyn skalarny • Geometria rzutu perspektywicznego, współrzędne jednorodne • Grafika 3D, macierz rzutu perspektywicznego • Układy odniesienia autor: Krzysztof Bruniecki 2 Układ odniesienia związany z urządzeniem mobilnym (b-frame) ZB YB XB autor: Krzysztof Bruniecki 3 Lokalny układ odniesienia związany bieżącym położeniem (m-frame) autor: Krzysztof Bruniecki 4 Skrętność układów odniesienia Występują dwa „niekompatybilne” układy odniesienia lewoskrętny prawoskrętny autor: Krzysztof Bruniecki 5 Reguła prawej dłoni autor: Krzysztof Bruniecki 6 Macierz rotacji (1) • chcąc dokonać transformacji wektora wyrażonego w b-frame reprezentacji w m-frame można posłużyć się równaniem • gdzie omega ,fi, kapa, oznaczają elementarne obroty względem osi X, Y oraz Z i kąty , oraz oznaczają odpowiednio pitch, roll oraz heading • Mnożenie macierzy R1, R2, R3 nie jest przemienne autor: Krzysztof Bruniecki 7 Macierz rotacji (2) autor: Krzysztof Bruniecki 8 Macierz rotacji (3) Wyprowadzenie pojedynczej składowej autor: Krzysztof Bruniecki 9 Macierz rotacji (4) Algebraiczna reprezentacja macierzy rotacji autor: Krzysztof Bruniecki 10 Macierze rotacji i inklinacji w Androidzie (1) • public static boolean getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic) • Od poziomu 3 API • Umożliwia wyznaczenie macierzy inklinacji I jak również macierzy rotacji R transformującej wektor z układu odniesienia związanego z urządzeniem (b-frame) do lokalnego układu odniesienia (m-frame)zdefiniowanego: – Oś X jest iloczynem wektorowym Y.Z (styczna do powierzchni Ziemi w miejscu położenia urządzenia, wskazuje w przybliżeniu wschód) – Oś Y jest styczny do powierzchni Ziemi w miejscu położenia urządzenia, wskazuje północ magnetyczną – Oś Z wskazuje w górę i jest prostopadła do powierzchni Ziemi autor: Krzysztof Bruniecki 11 Macierze rotacji i inklinacji w Androidzie (2) • [0 0 g] = R * gravity (g = wartość siły grawitacji) • [0 m 0] = I * R * geomagnetic (m = wartość pola geomagnetycznego) • R jest macierzą jednostkową w przypadku gdy urządzenie jest położone zgodnie z lokalnym układem odniesienia (m-frame), czyli kiedy? • I jest macierzą rotacji reprezentującą inklinację. Wyrównuje wektor geomagnetyczny do płaszczyzny stycznej z powierzchnią Ziemi. Macierz I jest rotacją wokół osi X. Kąt inklinacji może być wyznaczony z użyciem funkcji getInclination(float[]) autor: Krzysztof Bruniecki 12 Rozmiar macierzy rotacji i inklinacji w Androidzie • Macierze są zwracane jako macierze o wymiarach 3x3 lub 4x4, zgodnie z wierszową kolejnością: • W przypadku macierzy o rozmiarze 4x4: • / M[ 0] M[ 1] M[ 2] M[ 3] \ | M[ 4] M[ 5] M[ 6] M[ 7] | | M[ 8] M[ 9] M[10] M[11] | \ M[12] M[13] M[14] M[15] / • Taka macierz może być wykorzystana w funkcjach OpenGL, np.: glLoadMatrixf(float[], int) autor: Krzysztof Bruniecki 13 Rozmiar macierzy rotacji i inklinacji w Androidzie (2) • W przypadku macierzy o rozmiarze 3x3: • / M[ 0] M[ 1] M[ 2] \ | M[ 3] M[ 4] M[ 5] | \ M[ 6] M[ 7] M[ 8] / • Macierze charakteryzują się tym iż ich transpozycje są zarazem macierzami odwrotnymi • Macierze nie nadają się do wykorzystania w przypadkach: – swobodnego spadania urządzenia, – blisko bieguna magnetycznego, • Macierze są obarczone znacznymi błędami gdy – gdy urządzenie przyspiesza (np. w samochodzie), – w przypadku położenia w bliskim sąsiedztwie silnego pola magnetycznego autor: Krzysztof Bruniecki 14 Macierze rotacji i inklinacji w Androidzie – parametry wejściowe • R – jest to macierz 9 liczb typu float, zawiera macierz rotacji (b-m frame) gdy funkcja wraca, może być null • I – jest to macierz 9 liczb typu float, zawiera macierz inklinacji gdy funkcja wraca, może być null • gravity – jest to macierz 3 liczb typu float, zawiera wektor grawitacji wyrażony w układzie urządzenia, można użyć wartości zwróconych przez sensor typu TYPE_ACCELEROMETER • geomagnetic – jest to macierz 3 liczb typu float, zawiera wektor pola geomagnetycznego wyrażony w układzie urządzenia, można użyć wartości zwróconych przez sensor typu TYPE_MAGNETIC_FIELD • Wartość zwracana – true w przypadku sukcesu, false w przypadku błędu, czyli kiedy?, w przypadku błędu macierze wejściowe nie są zmieniane autor: Krzysztof Bruniecki 15 Inklinacja magnetyczna (1) • Inklinacja magnetyczna inaczej nachylenie magnetyczne jest kątem zawartym pomiędzy wektorem natężenia ziemskiego pola magnetycznego a płaszczyzną horyzontu • Inklinacją nazywamy kąt zawarty pomiędzy płaszczyzną poziomą a osią swobodnie zawieszonej igły magnetycznej. Wartość inklinacji zmienia się wraz ze zmianą szerokości geograficznej. W Polsce średnio inklinacja wynosi około +66° (na biegunie magnetycznym 90°, na równiku magnetycznym 0°). Linie łączące na mapie punkty o jednakowej inklinacji nazywamy izoklinami. autor: Krzysztof Bruniecki 16 Inklinacja magnetyczna (2) autor: Krzysztof Bruniecki 17 Omówienie zadań laboratoryjnych (1) Z wykorzystaniem metody public static boolean getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic) Zaimplementować mechanizm przeliczania dowolnego wektora wyrażonego w układzie odniesienia związanym z urządzeniem do lokalnego układu odniesienia związanego z bieżącym położeniem względem Ziemi Wektor wejściowy powinien być podawany przy użyciu interfejsu użytkownika zbudowanego ze standardowych kontrolek (3 x EditText + Button). Wektor wyjściowy powinien być wyświetlany w polu TextView autor: Krzysztof Bruniecki 18 Wyniki rotacji wektora Urządzenie zorientowane zgodnie z lokalnym układem odniesienia autor: Krzysztof Bruniecki Urządzenie zorientowane dowolnie 19