2013-02-14 81 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函数输入。此外,如果脸部不是正方形,您可能需要再次计算脸部高度和相机的垂直视场,并选择更远的距离。

如果要从任意角度拟合边界框,则可以使用相同的想法 - 但首先必须找到投影到垂直于摄像机视线的平面上的场景(对齐)边界框