私は単純な問題だと思いました。私は自分の胸にiphoneを着ている被験者を持っています。彼らは数フィート歩いて180度回転する必要がありますが、私はマガジンの方位を使用していますが、コンパスが「転がる」と、つまり359から1または1から359になると、混乱します。私はスイッチやものを入れてみましたが(下のコードを参照してください)、それでも動作しません。私は他の人が前にこれに直面したと確信しています。任意のアイデア、トリック、テクニック?おかげさまで iOSコンパスロールオーバー計算
// Turn completion logic here
if (self.firstTimeInTurnCheckingOne) {
self.firstTimeInTurnCheckingOne = FALSE;
self.startingCompass = newHeading.magneticHeading;
self.lastCompass = newHeading.magneticHeading;
self.currentCompass = newHeading.magneticHeading;
NSLog(@"First time in: %f", self.startingCompass);
}
NSLog(@"Before roll check - start: %f Last: %f current: %f", self.startingCompass, self.lastCompass, self.currentCompass);
// check to see if compass rolled over
if (!self.compassRolled) {
if ((fabs (self.lastCompass - self.currentCompass) > 340)) {
NSLog(@"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@it rolled %f %f", self.lastCompass, self.currentCompass);
self.compassRolled = TRUE;
if (self.currentCompass > self.lastCompass) {
self.currentCompass = self.currentCompass - 360;
self.startingCompass = self.startingCompass - 360;
self.rolledDown = TRUE;
NSLog(@"Rolled Down");
} else {
self.currentCompass = self.currentCompass + 360;
self.startingCompass = self.startingCompass + 360;
self.rolledUp = TRUE;
NSLog(@"Rolled Up");
}
}
}
self.lastCompass = self.currentCompass;
NSLog(@"After roll check - start: %f Last: %f current: %f", self.startingCompass, self.lastCompass, self.currentCompass);
NSLog(@"Difference: %f", fabs(self.startingCompass - self.currentCompass));
if (!self.turnOneComplete) {
if ((fabs (self.startingCompass - self.currentCompass)) > 120) {
NSLog(@"Turn Calc: %f", (fabs (self.startingCompass - self.currentCompass)));
NSLog(@"Turn One Complete");
self.turnOneLabel.hidden = NO;
self.turnOneComplete = TRUE;
self.compassRolled = FALSE;
self.startingCompass = newHeading.magneticHeading;
self.lastCompass = self.startingCompass;
self.currentCompass = self.startingCompass;
NSLog(@"Turn One complete setup: %f", self.startingCompass);
} else {
// do something here
}
ありがとうございました。私はまだコンパスが転がったとき何をすべきかに固執しています。私はあなたの提案を理解していますが、固執ポイントはロールオーバです - コンパスが359から1になるとき、アキュムレータ変数を2増分します。 – SlimPickens
359から1になるのはなぜですか?それは0を通過してはいけませんか?時計が11:59から12:01にジャンプしない – aednichols
はい、最初にゼロになります。私はちょうど例を使用していた – SlimPickens