我有一个关于朝拜方向的问题,我正在构建一个 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);
所以,在这里我得到的角度,但它不会更新的角度,当我旋转设备,任何人都可以帮助我,我知道我需要做一些事情的标题,但我不知道该怎么办?
我假设您发布的代码计算了当前位置的地理北和朝向麦加的方向之间的角度。
例如,假设用户位于麦加直接向西,而用户直接面向东方。由于tan
返回 + /-90 度,朝拜角度必须为-90 度。现在调整应该很明显:您需要从相对于地理北(-90)的朝拜角度减去 90 度,以达到(-180)度的麦加面顺序。
简而言之,您需要“撤消”用户的偏差,并且可以通过从 qibla 角度减去用户的航向(相对于地理北)来做到这一点。
随着数学的发展,现在您需要观察航向变化并在航向变化时重新计算 qibla 角度。最后,请确保使用trueHeading
属性。
我可能会在这个答案上失分,因为我对 ios 一无所知,但是,我相信atan returns a value in radians和CGAffineTransformMakeRotation takes it's argument in radians as well,所以不需要转换qibAngle * M_PI /180
。
您可能还想重新标题,因为大多数人不知道 Qibla 是什么,也不会意识到它与数学和 iOS 有关。我只是看了看,因为我听说计算麦加的正确方向是一个整洁的数学问题。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(75条)