checkCollision

检查两个几何都在碰撞

描述

collisionStatus= checkCollision(geom1geom2返回两个凸起的几何形状之间的碰撞状态geom1geom2。如果两个几何都在碰撞在其指定的姿势,checkCollision等于1。如果没有冲突被发现,collisionStatus等于0

[collisionStatussepdistwitnesspts] = checkCollision(geom1geom2也返回每个几何的最小距离和见证点,sepdistwitnesspts分别时,没有碰撞的两个几何之间找到。

例子

全部收缩

这个例子说明了如何检查两个碰撞几何形状的碰撞状态。

创建一个盒子碰撞几何。

BX = collisionBox(1,2,3);

创建一个圆柱碰撞几何。

Y = collisionCylinder(3,1);

翻译沿汽缸X通过2轴摆动。

T = trvec2tform([2 0 0]);cy.Pose = T;

画出两个几何。

秀(CY)保持显示(BX)XLIM([ -  5 5])ylim([ -  5 5])zlim([ -  5 5])保持

检查碰撞状态。确认状态与剧情相符。

[areIntersecting,DIST,witnessPoints] = checkCollision(BX,CY)
areIntersecting = 1
DIST = NaN的
witnessPoints =3×2楠楠楠楠楠楠

翻译沿箱X由图3和向下 - 轴ž通过4.确认箱和气缸不碰撞轴摆动。

T = trvec2tform([0 3 -4]);bx.Pose = T;[areIntersecting,DIST,witnessPoints] = checkCollision(BX,CY)
areIntersecting = 0
DIST = 2
witnessPoints =3×20.4286 0.4286 2.0000 2.0000 -2.5000 -0.5000

积箱,气缸,和表示两个几何之间的最小距离的线段。

秀(CY)保持显示(BX)WP = witnessPoints;plot3([WP(1,1)的wp(1,2)],[WP(2,1)的wp(2,2)],[WP(3,1)的wp(3,2)],'BO-')XLIM([ -  5 5])ylim([ -  5 5])zlim([ -  5 5])保持

输入参数

全部收缩

碰撞几何,指定为下列之一:

碰撞几何,指定为下列之一:

输出参数

全部收缩

冲突状态,返回0要么1。如果两个几何都在碰撞,collisionStatus等于1。否则,该值是0

数据类型:

2件碰撞的几何形状之间的最小距离,返回一个实数或为NaN。连接证人点的线段(witnesspts)实现两个几何之间的最小距离。当两个几何都在碰撞,sepdist设定为为NaN

数据类型:|为NaN

证人点上的每个几何形状,返回为3乘2矩阵。每列对应的见证点上geom1geom2, 分别。连接两个证人点的线段具有长度septdist。当两个几何都在碰撞,witnesspts设定为南(3,2)

数据类型:|为NaN

限制

  • 碰撞检测结果不再可靠时的最小距离低于10-5

扩展功能

C / C ++代码生成
生成使用MATLAB®编码器™C和C ++代码。

介绍了在R2019b