美文网首页
Separating Axis Theorem (分离轴理论SA

Separating Axis Theorem (分离轴理论SA

作者: 笨蛋白熊 | 来源:发表于2020-07-17 22:14 被阅读0次

粗浅理解,不一定完全正确,但是最直观,欢迎指正。
参考链接:
https://gamedevelopment.tutsplus.com/tutorials/collision-detection-using-the-separating-axis-theorem--gamedev-169

要判断平面上两个凸多边形是否相交,非常简单,只要找到一个投影方向,如果两个多边形在这个方向上的投影不重叠了,那么这两个多边形就坑定不相交。相反,如果找不到这样一个投影方向,那么就是相交的。


projection.png

上面这个图,投影方向是P,box1的投影就是box1.min和box1.max,box2的同理。那么只需要判断x坐标上,box2的投影的两个点在不在box1投影的两个点之间。投影和判断的代码很容易实现,向量相乘以及判断大小而已。

那么问题来了,要证明两个多边形不相交,一定要找到一个投影方向让两个多边形的投影不重叠。然而不可能所有的方向都去试,因为是方向是连续的,试不完。很头疼。先说结论,只需要尝试两个多边形的每个边的法向量即可。


normals.png

因为如果如果两个多边形不相交,那么沿着某一个多边形的某一条边的方向,能够讲两个多边形分隔开,这个也就是这个separating axis。为什么呢,因为对于凸多边形,内角小于180,所有的点都位于边的一侧。两个距离最近的点(就是第一张图中间圈起来的那两个点),所属的边当中,总有一个能够把两个多边形分开的边。

最后只要把每个边都试一遍就ok了。

相关文章

  • Separating Axis Theorem (分离轴理论SA

    粗浅理解,不一定完全正确,但是最直观,欢迎指正。参考链接:https://gamedevelopment.tuts...

  • 分离轴碰撞检测法(Separating Axis Theorem

    多边形碰撞检测实例

  • 对于矩阵操作中axis的理解,以及axis=-1的解释

    一、二维理解axis 二维数据拥有两个轴:第0轴(axis=0)沿着行的垂直往下,第1轴(axis=1或axis=...

  • ndarray数组相关

    维度称为轴(axis),轴的个数称为秩(rank)axis=0表示沿着第0轴操作,表示对每一列进行操作axis=1...

  • 小程序-wxss-flex布局

    一. 轴的概念 容器默认有两个轴:主轴(main axis)和侧轴(cross axis)。 主轴的开始位置为主轴...

  • Flex 知识总结

    简介 容器默认存在两根轴水平的 主轴(main axis) 垂直的 交叉轴(cross axis)主轴的开始位置(...

  • 04坐标轴

    坐标轴 下边的选项涉及xAxis或者yAxis,但有的层层嵌套 坐标轴组成 axis Title axis Lab...

  • Flexbox布局

    flex布局有主轴和侧轴两个轴(main axis和cross axis),这两个轴是可以互换的。 默认情况下,主...

  • flex布局实用小集

    全局概括 在 flex 容器中默认存在两条轴,水平主轴 main axis 和垂直的交叉轴 cross axis...

  • Flex布局

    基本概念 flex 默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的...

网友评论

      本文标题:Separating Axis Theorem (分离轴理论SA

      本文链接:https://www.haomeiwen.com/subject/pignhktx.html