使用iPhone指南针确定当前位置与麦加的角度

4

我有一个关于古尔布拉方向的问题,我正在开发一款iPhone应用程序,它将显示北方和古尔布拉方向。我使用CLLocationManager显示北方方向,并通过CLHeading更新为newHeading.magneticHeading。我使用以下代码显示古尔布拉方向:

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);

所以,我能够获取角度,但是当我旋转设备时它并不会更新角度。有人可以帮助我吗?我知道我需要在方向上做一些处理,但我不知道该怎么做。


请查看此链接:http://codecanyon.net/item/ios-qibla-direction-objective-c/15523429 - DI Developers
2个回答

1

我可能会因为我对iOS一无所知而在这个答案上失分,但是我相信atan返回弧度值,而CGAffineTransformMakeRotation也接受弧度作为参数,所以转换qibAngle * M_PI /180是不必要的。

你可能还想重新命名你的帖子,因为大多数人不知道Qibla是什么,也不会意识到它与数学和iOS有关。我只是因为听说计算通向麦加的正确方向是一个很有趣的数学问题才来看的。


谢谢您的回复,我已经删除了 * M_PI /180,但是当我旋转设备时它仍然没有旋转,您能帮我解决如何根据方向更新角度的问题吗? - Charan

1

我假设你发布的代码计算了当前位置地理北极和指向麦加方向之间的角度。现在你需要考虑用户的朝向。

例如,假设用户位于麦加正西方向,而用户面向正东方向。由于 tan 返回 +/-90 度,因此 qibla 角度必须为 -90 度。现在调整应该很明显:你需要从相对于地理北极的 qibla 角度 (-90) 中减去 90 度,得到 (-180) 度,这是用户需要转动的角度以面向麦加。

简单来说,你需要“撤消”用户的偏差,方法是从 qibla 角度中减去用户的朝向,这是相对于地理北极的。

数学问题解决后,现在你需要观察朝向变化,并在朝向变化时重新计算 qibla 角度。最后,请确保使用 trueHeading 属性。


谢谢,我已经减去了(-90),你能帮我更新我的Qibla角度吗?相对于真实航向,你能发布任何代码吗? - Charan
1
为什么你要减去-90?你应该阅读我的答案并尝试理解它,而不是盲目地应用我所说的内容。 - freespace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接