GJK碰撞检测实现从2D到3D
GJK collision detection implementation from 2D to 3D
我为这个问题的篇幅感到抱歉,并对通读这篇文章的人表示衷心的感谢!
所以我在过去的几天里一直在复习GJK算法。由于William Bittle在http://www.codezealot.org/archives/88。
我已经在我自己的c++项目中实现了他的伪代码(见文章末尾),但我想实现一个3D。我的弱点在于使用点积来测试voronoi区域,而使用三重积来获得泛二次线。但我想了解更多关于这方面的信息。
我的问题归结为containsOrigin函数。我在可视化和解释z轴添加的新voronoi区域时遇到了困难。我似乎无法理解如何确定哪些区域包含原点。我假设有4个我必须考虑,每个都从三角形平面延伸,三角形平面包括四面体单纯形的4个面。如果原点不在这些区域中的任何一个区域内,那么它就被包含了,我们就发生了碰撞。
如果它包含在特定的voronoi区域/哪个三角形面指向原点的方向,我该如何进行测试?
当前的2D算法检查是否形成了三角形,如果没有,则单纯形是一条线,它会找到第三个点。我假设3D算法会检查是否制作了四面体,如果没有,那么它会检查三角形,如果为真,那么它将找到第四个点来制作四面体(我如何得到这个?使用原点方向的法线?)。如果不做三角形,它会找到第三个点来做三角形(我还在像2D中那样使用三乘积吗?)。
任何建议、大纲、资源、代码扩充、评论都会受到热烈欢迎。
根据你对GJK算法的期望结果,你可能想看看Molly Rocket的这个不错的教程:https://mollyrocket.com/849
但要知道他的实现只输出交集吗?是/否。但这可能是一个良好的开端。
相关文章:
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 如何在 3D OpenGL 场景上绘制 SDL 2D 矩形?
- 根据组件 1、2(和 3)对空间 (2D/3D) 向量进行排序
- 删除使用 new 创建的 2D 或 3D 指针
- 将 3D 变换转换为 2D
- CUDA,使用2D和3D阵列
- 用于将笛卡尔 (x,y,z) 转换为圆柱坐标 (ρ,θ,z) 坐标 2D/3D 的代码
- 从 C++ 中的 3D 矩阵中提取 2D 矩阵
- 使用 pcl 或 opencv 在 2D 场景中匹配 3D 模型
- 将 2D 图像坐标转换为 z = 0 的 3D 世界坐标
- 将每个对象渲染到空间中,并在3D场景上渲染2D场景
- 使用 2D 数据创建 3D 直方图(OpenCV?
- 使用 OpenCV 在 3D 矩阵中导入 2D 矩阵
- 将 2D 屏幕坐标转换为 3D 世界坐标
- OpenCV从2D像素获取3D坐标
- 使用cuda的平行尺寸降低(3d至2d)
- 将2D数组的实例分配给3D数组中的索引
- OPENCV(C ) - 从已知的3D对象和相机位置计算图像的2D坐标
- 如何使用3D char数组调整双指针2D char阵列的大小
- 在单目视觉里程计中使用 3D-2D 运动估计的相机位置