发布于 2013-11-30 23:55:15
不是一个完整的答案,但是一个好的开端是确定适合于大盒子内的最大直径(在一个圆圈中刻上盒子)和小盒子所需的最小直径。这给出了可能性的第一个过滤器。这也告诉你如何在大的盒子内定位小的盒子。
发布于 2013-12-01 17:51:26
如果一个盒子可以装在另一个盒子里,它也可以装,如果盒子有相同的中心。因此,只有旋转是足够的检查,平移是不需要检查。
2D case:表示盒子,X=(2A,2B)和x=(2a,2b)位于(0,0)周围。这意味着X的角落是(+-A, +-B)。
---------(A,B)
|
-----------(a,b)
(0,0) |
-----------(a,-b)
|
---------(A,-B)将x旋转在(0,0)周围,拐角总是在半径为sqrt(a^2+b^2)的圆周C上。如果圆的一部分位于箱体X内,且X内的部分圆弧长度足以在距离2a或2b上放置2个点,则x在X中不能适应。为此,我们需要计算C与x=A和y=B线的交点,并计算这些交叉口之间的距离。如果距离等于或比2a或2b大,则x可以容纳在X中。
3D案例:相似。X=(2A,2B,2C)和x=(2a,2b,2c)位于(0,0,0)周围。旋转x围绕着(0,0,0),所有角都在半径sqrt(a^2+b^2+c^2)的球体上移动。若要查看球面盒相交部分是否有足够的空间,请查找球面与平面x=A、y=B和z=C的交点,并检查是否有足够的空间适合该球面部分上的任意四进制(2a,2b)、(2a,2c)或(2b,2c)。在足够的距离上检查部分边界上的点就足够了。对于这一部分,我不确定是否有效的方法,也许找到‘中心’的交叉口部分,并检查它的距离,边界可以帮助。
发布于 2014-01-11 03:32:39
基本上,您需要检查几种情况,有些是琐碎的,有些则需要最小化搜索。
首先,有4个3平行轴的情况.如果他们中的任何一个通过了(加上@jean的测试),你就合适了。否则,继续进行下一个测试用例:
其次,有182d对角线情况,其中一个轴是平行的,另两个是对角线,有一个角度的自由度。如果平行轴不适合,则丢弃一个情况;否则,找到单个旋转角度的“撞击”度量函数的最小值。然后在那个角度检查是否有任何实际撞击。撞击度量必须是对内盒(4个角)如何停留在外部盒的两个面内的连续测量,允许它们有时在寻找最小撞击角的过程中向外移动。希望( a)有一个可预测的最大极小数,并且希望b)如果有一个可能的拟合,那么在这些极小的一个角度上保证一个适合。
如果这些情况中没有一个不经过撞击,那么就转到更多的3d无平行轴情况,在这里,旋转参数现在是三个角度而不是一个,你必须搜索撞击度量的一个(希望是有限的)最小值,并在那里测试实际撞击。
不太优雅,我想。这类似于另一个线程,询问给定宽度的行能在给定尺寸的2d框中容纳多长时间。我没有考虑平行轴的情况,但是对角线的情况需要解一个四次方程(比二次方程差得多)。如果你想进行分析,而不是寻找撞击度量的最小值,你可能会遇到类似的问题。非平行轴三维对角线情况的解析解可能涉及到解(正确的根)一个更高的方程。
https://stackoverflow.com/questions/20306963
复制相似问题