如何计算一个长方体与其相邻长方体的接触面积

时间:2010-12-22 01:37:23

标签: java 3d java-3d area

我正在尝试将不同大小的矩形长方体彼此相邻放置,以使它们之间的接触区域最大化。

以蛮力的方式,我正在寻找一个可能的位置,每个在空间中定位长方体,不与任何其他长方体相交。我使用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具有相同的尺寸,应以最大接触面积定位

在此示例中,Box 3的一侧与Box 1的右侧(Box 2所在的位置)除外的所有位置都是最佳解决方案。

如果有人有想法甚至是解决方案,我会很高兴。如果免费图书馆不是太大,我也很满意。

谢谢!

1 个答案:

答案 0 :(得分:1)

依次考虑每对潜在的触摸面。

将方框2放在与方框1接触的任何地方。然后递归搜索。对于每个位置,您可以识别所有相交的长方体,然后找到向上,向下,向左和向右的最小移动,这将阻止与这些相交的长方体之一的交叉。这建立了四个新的搜索位置。然后你也可以从这些中解决。

为了弄清楚,如果向左移动,则会找到相交的长方体的最左侧面并移动,使面不再相交。其他长方体可能仍会相交,但我们会递归地离开它们。

如果没有交叉路口,则您有一个停靠位置,并记下该区域并继续搜索。

如果移动使得无法触摸原始框,则不会沿着该路径进一步探索。

对于每张脸,你可以发现无法找到任何位置,或者至少有一张脸是否有最大接触面。

然后,您为其他5个面重复此过程。