2012-03-19 9 views
4

Qiblaの方向に関する質問があります。北向きとQiblaの両方の方向を示すiPhoneアプリケーションを作成しています。CLLocationManagerの助けを借りて北向きを表示しています誰も缶、newHeading.magneticHeadingとしてCLHeadingとのこと、と私は角度を取得していますここでは、iPhoneコンパスの現在の位置からのメックの角度

double A = MECCA_LONGITUDE - lon; 
double b = 90.0 - lat; 
double c = 90.0 - MECCA_LATITUDE; 
NSLog(@"tan -1(sin(%f)/(sin(%f) * cot(%f) - cos(%f) * cos(%f)))", A, b, c, b, A); 
double qibAngle = atan(sin(A) /(sin(b) * (1/tan(c)) - cos(b) * cos(A))); 
NSLog(@"qib Angle- %f",qibAngle); 
qibla.transform = CGAffineTransformMakeRotation(qibAngle * M_PI /180); 

だから、次のコードでキブラの方向を示すが、私は、デバイスが回転するときには、角度を更新しません。助けてください、私は見出しで何かする必要があることを知っていますが、私は何をすべきかわかりません?

+0

このリンクを確認してください。 http://codecanyon.net/item/ios-qibla-direction-objective-c/15523429 –

答えて

1

投稿したコードは、地理的北と現在地のメッカ方向の角度を計算すると仮定します。今すぐ行う必要があるのは、ユーザーの見出しを考慮に入れることだけです。

たとえば、ユーザーがメッカが直接西に拠点を置いており、ユーザーが東に直接向いていると仮定します。 tanは+/- 90度を返すので、qiblaの角度は-90度でなければなりません。今度は調整が必要です。地理北(-90度)のqibla角から90度を引いて(-180度)にする必要があります。これは、メッカに向かうためにはどのくらい回る必要があるかです。

単純に言えば、ユーザーの偏差を元に戻す必要があります。これを行うには、qiblaの角度から地理的な北に相対的なユーザーの見出しを差し引きます。

途中で数式を変更すると、見出しが変更されたときに見出しの変更を観察し、qiblaの角度を再計算する必要があります。最後に、trueHeadingプロパティを使用してください。

+0

ありがとう、私は(-90)を差し引いたことがありますか?私はどのように私はqibla wrt本当の見出しの私の角度を更新することができます、あなたは任意のコードを投稿できますか? – Charan

+1

なぜあなたは-90を引いていますか?あなたは私の答えを読んで、私が言っていることを盲目的に適用するのではなく、理解してください。 – freespace

1

私は、IOSについて全く何も知らないので、私はおそらくこの回答にポイントを失うつもりです、しかし、私はatan returns a value in radiansを信じて、そしてCGAffineTransformMakeRotation takes it's argument in radians as well、その変換qibAngle * M_PI /180は必要ありません。

ほとんどの人がQiblaが何であるか分からず、数学とiOSに関することを理解していないので、あなたの記事のタイトルを変更することもできます。私は、メッカの正しい方向を計算することは、きちんとした数学の問題であると聞いたので、私は見ただけです。

+0

返信いただきありがとうございます。私は* M_PI/180を削除しましたが、デバイスを回転させている間も回転していません。見出しに沿って角度を更新する方法を教えてください。 – Charan

関連する問題