我为这个问题的长度道歉,并对任何阅读此内容的人给予先发制人的谢意!
所以我花了最后几天来讨论GJK算法。我理解它背后的一般概念,并理解其在2D中实现的大部分细节,这要归功于William Bittle在http://www.codezealot.org/archives/88撰写的精彩文章。
我已将他的伪代码(在文章末尾找到)实现到我自己的c ++项目中,但我想制作一个3D实现。我的弱点在于使用点积测试voronoi区域和tripleProducts来获得perpandicular线。但我试图阅读更多内容。
我的问题归结为containsOrigin函数。我无法直观地查看和计算z轴添加的新voronoi区域。我似乎无法绕过如何确定哪些区域包含原点。我假设有4个我必须考虑,每个都从构成四面体单面的4个面的三角形平面延伸。如果原点不在任何区域内,那么它就被包含,我们就会发生碰撞。
我如何测试它是否包含在特定的voronoi区域/哪个三角形面指向原点方向?
当前的2D算法会检查是否有三角形,如果没有,则单纯形就是一条线,它会找到第三个点。我假设3D算法检查是否制作了四面体,如果没有,那么它将检查三角形,如果为真,那么它将找到第四个点来制作四面体(我将如何得到这个?使用法线方向起源?)。如果我没有制作,它会找到第三个点来制作一个三角形(我是否仍然使用三重产品,就像2D一样?)。
任何建议,大纲,资源,代码扩充,评论都是非常有用的。
答案 0 :(得分:3)
根据您对GJK算法的期望,您可能需要查看Molly Rocket的这个精彩教程:https://mollyrocket.com/849
请注意,虽然他的实施仅输出交集?是/否。但这可能是个不错的开始。