问题标签 [aabb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3239 浏览

c# - 简单的 3D AABB-Line Segment 碰撞检测(交叉点)

我只需要一种方法来告诉我 3D 中的轴对齐边界框是否与线段(不是射线)相交。我不需要交点。

盒子由 2 个对角定义,线段由起点和终点定义,如下所示:

我做了很多研究,但还没有找到我可以理解或至少可以使用的代码(希望是 C# 或 Java)。我需要方法,而不是可以完成这项工作的库......

我的问题是它必须是 100% 精确的,并且如果段刚刚接触到框(即它们共享一个点),它必须返回 false。例如,如果线段是盒子的边缘之一或通过一个角,它们不会相交。

谢谢

0 投票
2 回答
8819 浏览

collision-detection - 使用 AABB 或 OBB 疑问进行碰撞检测

我已经读过一些关于它的东西我想用它做一些实现。但我有几个疑问。de AABB 的问题是对象必须是轴对齐的,否则您必须每帧重新计算 bbox,对吗?重新计算成本高吗?还有精度呢,能不能做个碰撞树细分bbox呢?它如何与 AABB 合作?

OBB 是面向对象旋转的,对吧?您必须在游戏初始化之前构建树。我读到它很难实现而且有点贵,但我在精度上获得了很多。但是如果对象在游戏中旋转,bbox 是否会“自动”重新计算其旋转?

哪一个在游戏中最常用,为什么?

先感谢您 :)

0 投票
1 回答
1560 浏览

python - Python:最佳粒子自碰撞/三角形碰撞算法

我开始在 Python 中为 Blender 开发这个粒子引擎:http ://www.youtube.com/watch?v=uoK4QV3jg58&feature=channel_video_title

所有数据都由我的脚本处理,Blender 只是用于视觉效果。我现在的问题是,在上面的视频中,我计算了所有粒子的每个粒子之间的距离,以检测它们是否相互碰撞。

我开始阅读:

  • 八叉树
  • kd树
  • BVH树
  • AABB树
  • ...还有很多

Kdtree 似乎对于搜索最近的邻居非常有效,但仅适用于静态云。我的粒子总是在移动,因此每次迭代都必须重新生成 kdTree,我认为这消耗了太多的过程。我读过很多游戏都使用 AABB 树。我有点迷茫……我不知道该选择什么。我想要的是:

  • 检测大量粒子(250 000 或更多)之间的碰撞
  • 不需要是实时的(无论如何有 250 000 个粒子是不可能的)。200 万个粒子每帧 20 分钟对我来说不是问题。
  • 我的粒子总是球体
  • 检测粒子和多边形对象之间的碰撞
  • 减少必要距离计算的算法(避免为其他粒子或多边形计算所有粒子,即使它们很远)
  • 我的粒子是动态的,我的多边形对象可以是动态的或静态的。

如果有人能告诉我什么是最好的猜测,我在哪里可以找到 Python 文档和示例。

0 投票
2 回答
3106 浏览

java - 使用投影向量的基本 AABB 碰撞

过去几天我一直在四处寻找,研究向量,但仍然无法完全理解数学..

我有两个AABB 的。在碰撞时,我希望我的方法返回一个 Vector,然后我可以将其添加到位置 Vector 以使我的对象回到边界。

这是我当前的代码:

(位置向量是AABB的中心)

(不言自明,但这里也是 collideBoolean(Sprite other) 的代码)

我当前的代码或多或少有效。但是与“其他”碰撞的(这个)对象被推向“其他”最近的角落。

我想我真的很接近了。当然,对于另一双眼睛来说,这将是非常明显的事情,但我无法完全解决。任何帮助将不胜感激!

谢谢,

编辑:

将其添加到 collide(Sprite other) 方法的末尾是可行的,只是不像我想要的那样整洁。此外,当仅沿一个轴进入“另一个”身体时,它工作正常,但如果你以一定角度推入身体,你会进入形状内部,它会随机将你抛出。

这可能只是因为我每一步移动了太多像素,尽管我应该扫描测试我的碰撞

(此代码查看投影向量以查看哪个分量更大,然后 0 表示最大分量​​。这意味着我只是沿着最短路径投影出形状)

编辑两个

随着伊什塔尔回答的实施,事情看起来不错。但是我发现如果我将一个小物体与一个宽物体碰撞,它会准确地修复中心附近的碰撞,但是当你靠近角落时,你会陷入形状。

像这样:

编辑三

当前碰撞代码:

0 投票
1 回答
891 浏览

c++ - min_element 错误

我不是 C++ 编码器,所以也许这很容易。

我有一个 Point 类的向量,我想找到 AABB 矩形:

  1. 最小 x - 最小 y
  2. 最小 x - 最大 y
  3. 最大 x - 最小 y
  4. 最大 x - 最大 y

我已经完成了一个 for 循环,保存了最小值和最大值(x 一次,y 一次),并使用一些 if 更新每次迭代的值。

但我敢肯定 std 或 boost 中有更聪明的东西。

例如我刚试过:

但我遇到了一个奇怪的错误,比如

错误:'std::cout << std::min_element [with _FIter = __gnu_cxx::__normal_iterator >>, _Compare = bool ( )(const ofPoint&, const ofPoint&)](((DrawerWidget)中的 'operator<<' 不匹配)this)->DrawerWidget::points.std::vector<_Tp, _Alloc>::begin with _Tp = ofVec3f, _Alloc = std::allocator, ((DrawerWidget*)this)->DrawerWidget::points.std: :vector<_Tp, _Alloc>::end with _Tp = ofVec3f, _Alloc = std::allocator, _compareX)'</p>

如果我将 min_element 放在 <<

0 投票
1 回答
2312 浏览

performance - 更快的相交测试(AABB-AABB 或 AABB-三角形)

哪个交叉口测试通常更快?一个与另一个轴对齐的边界框?或带有三角形的轴对齐边界框。

我假设为 AABB-AABB,但我听到的意见不一。

0 投票
1 回答
1337 浏览

lua - Swept-AABB 与 AABB 碰撞测试不起作用

我正在尝试将本页所示的 Gomez 的 Swept-AABB 与 AABB 碰撞检测算法移植到 Lua,但我无法让它工作。它会在几乎所有地方检测到输出时间为零的“碰撞”,以及其他不准确之处。难道我做错了什么?

编辑:似乎对于所有 3 轴,没有触发为 u0d 赋值的 if 条件,将进行更多测试。

0 投票
3 回答
2350 浏览

graphics - 计算任意基于像素的绘图的边界框

给定任意像素的连续绘图(例如在 HTML5 画布上),是否有任何算法可以找到比简单地查看每个像素并记录最小/最大 x/y 值更有效的轴对齐边界框?

0 投票
2 回答
423 浏览

bounding-box - 在我旋转网格后变换这个 AABB,使它再次适合它

我有这个我在互联网上找到的 AABB 课程,它在网格移动时有效,但是当我旋转网格时它当然停止工作,我也注意到它有一个变换功能,所以我认为这是我必须要做的使用所以它在我旋转网格后工作,但我对矩阵有点新,我不知道如何使用它:

另外作为附加数据,我只想在 Y-axix 中旋转网格,因为它是一款海军游戏。

感谢您的回答。

0 投票
1 回答
1555 浏览

actionscript-3 - 检查 Away3D 中两个边界框之间的碰撞?

我需要在 Away3D 中做一些简单的碰撞检测。我找到了away3d.bounds.AxisAlignedBoundingBox类,但似乎我只能检查边界框和向量之间的碰撞。

有没有办法检查两个边界框之间的碰撞?