Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 显示范围算法?_Javascript_Algorithm_Graphics_Rendering_Three.js - Fatal编程技术网

Javascript 显示范围算法?

Javascript 显示范围算法?,javascript,algorithm,graphics,rendering,three.js,Javascript,Algorithm,Graphics,Rendering,Three.js,哦,伟大和博学的堆栈溢出,我谦恭地请求您的伟大的头脑帮助 我正在使用three js库,我需要实现一个“show extents”按钮。它会将相机移动到一个位置,使世界上的所有对象在相机视图中都可见(当然,假设它们没有被遮挡) 我可以找到世界上所有对象的边界框,比如说它们是w0x,w0y,w0z和w1x,w1y,w1z 在给定这些边界的情况下,如何放置摄影机,使其能够清晰地看到长方体的边缘 显然,必须选择一个“侧面”来查看……我在谷歌上搜索了一个算法,但没有结果! 谢谢 假设你选了一张脸。并且您

哦,伟大和博学的堆栈溢出,我谦恭地请求您的伟大的头脑帮助

我正在使用three js库,我需要实现一个“show extents”按钮。它会将相机移动到一个位置,使世界上的所有对象在相机视图中都可见(当然,假设它们没有被遮挡)

我可以找到世界上所有对象的边界框,比如说它们是w0x,w0y,w0z和w1x,w1y,w1z

在给定这些边界的情况下,如何放置摄影机,使其能够清晰地看到长方体的边缘

显然,必须选择一个“侧面”来查看……我在谷歌上搜索了一个算法,但没有结果!
谢谢

假设你选了一张脸。并且您正在拾取相机位置,以便相机的视线与其中一个轴平行

假设脸部有一定的宽度“w”,假设你的相机有一个水平视野“a”。你想知道的是,距离脸部中心的距离是多少,相机应该看到整个宽度

如果你把它画出来,你会看到基本上有一个等腰三角形,它的底部是长度w,顶点是角度a

不仅如此,顶角的角平分线形成了两个相同的直角三角形,它的长度(到底部)是我们需要计算的距离

Trig告诉我们,一个角的切线是倒三角形和三角形相邻边的比值。所以

tan(a/2) = (w/2) / d
简化为:

d = w / 2*tan(a/2)
因此,如果要将相机放置在距离一个边界框面一定的轴对齐距离处,则只需沿选择的轴移动d距离

需要注意的是,请确保对javascript trig函数输入使用弧度。此外,如果你的脸不是正方形的,你可能需要再次计算你的脸高度和相机的垂直视野,并选择更远的距离


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

,因此假设您已拾取一个面。并且您正在拾取相机位置,以便相机的视线与其中一个轴平行

假设脸部有一定的宽度“w”,假设你的相机有一个水平视野“a”。你想知道的是,距离脸部中心的距离是多少,相机应该看到整个宽度

如果你把它画出来,你会看到基本上有一个等腰三角形,它的底部是长度w,顶点是角度a

不仅如此,顶角的角平分线形成了两个相同的直角三角形,它的长度(到底部)是我们需要计算的距离

Trig告诉我们,一个角的切线是倒三角形和三角形相邻边的比值。所以

tan(a/2) = (w/2) / d
简化为:

d = w / 2*tan(a/2)
因此,如果要将相机放置在距离一个边界框面一定的轴对齐距离处,则只需沿选择的轴移动d距离

需要注意的是,请确保对javascript trig函数输入使用弧度。此外,如果你的脸不是正方形的,你可能需要再次计算你的脸高度和相机的垂直视野,并选择更远的距离

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