我试着把不同尺寸的长方体定位在一起,这样它们之间的接触面积就最大化了。
以一种蛮力的方式,我在寻找一个可能的位置,让每个长方体在空间中,不与任何其他长方体相交。我使用java 3d的BoundingBox类实现了这一点,其中可以检查给定的框是否与其他框的给定集合相交。现在我得到了很多可能的位置,我需要从中选择一个与其他盒子接触面积最大的。
我的问题是我不知道如何有效地计算这个面积。一个小例子…
框1:左下点X=0,Y=0,Z=0;右上点X=10,Y=10,Z=10
框2:左下点X=10,Y=0,Z=0;右上点X=15,Y=5,Z=5
框3具有与框1相同的尺寸,并且应该以最大接触面积定位。
在本例中,框3的一侧与框1的右侧(框2所在的位置)以外的任何位置匹配的所有位置都是最优解。
如果有人有主意,甚至有办法,我会很高兴的。如果免费图书馆不是很大的话,我也很高兴。
谢谢!
最佳答案
依次考虑每对潜在的接触面。
将盒子2放在与盒子1接触的任何地方。然后递归搜索。对于每一个位置,你确定所有相交的长方体,然后找到最小的上下左右移动,这将防止与其中一个相交的长方体相交。这就建立了四个新的搜索位置。然后你也可以从中锻炼出来。
要澄清的是,如果向左移动,则会找到相交长方体最右边的左边面,然后移动,使该面不再相交。其他的长方体可能仍然会相交,但我们会递归地离开它们。
如果没有交叉口,则有一个停车位置,并记下该区域并继续搜索。
如果一个动作让你无法触摸到原来的盒子,你就不会沿着这条路线继续探索下去。
对于每一个面,您都可以发现没有位置是可能的,或者至少有一个与该面的接触最大。
然后对其他5个面重复该过程。