碰撞检测 :Separating Axis Theorem

引子

Collision Detection :Transformation 中介绍了动态的碰撞检测,至此 CollisionDetection 项目的主要内容差不多都涉及了。在查询资料的时候,还接触到一些其它的检测方法,现在来看一下另外一种检测方法: Separating Axis Theorem 。

相关知识点

矢量和标量

简单的来说:

  • 矢量(vector)也称向量,有大小和方向的量,例如加速度、力。
  • 标量(scalar)只有大小(magnitude)的量,例如时间、温度。

在几何中,矢量用有向线段表示,表示如下:

64-vector

矢量 V 计算方法:

  • V = C2 - C1
  • V = (7-3,7-2)
  • V = (4,5)

法向量:向量的垂直向量,交换 xy 分量,然后将坐标 x 分量取反。上面 V 的法向量为 (-5,4) 。

64-perpendicular-vector

点积和投影

点积

两个矢量,可以用点积(Dot Product)的方式进行相乘,结果是一个标量。表示形式为: A · B 。

点积有两种计算方式:

方式一

A · B = Ax * Bx + Ay * By

方式二

A · B = |A| * |B| * cos(θ)
  • |A| 是矢量 A 的量值
  • |B| 是矢量 A 的量值
  • θ 是矢量 A 和 B 之间的角度

还需要了解的一个概念就是单位向量,单位向量计算方法:向量除以向量自身的量值。

A / |A|

更多信息见这里

投影

关于投影(Projection),先看下图:

64-projection

想象用一个发出平行光线的光源,照射到一个物体上,将在一个面上产生阴影。这个阴影是三维物体的二维投影。

类似的,二维物体的投影就是一维的“阴影”。

64-projection2

点积和投影的关系

利用点积可以得出一个矢量在另外一个矢量上的投影。通过简单的推导就可以明白。

64-dot

如上图所示,将 V 在 W 上的投影标量记为 Pw(V),可以得知:

Pw(V) = |V| * cos(θ)

根据点积

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值