2012-03-19 268 views
4

我有一個關於朝拜方向的問題,我建立一個iPhone應用程序,它會同時顯示北向和朝拜方向,我顯示與CLLocationManager和更新的幫助下正北方向它CLHeading爲newHeading.magneticHeading,我出朝拜方向與下面的代碼角度麥加從當前位置與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 – 2016-04-01 09:56:18

回答

1

我假設你發佈的代碼計算地理北部和朝向麥加當前位置的方向之間的角度。您現在需要做的就是考慮用戶的標題。

例如,假定用戶位於所以麥加是直接由於西,用戶正面臨着由於直接東。由於tan返回+/- 90度,所以角度角必須是-90度。現在調整應該是顯而易見的:您需要從相對於地理北方(-90)的朝向角度減去90度以達到(-180)度,這是用戶需要轉向以應對麥加的程度。

簡而言之,您需要「撤消」用戶的偏差,並且您可以通過從用戶的方向角度減去用戶的標題(相對於地理北部)來執行此操作。

隨着數學出的方式,現在需要觀察的航向變化和重新計算朝拜角度的航向變化時。最後,請確保使用trueHeading屬性。

+0

謝謝你,我減法(-90)你能幫我嗎?我怎樣才能更新我的角度正確的標題,你可以發佈任何代碼? – Charan 2012-03-19 08:13:26

+1

你爲什麼要減去-90?你應該閱讀我的答案並試着理解它,而不是盲目地運用我所說的話。 – freespace 2012-03-19 08:18:48

1

我可能會失分對這個答案,因爲我知道絕對沒有關於IOS,但是,我相信atan returns a value in radians,並CGAffineTransformMakeRotation takes it's argument in radians as well,所以不需要轉換qibAngle * M_PI /180

您可能還需要重新標題您的文章,因爲大多數人不知道什麼是朝拜,並且不會意識到它是關於數學和iOS。我只看,因爲我聽說計算正確的方向麥加是一個整潔的數學問題。

+0

感謝您的回覆,我已經刪除了* M_PI/180,但它仍然不旋轉,而我正在旋轉我的設備,可以你能幫我解決問題,如何根據標題更新角度。 – Charan 2012-03-19 07:58:09