我正在尝试在C#中实现分离轴定理。我有一个可以计算两个多边形之间的最小平移矢量的函数。但是,我似乎无法创建一个函数来计算一个多边形与多个其他多边形之间的最小平移矢量。老实说,我已经为此工作了几个月,距离解决方案还很近,也无法在线找到解决方案。总是有一些边缘情况无法返回正确的结果,从而导致游戏中出现高优先级的错误。
以下是无法正常工作的常见边缘情况:
是否有针对此问题的知名解决方案?我只能发现有人说“只对每个多边形执行SAT”,但这很少产生最小的平移向量。
任何帮助将不胜感激。
我从未真正进行过测试的一个想法是,某些分离轴(会将您横向移入相邻多边形的分离轴)可能被标记为从不视为最小值。然后,某种重复测试将产生良好的结果(可能具有某种FIFO和/或迭代限制,以防止陷入循环)。
—
Andrew Russell
一个更难解决的版本是形状的边缘仅被另一部分覆盖。例如,在右上角的图像中,如果中间的正方形向右延伸,则是一个较大的矩形。这类似于我使用的某些代码的输出,该代码占用了成千上万个已占用/未占用的单元,并将其减少到了一百个较大的碰撞形状
—
Richard Tingle 2014年