ПредишенСледващото

Безспорно във вътрешното си реализация SimpleOrientationSensor клас се отнася до устройство, наречено акселерометър. Акселерометърът измерва ускорението, и на пръв поглед изглежда, че от информацията на компютъра ускорението от голяма полза. Въпреки това, от училище, разбира се на физиката (и по-специално, от втория закон на Нютон) ние сме запознати с формулата:

Force е равна на масата пъти ускорение. Всеки предмет е под влиянието на гравитацията. Най-често на компютъра измерва силата на гравитацията, акселерометър и отговаря на основния въпрос: "Къде върха и където дъното"

С акселерометър може да работи директно чрез класа акселерометър. Например акселерометър клас с помощта на статичен метод със същото име като SimpleOrientationSensor клас:

Ако метод Accelerometer.GetDefault връща нула, а след това на компютъра не е оборудван с акселерометър, или Windows 8 не е наясно с неговото съществуване. Ако молбата не може да функционира правилно без акселерометър, уведомява потребителя за негово отсъствие.

По всяко време можете да получите текущата стойност на акселерометъра:

Подобен метод се нарича клас SimpleOrientationSensor GetCurrentOrientation. Вероятно произлиза от стойността GetCurrentReading си струва да пробвате да нула. AccelerometerReading клас определя четири свойства:

тип AccelerationX двойно

тип AccelerationY двойно

тип AccelerationZ двойно

Клеймо тип DateTimeOffset

Три двойни стойности заедно определят триизмерна вектор указваща посоката на Земята по отношение на устройството (скоро ще говорим повече за това).

Тя може да бъде свързана с обект Акселерометър събитие манипулатор:

А подобно събитие, наречено SimpleOrientationSensor OrientationChanged. Както OrientationChanged, ReadingChanged манипулатор работи в отделна нишка, така че най-вероятно ще бъде да се справя по този начин:

AccelerometerReadingChangedEventArgs клас определя собственост с име тип четене AccelerometerReading - същото като обектът се връща GetCurrentReading.

Колко често трябва да се очаква, ReadingChanged манипулатор обаждане? Ако компютърът не се използва, тя не може да се нарече! Поради тази причина, ако имате нужда да се знае източникът на показанията на акселерометъра, обадете GetCurrentReading в началото.

Ако компютърът се премества и променя своята ориентация в пространството, ReadingChanged манипулатор се нарича, когато стойността (с някои критерии), но не повече от интервал в милисекунди, която се съхранява в класа на имот ReportInterval акселерометър. Имам стойност по подразбиране е 112; следователно, метод ReadingChanged наречен около девет пъти в секунда.

Ако желаете, можете да настроите ReportInterval различна стойност, но това не трябва да бъде по-малка от стойността на връщане на имота MinimumReportInterval. което на компютъра ми е 16 милисекунди (около 60 пъти в секунда). Попитайте ReportInterval стойност MinimumReportInterval, за да получите максималния размер на данни; ReportInterval зададете собственост на нула, за да се върне към стойността по подразбиране.

Други класове Windows.Devices.Sensors сензори използват един и същ програмен интерфейс като акселерометър. Всички те съдържат в състав:

статичен метод GetDefault;

метод например GetCurrentReading;

MinimumReportInterval имот само за четене;

Само SimpleOrientationSensor клас е различен от останалите. Ако компютърът е в покой, имоти AccelerationX, AccelerationY и AccelerationZ клас AccelerometerReading определят вектора, насочени към центъра на Земята. Записаните координира вектори обикновено са с удебелен шрифт: (X, Y, Z), векторът е различна от точката (X, Y, Z) в триизмерното пространство. Точката определя специфично местоположение; вектор определя посоката и модула. Разбира се, вектори и точки са свързани: посоката на вектор (X, Y, Z) е посока от точката (0,0,0) на точката (X, Y, Z) и вектор единица е дължината на този интервал. Въпреки това, такъв вектор не е сегмент и не е свързана с определено място.

вектор модул се изчислява от триизмерна форма на Питагоровата теорема:

Всеки триизмерна вектор съществува в определена триизмерна координатна система, както и вектора, получен чрез AccelerometerReading обект не е изключение. За сърцевина на таблетката пейзаж тази координатна система се определя от хардуера на устройството:

WinRT, Ускорение

Забележка: Y координата се увеличава от дъното нагоре - посока, обратна на тази, обикновено се използва, когато се занимават с двуизмерни графики. Положителната посока Z, изготвен от екрана на потребителя. Тази координатна система често се нарича "дясна ръка"; Ако изпратите показалеца на дясната си ръка по посока на положителните стойности на X, а средната - в посока на положителните стойности на Y, тогава палецът ще бъде преобразувана в положителни стойности на Z. на оста Или, ако се огъват пръстите на дясната си ръка по посока на оста на въртене положителен X стойности за положителни стойности ос F, палецът ще точка към положителни стойности на Z. Това разположение е подходящ за всяка двойка оси от порядъка на X, Y Z: например, ако се огъват пръстите на дясната ръка да се върти от положителен ос Y да се постави речника, стойности на Z-оста, палецът ще бъде превърнат в положителни стойности на оста X.

В устройства с основната ориентация на книгата от гледна точка на потребителя на използва същата координатна система:

WinRT, Ускорение

Такава система за координиране на неподвижно свързани към устройството за оборудване и акселерометър вектор е изправена пред центъра на Земята спрямо тази система. Например, когато таблетката се държи вертикално във фиксирана ориентация, вектор ускорение е обърната в посока - Y. Модул вектор приблизително равно на 1, и самия вектор леко се отклонява от (0, -1.0). Когато единицата лежи върху равна повърхност (например, бюро) екран нагоре, векторът е в близост (0,0, 1).

