【问题标题】:Correct Translation for artificial horizon人工地平线的正确翻译
【发布时间】:2012-12-31 08:10:41
【问题描述】:

我想画一个人造地平线。视图的中心将代表完美的水平视图,滚动旋转水平线并上下移动它。

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

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

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

【问题讨论】:

  • 试试horizon_offset/(screen_height/2)=tan(pitch)/tan(vertical_FOV/2)See.
  • 你能把它写成一个单独的答案,这样如果结果是正确的,我可以接受吗?可能还详细说明了你是如何得出这个公式的?
  • 一个准确的答案取决于知道用户离屏幕有多远,以及它被握住的角度——如果屏幕不是以 90 度精确观看,那么设备的角度不会转化为地平线的角度。因此,六分仪和象限的排列不止一处。飞机中的人工地平线会显示一个校准的俯仰比例,因此它们不需要此类信息。
  • iphonefaq.org/archives/971159 具有 iPhone 相机的焦距。
  • @PeteKirkham 如何从焦距计算角度(以毫米为单位)?那么你会为我的问题建议的公式是什么?

标签: algorithm math 3d


【解决方案1】:

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

看图,公式自己推导出来。


(来源:zwibbler.com
.

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

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

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

【讨论】:

  • 如果我改变了音高,我离水平线越远,水平线会线性移动还是移动得更快?如果我将设备滚动 90 度并因此屏幕高度变宽怎么办?假设相同的因素?我是否可以通过乘以 (screen_height/2) 来求解horizo​​n_offset 的公式
  • 另外,垂直FOV和水平FOV不一样吗?
  • 现在再看时,屏幕尺寸抵消了,偏移量变成了viewing_distance*tan(pitch_angle)(单位放大倍率)。
  • 那么我将如何获得一定数量的像素?因为观看距离将以厘米为单位,对吧?什么是“单位放大倍率”?
  • 你需要知道屏幕的物理像素密度。对于 Android 设备,它位于 DisplayMetrics 结构中。单位放大倍率是放大倍数 1。也就是说,屏幕上的真实物体和它们的图像(在给定距离观看)具有相同的角度大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多