我想画一个人造地平线。 View 的中心将代表完美的水平 View ,滚动旋转水平线并俯仰向上或向下移动。
问题是:在给定俯仰角的情况下,向上或向下(俯仰)平移地平线的正确计算是什么。
我的猜测是,这可能取决于人们为假设的相机假设的 FOV 角度,因此这个角度需要成为所寻求算法中的一个因素。理想情况下,我会计算出 iPhone/iPad 摄像头的这个角度,这样如果您将设备放在您面前并朝地平线看,人造地平线就会与实际地平线对齐。
到目前为止,我一直在猜测偏移量,但我想知道确切的公式。
最佳答案
尝试 horizon_offset/(screen_height/2)=tan(pitch)/tan(vertical_FOV/2)。
看图,公式自行推导
(来源:zwibbler.com)
.
更新 我混淆了两个角度。一个是相机的FOV角度,另一个是屏幕的视角。这是两个不同的东西。后者取决于观看距离。您可能必须估计此距离,并调整放大倍数和/或焦距,以使屏幕上可见的物体与肉眼可见的相同物体具有相同的角度大小。 (对于我的特定手机,在 5 倍变焦后,如果用户将手一直伸到手机前,您需要将图像再放大大约 3 倍)。则两个角度相同,公式成立。
如果您想引入放大(即屏幕上的对象与现实生活中的对象大小不同),请将水平偏移量乘以放大系数。
更新 2 当考虑到观看距离时,屏幕尺寸抵消了,偏移量简单地变为 viewing_distance*tan(pitch_angle)
(单位放大)。
关于algorithm - 人工地平线的正确翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14099158/