如何计算两个长方体的交点

时间:2011-12-12 17:02:20

标签: ruby math geometry

我想为我的Cuboid类编写一个方法,它返回由两个长方体的交集定义的长方体。

长方体在内部由原点和终点表示,使得从原点到终点的向量在所有维度上都必须是正的。

作为一个起点(也许可能没有帮助)下面的方法(在ruby中)确定两个长方体是否相交。

def intersects? other_cuboid
  return not( self.top < other_cuboid.bottom ||
              self.bottom > other_cuboid.top ||
              self.left > other_cuboid.right ||
              self.right < other_cuboid.left ||
              self.front < other_cuboid.back ||
              self.back > other_cuboid.front )    
end

直觉上似乎应该有一个相当简约的解决方案来解决这个问题,但我想不出来......任何想法?

注意:长方体必须与轴对齐

1 个答案:

答案 0 :(得分:1)

您对长方体的定义是否可以取决于您最初选择的基础?

如果所有长方体都从原点开始然后向每个轴的正方向移动,那么交点不仅仅是每个方向上所有坐标的最小值吗?即intersection = min(left1,left2),min(right1,right2)等。不确定我究竟知道你的长方体是什么,或者你想要它们是什么。

或者如果您的长方体在每个方向上对齐(看起来它们来自您的定义),那么您可以使用新的长方体:

bottom = max(bottom1, bottom2)
top = min(top1, top2)
left = right_most(left1, left2)

等...