2011-06-06 35 views
4

我有一个由中心(x,y,z)定义的圆,半径和方向矢量指定了圆所面对的方向。我需要测试这样一个圆与轴对齐的边界框是否相交。为了说明,通过相交,我的意思是如果圆圈描述的区域内的任何点都在边界框内,那么就构成了一个“交集”。3D盒子圆交点

这不适用于游戏,我宁愿不以某种方式近似圆圈。应该可以,但将圆圈视为非常小的圆柱体,如果这使得这更容易处理。

谢谢。

尼克

+0

你是Google for“box circle intersection”吗? – 2011-06-06 22:14:45

+0

不知道你是什么意思的“边界框”。一个“边界框”通常是不相交的... – 2011-06-06 22:16:06

+0

所有的框圈谷歌命中是2D的,而不是一个3D矢量的“圆”。 – 2011-06-06 22:18:56

回答

1

你的圆心和你的向量定义了一个平面;将你的飞机与你的箱子相交(特别是6架飞机组成你的箱子);那会给你一组线段。使用点线最近点算法,确定到您的中心点的每条线段上的最近点;如果该点与您的圆心点之间的距离平方(使用平方距离进行距离比较,速度更快且精确)小于半径的平方,则您的框与圆相交。

注意:这个过程是通用的;使用轴对齐的边界框使得一切都变得更加简单。

+1

谢谢。考虑到飞机是无限的,我首先做了飞机箱相交的测试,然后做了上述。似乎运作良好。 – 2011-06-10 13:36:26

+0

很高兴能够提供帮助,是的,首先是飞机箱交叉测试是一个不错的优化。 – 2011-06-10 15:39:39