algorithm - 人工地平线的正确翻译

标签 algorithm math 3d

我想画一个人造地平线。 View 的中心将代表完美的水平 View ,滚动旋转水平线并俯仰向上或向下移动。

问题是:在给定俯仰角的情况下,向上或向下(俯仰)平移地平线的正确计算是什么。

我的猜测是,这可能取决于人们为假设的相机假设的 FOV 角度,因此这个角度需要成为所寻求算法中的一个因素。理想情况下,我会计算出 iPhone/iPad 摄像头的这个角度,这样如果您将设备放在您面前并朝地平线看,人造地平线就会与实际地平线对齐。

到目前为止,我一直在猜测偏移量,但我想知道确切的公式。

最佳答案

尝试 horizo​​n_offset/(screen_height/2)=tan(pitch)/tan(vertical_FOV/2)。

看图,公式自行推导

the picture
(来源:zwibbler.com)
.

更新 我混淆了两个角度。一个是相机的FOV角度,另一个是屏幕的视角。这是两个不同的东西。后者取决于观看距离。您可能必须估计此距离,并调整放大倍数和/或焦距,以使屏幕上可见的物体与肉眼可见的相同物体具有相同的角度大小。 (对于我的特定手机,在 5 倍变焦后,如果用户将手一直伸到手机前,您需要将图像再放大大约 3 倍)。则两个角度相同,公式成立。

如果您想引入放大(即屏幕上的对象与现实生活中的对象大小不同),请将水平偏移量乘以放大系数。

更新 2 当考虑到观看距离时,屏幕尺寸抵消了,偏移量简单地变为 viewing_distance*tan(pitch_angle)(单位放大)。

关于algorithm - 人工地平线的正确翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14099158/

相关文章:

java - 二叉树仅在左侧添加节点。我怎样才能让它在根节点的左边和右边都工作?

c++ - 使用通配符生成 Knuth–Morris–Pratt 前缀表

algorithm - 查找存储在k台计算机上的k个数组中的最大k个数字

math - float 学有问题吗?

python - Python 3 中 float 的精确累积和

java - 关于strictfp和StrictMath的疑问

c++ - 绕轴 3D 旋转的说明。 (简单编码)

wolfram-mathematica - Mathematica Graphics3D中的阴影

algorithm - 交换整数效率

c - c中3d数组的总和值