3d - 无限锥面*AABB相交测试

标签 3d geometry collision-detection intersection

我试图发现一种更快的算法来测试轴是否对齐 conical surface与轴对齐的边界框的体积相交。

我目前开发的算法如下:

cone, AABB, lines along 4 parallel edges, and intersection points

  • x = 0
  • 对于 AABB 的任何 4 个平行边中的每一个:
  • 将其线与锥体相交。
  • 如果交点在 AABB 内:
  • 返回真。
  • 如果交点位于 AABB 的特定一侧:
  • x += 1
  • 如果 x == 0 或 x == 4(所有交叉点都在 AABB 的一侧):
  • 返回假。
  • 返回真。

  • 谁能想到一个更有效的方法?通过计算每条线的交点,这似乎做了很多额外的工作。

    编辑:

    上面的算法不好,例如:

    cone hits untested axis of box

    圆锥只能以所有轴线交点都在一侧的方式与盒子的一条边相交,因此上述算法不起作用,除非所有边都经过测试或智能选择要测试的边(也许最靠近锥体的边缘?)。

    编辑 编辑:有关我后来发现的解决方案,请参阅下面我自己的答案,这对我来说几乎是最佳选择。

    最佳答案

    我找到了一个可能的最佳解决方案:

    沿 +-z 轴的单位右锥体开口的方程为 x^2 + y^2 - z^2 = 0 .

    x^2 + y^2 - z^2的最大值和最小值在 AABB 上使用 interval arithmatic .提示:对于 x^2 ,最小值为 clamp(0, [xmin, xmax])^2最大值为 max(xmin^2, xmax^2) .

  • 如果结果间隔完全为负,则盒子完全在锥体内部。
  • 如果结果区间包含 0,则框与锥体表面相交。
  • 如果结果间隔完全为正,则该框完全在锥体之外。
  • 关于3d - 无限锥面*AABB相交测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4384652/

    相关文章:

    javascript - 如何在 HTML5 Canvas 中显示 tQuery.World

    c++ - 带颜色的 3d 网格上的 CGAL boolean 运算

    Java:检查矩形对多个对象的碰撞

    android - 用于矩形相交计算的 Minkowski 和

    matlab - 在 MatLab 中绘制一个 3d 点

    python - 在 Python 中,我如何体素化 3D 网格

    javascript - 旋转 css 3d 对象不能正常工作

    javascript - 谷歌地图 API v3 : Getting geometry of a drawn shape

    ios - 在 iOS 中围绕一个图钉添加多个圆圈

    c++ - 对象似乎没有使用 AABB 碰撞方法发生碰撞