「向いている」(真の北部または磁気的なものに基づいているかどうかは関係ありません)を計算する必要があります。 iOSデバイスで見ることができるように、CLLocationManager
によって返されたCLHeading
オブジェクトは、対応するプロパティによって真の見出しと磁気見出しの両方を返します。また、これらの値は私の目的には適していないデバイスの上部(デバイスの座標系の正のY軸)に関連していることが非常に簡単にわかります。 私が実際に必要とするのは、私がコンパスを必要としないので、デバイス(Z軸)のスクリーンに関連する面を計算することですが、AGアプリケーションの王です。問題は、デバイスを横向きに回転させて、あなたが向かう方向から見出し値を左または右に得るときです。最後に必要なものです。 私が知っているように、ジャイロスコープの「未加工」データ(オイラー天使の3種類があります)とともに、磁力計の「生」データ(各デバイス軸の128から-128までの値を持つマイクロテラ単位で与えられます) 、回転行列またはクォータニオン)。私が必要とするのは、「見出し」の代わりに「直面」の方向を得るためにどの計算を適用する必要があるのかを知ることです。磁力計とジャイロスコープによる北の計算
2
A
答えて
4
私は少し前にそれを作っています。
-(double)angleYAxisToVector:(CGPoint)vector{
double dX = vector.x;
double dY = vector.y;
if(dY == 0){
if(dX > 0){
return 0.0;
}else{
if(dX < 0){
return 180.0;
}else{
return -1;
}
}
}
double beta = radiansToDegrees(atan(dX/dY));
double angle;
if(dX > 0){
if (dY < 0){
angle = 180 + beta;
}else{
angle = beta;
}
}else{
if (dY < 0){
angle = 180 + beta;
}else{
angle = 360 + beta;
}
}
// NSLog(@"angle = %f, normalized = %f",beta,angle);
return angle;
}
#define degreesToRadian(x) (M_PI * (x)/180.0)
#define radiansToDegrees(x) ((x) * 180.0/M_PI)
#define degreesToRadians(x) degreesToRadian(x)
#define radiansToDegree(x) radiansToDegrees(x)
ハッピーコーディング:同じ質問に対して答えを検索します人のためにここに私の解決策を入れて...
_motionManager = [[CMMotionManager alloc]init];
if (_motionManager.gyroAvailable) {
_motionManager.deviceMotionUpdateInterval = 1.0/20.0;
[_motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMDeviceMotion *motion, NSError *error)
{
CMAcceleration gravity = motion.gravity;
CGPoint tiltVector = CGPointMake(-gravity.x, -gravity.y);
_tiltAngle = [self angleYAxisToVector:tiltVector];
CLLocationDirection heaqding = [[SVSession sharedSession] heading].trueHeading;
double newHeading = fmod(heaqding + _tiltAngle, 360.0);
self.azimuth = degreesToRadian(newHeading);
[self updateLocations]; //this function updates my ui for the new heading
}];
} else {
NSLog(@"No gyroscope on device.");
[_motionManager release],_motionManager = nil;
}
そして、ここでは、この例を理解するのを助けることができるいくつかの追加のスニペットです。 ..
関連する問題
- 1. 向きを見つけるために、加速度計とジャイロスコープと加速度計と磁力計を使用することの違いは何ですか?
- 2. 拡張カルマンフィルター磁力計ヨードリフト
- 3. iPhoneのハードウェア機能:磁力計とジャイロ
- 4. 磁力計と加速度計を使って正確なヨーを計算する
- 5. Android加速度計とジャイロスコープ
- 6. Appleの磁力計付きデバイス?
- 7. 北東と南西のビューポート座標を計算する
- 8. ジャイロスコープデータを得るための加速度計と磁力計のセンサー融合
- 9. ヒュージグラムによる計算の計算
- 10. 加速度計とジャイロスコープ/ Androidの同期
- 11. CSS計算による高さ計算()計算方法
- 12. スマートフォンの磁力計を使って磁気マップを作成する方法は?
- 13. 入力の計算。
- 14. getOrientation関数を使って北と磁北を取得する方法
- 15. mapdist()を使用して北京とニューヨークの距離を計算する
- 16. プロンプトと入力番号の合計と差と積の計算
- 17. Haskellの関数の計算では、電力を計算する
- 18. 計算出力=ナノ?
- 19. JQuery入力計算
- 20. 磁力計データからノイズを除去する
- 21. BlackBerryの磁力計の方向 - どちらの方向?
- 22. IOS加速度計/ジャイロスコープの質問
- 23. テンソル上での数値計算によるグラフの計算?
- 24. Cognosの計算と集計
- 25. ノックアウト計算とカスタムバインディングの計算順序
- 26. デイドリームコントローラの磁力計は含まれていますか?
- 27. ジャイロスコープと磁気センサーを使ってRajawaliカメラを回転する
- 28. テンプレートへの出力計算
- 29. 入力ボックス間の計算
- 30. 電力クエリーのループ計算
コード内のSVSessionは何ですか?私はそれを見つけることができません –
ああ...あなたはそれを見つけることはありません。それは私のクラスの一部です。私は最後の見出しをそこに保管していました。 – Ariel
これは非常に便利です。これを見つける人にとっては、このコードが何をするのかは100%明確ではないかもしれませんが、デバイスが横向きまたは縦向きにかかわらず向き合っているかどうかを調べることを望んでいるなら、これがそうです。 – ratana