1
3
在我看来,你可以用扫描平面的方法。 按顶部和底部“应用程序”(Z坐标)对所有AABB进行排序。现在考虑一个水平面,它从一个面向下移动,每次更新一个活动列表(即那些与该平面相交的框)。一个框在其顶面进入列表,在其底面离开列表。 场景的平面部分将由一组矩形和一个圆组成。在每一步中,圆都需要完全包含在矩形的并集中。 请注意,您还需要在赤道附近的平面处停下来(赤道不会修改活动列表),因为那里的球体是“最大的”。 这样做,您将初始问题发展为一组具有矩形和圆形的二维包含子问题。 遵循同样的原则,您可以通过扫描线技术来处理后者,根据矩形的顶部/底部的坐标对矩形进行排序,并移动活动列表。在每一步中,由iso-y线组成的部分定义一组线段,每个矩形一个线段,圆也可能有一个线段,通过对x上的边界进行排序,很容易证明包含性。
换句话说,通过三维扫描过程,可以分解棱柱体板中的空间并构建与球体的交点。通过二维扫描过程,将平面分解为矩形板,并与截面圆盘建立交点。 |
2
1
在代数上,这个问题可以表示为实域上的一个约束满足问题。一个点的条件
点位于aabb内的条件是:
哪里
现在给定一个圆和几个边界框,问题是约束列表是否
可以满足。如果是,球体内有一个点,但不在任何aabb内。因为只有三个变量
|
3
0
受yves递归扫描平面算法思想的启发,这里有一个更详细的版本,用于尝试在球体内找到不被任何给定框覆盖的点。 首先,我们必须找到z坐标的所有值,当沿着z轴移动时,相应平面中的全覆盖可以改变。这可能发生在
一旦这些z值被收集、排序并限制在球体的z范围内,我们就可以将球体的z范围划分为区间。我们选择一个值 里面 每个z间隔(例如中心)检查对应平面的覆盖范围。每个2d剪切可以类似于3d问题来解决,从而将覆盖检查减少为一组1d问题。在一维情况下,我们有一个区间,而不是一个球体或圆,我们也有区间,而不是方框或矩形。从而将球对盒的覆盖问题归结为一个区间对一个区间的一组平凡覆盖问题。 主要功能的实现可以如下所示:
|
heltonbiker · 在变形矩形网格中进行命中测试/查找交点 6 年前 |
Vuxer · 为什么我的乒乓球比赛中的球会这样? 6 年前 |
Hope · R中的碰撞检测和接近 7 年前 |
crazicrafter1 · Pygame列表冲突 7 年前 |
carlos cerda diaz · 如何避免重复? 7 年前 |
BeginnerDev · 如何将矩形添加到数组中? 7 年前 |
Red · Java命中检测/对象之间的碰撞 7 年前 |
Jack Richards · Sprite套件Swift中的碰撞检测 7 年前 |