簡體   English   中英

使用陀螺儀檢測360°iOS設備旋轉

[英]Detect 360° iOS device rotation using gyroscope

我希望我的應用能夠在設備水平握持時檢測設備旋轉。 我可以使用羅盤的讀數,但我相信陀螺儀的偏航值會更准確。 給定偏航讀數,確定360°旋轉(順時針或逆時針)的最佳算法是什么。 它必須是一個完整的360°,不僅僅是將手機在一個方向上旋轉180°,而在相反方向上旋轉180°。

您可以使用CoreMotion來獲得圍繞垂直軸的旋轉。 您需要添加旋轉事件的增量。 每次超過最小值的方向與前一個方向不同時,您將重置起點。 然后當你從這個起點到達正負360度時,你就有了旋轉。

假設您可以在短時間間隔內獲得讀數,並且偏航可以在特定起點處歸零,這是一個想法。 這與另一個答案不同,后者從連續適應的起點檢測整圓。

在這種方法中,我們將當前偏航與之前的偏航進行比較,詢問是否已經通過180度的檢查點或PI 最初,檢查點標志cp_piNO ,並且以任一方向傳遞它以切換其狀態。 請注意,偏航在兩個位置更改其符號,在零點處再次在PI-PI處更改。

假設你的對象有兩個在檢測器的tick s之間持久的屬性, BOOL cp_pi; float prev_yaw; ,我們認為d_yaw小於PI ,越過0,大於PI ,越過你圈子的另一端。 當越過另一端時,我們切換cp_pi cp_pi在穿越0時為YES時,我們保證已經過了整整一圈 - 否則, cp_pi將被切換回NO

-(void)tick
{
    float yaw = [self zeroedYaw];
    if ((fabs(yaw) == PI) || (yaw == 0.0f)) return;

    if (yaw * prev_yaw < 0)
    {
        float d_yaw = fabs(yaw - prev_yaw);
        if (d_yaw > PI)
        {
            cp_pi = ! cp_pi;
        }
        else if (cp_pi)
        {
            // fire detection event
        }
    }
    prev_yaw = yaw;
}

請注意,為了讓我們的生活更輕松,如果yaw坐在其中一個檢查點上,我們將完全跳過探測器功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM