WinRT, Gyorsulás
Kétségtelen, hogy a saját belső végrehajtási SimpleOrientationSensor osztály olyan eszközt nevezett egy gyorsulásmérő. A gyorsulásmérő méri a gyorsulás, és első pillantásra úgy tűnik, hogy a tájékoztatást a számítógép gyorsítás kevés haszna van. Mindazonáltal, a iskola természetesen a fizika (és pontosabban Newton második törvénye) ismerjük a képlet:
Force egyenlő tömegű alkalommal gyorsulás. Bármilyen tárgy alatt a gravitáció hatására. Leggyakrabban, a számítógép méri a gravitációs erő gyorsulásmérő és reagál a fő kérdés: „Hol a felső és az alsó, ahol?”
Egy gyorsulásmérő működhet közvetlenül a gyorsulásmérő osztályban. Például gyorsulásmérő osztály egy statikus módszerrel a neve megegyezik az osztály SimpleOrientationSensor:
Ha Accelerometer.GetDefault módszer visszaadja null, akkor a számítógép nem rendelkezik egy gyorsulásmérő, illetve a Windows 8 nem ismeri annak létezését. Ha az alkalmazás nem tud megfelelően működni anélkül, hogy egy gyorsulásmérő, értesíti a felhasználót a távollétében.
Bármikor, akkor kap az aktuális érték a gyorsulásmérő:
Hasonló módszert nevezik osztályú SimpleOrientationSensor GetCurrentOrientation. Valószínűleg származó GetCurrentReading értéket érdemes megnézni null. AccelerometerReading osztály definiálja négy tulajdonságok:
AccelerationX típusú kettős
AccelerationY típusú kettős
AccelerationZ típusú kettős
Timestamp típusú DateTimeOffset
Három dupla értékek együtt határozzák meg a háromdimenziós vektor irányát jelzik a Föld képest az eszköz (hamarosan fogunk még beszélni, hogy).
Ez összefüggésben lehet azzal a céllal, gyorsulásmérő eseménykezelő:
Hasonló esemény úgynevezett SimpleOrientationSensor OrientationChanged. Ahogy OrientationChanged, ReadingChanged felvezető fut egy külön téma, így valószínűleg lesz kezelni, mint ez:
AccelerometerReadingChangedEventArgs osztály definiál egy ingatlan nevű Reading típusú AccelerometerReading - ugyanaz, mint a tárgy iránt GetCurrentReading.
Milyen gyakran kell várni ReadingChanged híváskezelő? Ha a számítógép tétlen, akkor nem nevezhető! Emiatt, ha meg kell tudni, hogy a forrása a gyorsulásmérő olvasmányok, hívja GetCurrentReading az elején.
Ha a számítógép mozog, és megváltoztatja a tájékozódás térben, ReadingChanged kezelőt hívja, amikor az érték (némi kritériumok), de nem több, mint az intervallum ezredmásodperc tárolt tulajdonát osztály ReportInterval gyorsulásmérő. Van egy alapértelmezett érték 112; Ezért ReadingChanged módszer az úgynevezett kilenc alkalommal másodpercenként.
Ha szükséges, akkor meg ReportInterval más értéket, de ez nem lehet kevesebb, mint a visszatérési értéke az ingatlan MinimumReportInterval. amely a számítógépen 16 milliszekundum (körülbelül 60 másodpercenként). Kérdezd ReportInterval érték MinimumReportInterval, hogy a legnagyobb mennyiségű adatot; ReportInterval a tulajdonságot nulla visszatérhet az alapértelmezett érték.
Más osztályok Windows.Devices.Sensors érzékelők használja ugyanazt a programozási interfészt gyorsulásmérő. Ezek mindegyike tartalmazza a következő tagokból áll:
statikus módszer GetDefault;
Például módszer GetCurrentReading;
MinimumReportInterval tulajdonság csak olvasható;
Csak SimpleOrientationSensor osztály különbözik a többitől. Ha a számítógép helyhez kötött, ingatlan AccelerationX, AccelerationY és AccelerationZ osztály AccelerometerReading meghatározzák a vektor mutat a Föld középpontja felé. Felvett koordináta vektorok általában félkövérrel típusa: (x, y, z), a vektor eltér a pont (x, y, z) a háromdimenziós térben. A pont meghatározza egy konkrét helyen; vektor határozza meg az irányt és a modul. Természetesen, vektorok és pontok vannak csatlakoztatva: az irányt vektor (x, y, z) az az irány, attól a ponttól (0,0,0), hogy a pont (x, y, z) és az egység vektor hossza ezen intervallum. Azonban, ha ez a vektor nem egy szegmens, és nem kapcsolódik egy meghatározott helyen.
vektor modul számítjuk ki a háromdimenziós formában a Pitagorasz-tétel:
Bármely háromdimenziós vektor létezik egy különleges háromdimenziós koordinátarendszerben, és a vektor nyert AccelerometerReading objektum sem kivétel. Egy tabletta mag táj ezen koordinátarendszer határozza meg a készülék hardver:
Megjegyzés: az Y koordináta értéke növekszik alulról felfelé - ellentétes irányba, hogy általában, ha foglalkoznak kétdimenziós grafika. A pozitív irányát Z levonni a képernyőn a felhasználónak. Ez a koordináta-rendszer gyakran nevezik a „jobbkezes”; Ha elküldi a mutatóujját a jobb keze irányában pozitív értékek X, és az átlagos - abba az irányba, pozitív értékeit Y, akkor a hüvelykujj kell átalakítani, hogy a pozitív értékek a Z tengely Vagy, ha hajlik a ujjak a jobb kéz irányába a forgástengely pozitív X értékek pozitív értékeket tengely F, a hüvelykujj fog mutatni felé pozitív értékeit Z. Ez az elrendezés alkalmas bármely két tengely a sorrendben X, Y. Z: például, ha hajlítsa az ujjak a jobb kéz forgatni a pozitív Y tengely, hogy tegye a fokozatot értékei a Z-tengely, a hüvelykujj kell átalakítani, hogy a pozitív értékek a X tengely
A készülékek a fő iránya a könyvet a szempontból a felhasználó ugyanazt a koordináta-rendszerben:
Egy ilyen koordináta-rendszer mereven csatlakozik a készülékhez, és gyorsulásmérő vektor néz a Föld közepe képest ez a rendszer. Például, ha a tablettát függőlegesen tartott rögzített orientációban, a gyorsulási vektor néz egy olyan irányban, - Y. Modul vektor megközelítőleg egyenlő 1, és a vektor maga kissé eltér (0, -1.0). Amikor a készülék nyugszik egy sík felületen (például, íróasztal) kijelző felfelé, a vektor a környéken (0,0, -1).
1. modul azt jelenti, hogy a vektor egységekben mérjük g - szabadesés nehézségi gyorsulás a Föld felszínén (9,81 m / s 2). A Hold vektor modul lesz egyenlő körülbelül 0,17. Küldje el a tablet egy állam szabadesés (ha nem bánod), és a modul a gyorsulásvektor esik nullára, míg a készülék eléri a talajt.
A következő program AccelerometerAndSimpleOrientation adatait mutatják, gyorsulásmérő és SimpleOrientationSensor osztályok. XAML fájl tartalmaz egy sor TextBlock elemek címkék és az adatokat a kód mögött file:
kód mögött fájl kissé javult az előző. Ha létrehoz egy példányt, vagy gyorsulásmérő SimpleOrientationSensor nem sikerül, a program tájékoztatja a felhasználót róla. Az is kívánatos, hogy a gyorsulásmérő dolgozik, amikor nem használják a programot, hiszen lemeríti az akkumulátort. A program hozzárendeli rakodók felülírni OnNavigatedTo és lekapcsolja őket OnNavigatedFrom. A többi a szerkezet a kód nem nagyon különbözik az előző program:
Itt van az a program a tablet:
Ne legyen attól, hogy a modul kicsit eltér 1. Ez nem az, amit véletlenül jött le a Föld felszínén, csak azt, hogy a gyorsulásmérő nem mindig olyan pontos, mint szeretnénk.
Y és Z koordináták negatív; Ez azt jelenti, hogy a tablettát enyhén megdöntött vissza. Mint már korábban említettük, a függőleges helyzetben vektor tablettát elméletileg egyenlőnek kell lennie a (0, -1.0), és ha ez fekszik vízszintesen képernyő felfelé - elméletileg vektor (0,0, -1). E két helyzet között a lemezt körül forog az X tengely okozva Math.Atan2 módszer az Y és Z értékek kap az elfordulási szöget.
A program futtatása a mobil eszközön, próbálja forgatni a készülék különböző irányokban, és figyeljük a hatást. Jellemzően SimpleOrientationSensor gyorsulásmérő adatok és kapcsolódik a következők:
Az értékek a szenzorok szerint a forgató eszköz
) Kell értelmezni nagyon tág. Gyorsulásmérő vektorok lehetnek igen jelentős, mielőtt eléri azt az értéket, amely megváltoztatja SimpleOrientationSensor.
Sőt, az állandó változás képernyő tájolása néha alaposan bosszantó. Minden alkalommal, amikor változik a képernyő frissítési rövid időre leáll, és a tartalmát a változás nagysága. Valószínűleg te is arra a következtetésre jutott, hogy a program egy gyorsulásmérő hogy megváltoztassuk a képernyő tartalmát is meg kell blokkolni az automatikus tájolás-változáshoz.
Emiatt az összes alább felsorolt programok, a kivitelező van egy egyszerű parancs, mely kijelöli az alapvető tájékozódási mint előnyös:
Ha fut AccelerometerAndSimpleOrientation programot a mobil eszköz, és mozgassa meg gyorsan, az irányt a gyorsulás vektor és a modul is kell változtatni; vektor már nem képviseli a gyorsulás az 1g, középpontja felé irányuló, a Földön. Például, ha az eszköz, hogy húzza élesen balra, a gyorsulási vektor arra irányul, hogy a megfelelő -, de csak abban az időben a gyorsító eszköz. Ha sikerül összehangolni és a stabil utazási sebesség, gyorsulás vektor „nyugodjon meg”, és újra kezdi, hogy pont a Föld középpontjába. Állítsa le a készüléket, és a változás mértéke tükröződni fog a gyorsulásvektor.
Az egyik standard alkalmazások gyorsulásmérő - vízmérték (ács szinten, hogy ellenőrizze a vízszintes felületekre). XAML fájlt hoz létre, négy esetben az ellipszis. Három használják rajz koncentrikus körök, a negyedik mutatja a buborék:
kód mögött a fájl határozza meg az ingatlan értékét DisplayProperties.AutoRotationPreferences DisplayProperties.NativeOrientation. A Windows egyszerűen nincs ok arra, hogy automatikusan megváltoztatja a képernyő tájolását. A program is használja SizeChanged felvezető határozza meg a méreteket és outerCircle halfCircle:
SetBubble módszer gyanúsan egyszerű: tart X és Y komponensek a gyorsulás vektor, és ezeket használja állíthatja be az X és Y koordinátáit a központ a buborék skálázás sugárirányban külső kerületén. De elképzelhető, hogy a tabletta képernyő felfelé vagy lefelé az asztalra. Z koordinátája gyorsulásvektor értéke 1 vagy -1, és mindkét koordináták X és Y jelentése nulla, azaz a buborék található a képernyő közepén. Ez így van.
Most viszont a tabletta, így a képernyő merőleges a talajra. Z-koordináta lesz nulla. Ez azt jelenti, hogy a modul a gyorsulás vektor kiszámítása kizárólag a koordinátái X és Y:
Ez az egyenlet egy kört a síkban; Következésképpen, egy-egy buborék valahol a külső kerületén. A konkrét helyen függ a jelenlegi elfordulási szögét a lapnak a Z tengely
Gyorsulásvektor lefelé irányul, hogy a központ a földre, és a buborékok emelkedni felfelé; ez azt jelenti, hogy az átmenetet egy kétdimenziós képernyő koordináták, meg kell változtatni a jeleket az alkatrészek X és Y a gyorsulási vektor. De ahogy az Y tengely a gyorsulásvektor már fordított kapcsolatban a képernyőn koordinátákat, meg kell változtatni a jel csak X komponenst (az utolsó két sornyi kódot).
Itt a program a tábla Microsoft Surface:
Természetesen a screenshot nem ad ötletet a kaotikus mozgás a buborékok! gyorsulásmérő leolvasott nagyon hozzávetőleges, és egy valós alkalmazásban, meg kell mozgatni egy kicsit elsimítására. Fogunk foglalkozni ezzel a következő két programot!