2013-02-14 82 views
1

OH偉大和知識淵博的堆棧溢出,我虛心地請求你的偉大的思想援助...顯示最大值算法?

我使用三個js庫,我需要實現'顯示範圍'按鈕。它會將相機移動到一個位置,以便在相機視圖中可以看到世界上的所有物體(因爲它們當然不會被阻擋)。

我可以找到世界上所有的物體的邊界框,說他們是w0x,w0y,w0z和W1X,w1y,w1z

我如何,考慮到這些以邊界,將相機這樣它會清楚地看到盒子的邊緣?

顯然必須有一個「側」選擇查看...我已經搜索了一個算法無濟於事! 謝謝!

+0

請參閱http://stackoverflow.com/questions/14614252/how-to-fit-camera-to-object/14614736#14614736和http://stackoverflow.com/questions/11274358/adjusting-camera-for-visible三防-JS-形狀 – WestLangley 2013-02-14 22:10:58

回答

1

所以我們假設你選了一張臉。並且您正在選取相機位置,以便相機的視線與其中一個軸平行。

假設臉部具有一定的寬度「w」,並假設您的相機具有水平視場「a」。你想知道的是,距離攝像機應該看到整個寬度的臉部中心的距離「d」。

如果你畫出來,你會看到你基本上有一個等腰三角形,其基礎是長度爲w,角度爲a的頂點。

isoceles triangle

不僅如此,而且頂角的角平分線形成兩個相同的右三角形和它的長度(到基)是我們需要弄清楚的距離。

Trig告訴我們一個角度的正切值是三角形的相反側和相鄰側的比例。所以

tan(a/2) = (w/2)/d 

簡化到:

d = w/2*tan(a/2) 

因此,如果您將相機從邊框的一個部分軸線對齊的距離面對那麼你只需要沿着所選擇的軸移動d距離。

一些注意事項,請確保您使用弧度爲javascript trig函數輸入。此外,如果臉部不是正方形,您可能需要再次計算臉部高度和相機的垂直視場,並選擇更遠的距離。

如果要從任意角度擬合邊界框,則可以使用相同的想法 - 但首先必須找到投影到垂直於攝像機視線的平面上的場景(對齊)邊界框