我想为我的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
直觉上似乎应该有一个相当简约的解决方案来解决这个问题,但我想不出来......任何想法?
注意:长方体必须与轴对齐
答案 0 :(得分:1)
您对长方体的定义是否可以取决于您最初选择的基础?
如果所有长方体都从原点开始然后向每个轴的正方向移动,那么交点不仅仅是每个方向上所有坐标的最小值吗?即intersection = min(left1,left2),min(right1,right2)等。不确定我究竟知道你的长方体是什么,或者你想要它们是什么。
或者如果您的长方体在每个方向上对齐(看起来它们来自您的定义),那么您可以使用新的长方体:
bottom = max(bottom1, bottom2)
top = min(top1, top2)
left = right_most(left1, left2)
等...