2012-12-31 29 views
6

我想畫一個人造地平線。視圖的中心代表完全水平的視圖,滾動旋轉水平線和俯仰向上或向下移動。正確翻譯人造地平線

現在的問題是:給定俯仰角的平移線向上或向下(俯仰)平移線的正確計算是什麼。

我的猜測是,這可能取決於人們假設攝像機假設的視角,所以這個角度需要是算法中的一個因素。理想情況下,我會想出iPhone/iPad攝像頭的這個角度,以便在您將設備放在您面前並朝向地平線時,人造地平線將與實際地平線一致。

到現在爲止我一直在猜測偏移量,但我想要精確的公式。

+0

試試'horizo​​n_offset /(screen_height/2)= tan(pitch)/ tan(vertical_FOV/2)'。 [見](http://zwibbler.com/shared/3120.png)。 –

+0

你可以把它作爲一個單獨的答案來寫,以便我能接受它,如果它證明是正確的?可能還闡述了你如何得出公式? – Cocoanetics

+0

確切的答案取決於知道用戶距離屏幕有多遠,以及它被保持的角度 - 如果屏幕沒有完全看到90度,那麼設備的角度不會轉化爲角度的視野。因此,六分儀和象限有不止一個視線排列。飛機上的人造視野反而會顯示一個校準刻度,因此他們不需要這些信息。 –

回答

3

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

看看圖片,公式自動產生。

the picture http://zwibbler.com/shared/3120.png

更新我有兩個角度混在一起。一個是相機的FOV角度,另一個是屏幕的可視角度。這是兩件不同的事情。後者取決於觀看距離。您可能必須估計此距離,並調整放大倍率和/或焦距,以使屏幕上可見的物體與用肉眼可見的相同物體具有相同的角度大小。 (使用我的特定手機,如果用戶一直向前伸出手機,則需要在5倍變焦後將圖像放大約3倍)。然後這兩個角度是相同的,並且公式起作用。

如果要引入放大倍數(即屏幕上的物體與現實生活中的物體具有不同的大小),請將放大倍數乘以水平偏移。

更新2當考慮視距時,屏幕尺寸被抵消,並且偏移量簡單地變爲viewing_distance*tan(pitch_angle)(具有單位放大率)。

+0

如果我改變了球場,地平線會線性移動還是越快,我越遠離水平線?如果我將設備滾動90度,屏幕高度變寬,該怎麼辦?假設相同的因素?我是否通過乘以(screen_height/2) – Cocoanetics

+0

來解決horizo​​n_offset的公式?另外,垂直視場不會與水平視場相同嗎? – Cocoanetics

+0

現在,當我再次查看時,屏幕尺寸將被抵消,偏移量將簡單變爲viewing_distance * tan(pitch_angle)(單位放大倍數)。 –