拥有一个 iOS 应用程序,可以在相机视图中实时标记地标(例如建筑物、用户的山脉),即用户在他面前看到的内容。当它笔直时,没有问题并且准确(在合理的 GPS 误差范围内)。当用户倾斜手机时,无论是偏航还是俯仰运动,地标标签也应该相应调整,但我不太清楚做到这一点的最佳方法。
我尝试在图像上下文上使用内置的rotateBy转换,其中midX和midY分别是屏幕宽度和高度的中心位置:
UIGraphicsPushContext(ctx)
ctx.saveGState()
ctx.translateBy(x: midX, y: midY)
ctx.rotate(by: -self.deviceYawAngle)
ctx.translateBy(x: -midX, y: -midY)
...
...
ctx.restoreGState()
UIGraphicsPopContext()
这对于处理“偏航”旋转来说效果很好,但我不确定如何合并俯仰部分,因为直观上它是 3d 而不仅仅是屏幕上的 2d 投影。
我尝试过的另一件事是想象它是一个视锥体并手动进行三角学。例如。对于俯仰旋转,我可以根据俯仰角计算出偏移量。我再次遇到的问题是如何将其与偏航旋转结合起来。
看图