Модул 1 означава, че векторът се измерва в единици за грам - свободно падане земно ускорение на земната повърхност (9,81 м / сек 2). вектор модул Луна ще бъде равна на около 0,17. Изпратете вашия таблет в състояние на свободно падане (ако нямате нищо против) и модула на вектора на ускорението ще падне до нула, докато устройството се удари в земята.

Данните за следващия програмен AccelerometerAndSimpleOrientation дисплеи от акселерометъра и SimpleOrientationSensor класове. XAML файл съдържа набор от TextBlock елементи за етикети и данни от кода-зад файл:

кодово зад файл е леко подобрена в сравнение с предходната. Ако създадете копие или акселерометър SimpleOrientationSensor не успее, програмата информира потребителя за това. Желателно е също така, че акселерометъра работи в момента, когато тя не се използва от програмата, тъй като тя батерията пада. Програмата определя манипулатори да отменят OnNavigatedTo и ги изключва OnNavigatedFrom. Останалата част от структурата на кода не е много различна от предишната програма:

Ето програмата на таблета:

WinRT, Ускорение

Не се притеснявам, че модулът е малко по-различно от 1. Това не е нещо, което случайно влезе в земната повърхност, но само, че акселерометъра не винаги е толкова точна, колкото бихме искали.

Както Y и Z координати са отрицателни; Това означава, че таблетът е леко наклонена назад. Както вече споменахме, вертикално положение вектор таблетка теоретично трябва да бъде равна на (0, -1,0), и ако той лежи хоризонтално скриниране до - теоретично вектор е (0,0, 1). Между тези две позиции плаката се върти около оста X. По причинява метод Math.Atan2 с Y и Z стойности, които получавате на ъгъла на завъртане.

Стартирайте програмата на мобилното устройство, опитайте да завъртите устройството в различни ориентации и наблюдавайте ефекта. Обикновено данни SimpleOrientationSensor акселерометъра и свързан, както следва:

Стойностите на сензорите съгласно устройството за въртене

) Следва да се тълкува много широко. Акселерометър вектори варират доста значително, преди да достигне стойността, която променя SimpleOrientationSensor.

Освен това, постоянна промяна на ориентацията на екрана понякога старателно досадно. Всеки път, когато промените актуализацията на екрана спира за кратко, и съдържанието на промяната в размера. Вероятно, вие също ще дойде до заключението, че програмата използва акселерометър, за да промените съдържанието на екрана трябва да блокира автоматично смяната на ориентация.

Поради тази причина, във всички програми, изброени по-долу, в конструктора има една проста команда, която определя основната ориентация като за предпочитане:

Ако изпълните AccelerometerAndSimpleOrientation програма на мобилното устройство и да го движи бързо, посоката на вектора на ускорение и модула също ще бъде променен; вектор вече не представлява ускоряване на 1 g, насочени към центъра на Земята. Например, ако устройството е да дръпне рязко наляво, вектора на ускорението е насочено към правото - но само в момента на устройството за ускоряване. Ако успеете да се слеят и поддържа стабилна скорост на движение, ускорение вектор "успокои" и отново започва да сочи към центъра на Земята. Спиране на устройството и скоростта на промяна ще бъде отразена във вектора ускорение.

Един от акселерометъра на стандартни приложения - нивелир (дърводелски нивелир, за да проверите хоризонтални повърхности). XAML файл създава четири копия на елипса. Три са използвани за изготвяне концентрични кръгове, а четвъртата показва балон:

кодово зад файл определя DisplayProperties.NativeOrientation стойността имот DisplayProperties.AutoRotationPreferences. В Windows просто няма причина да се промени автоматично ориентацията на екрана. Програмата също така използва SizeChanged манипулатор да определите размерите и outerCircle halfCircle:

SetBubble метод изглежда подозрение проста: отнема X и Y компоненти на вектора на ускорение и ги използва за задаване на X и Y координатите на центъра на балона с мащабиране радиално външната обиколка. Но представете си, че екрана на таблета е нагоре или надолу върху масата. Z координата на вектора на ускорението е равно на 1 или -1, и двете координати X и Y са нула, т.е. балон, разположен в центъра на екрана. Точно така.

Сега обърнете таблета, така че на екрана е перпендикулярна на земята. Z-координатна става нула. Това означава, че модулът на вектора на ускорение се изчислява само на координатите х и у на:

Това уравнение описва кръг на самолета; следователно, на балон е някъде върху външния периметър. специфичното си местоположение зависи от текущия ъгъл на въртене по отношение на плочата на оста Z.

Ускорение вектор е насочен надолу към центъра на земята, и мехурчета се издигат нагоре; това означава, че за прехода към двуизмерен екран координира, ние трябва да се променят знаците на компоненти за Х и У на вектора на ускорението на. Но тъй като Y-оста на вектора на ускорението вече е обърнат във връзка с координатите на екрана, трябва да смените знака само компонент X (последните два реда код).

Ето програмата на таблета Microsoft Surface:

WinRT, Ускорение

Разбира се, на екрана не дава представа за хаотичното движение на мехурчетата! акселерометъра четения са много приблизителни, а в реално прилагане, трябва да се движат по-малко, за да се изгладят. Ние ще се справим с това през следващите две програми!

Подкрепете проекта - споделете линка, благодаря!