如何在Matlab中检查两个凸包是否有交点?

时间:2017-02-18 09:01:25

标签: matlab intersection convex-hull

假设我有两个这样的凸包。

C=convhull(x1, y1); 
D=convhull(x2, y2);

其中x1,y1,x2,y2是向量。

现在我可以绘制这两个凸包,但我怎么知道这两个凸包是否有交叉?我希望它在一个程序中,而不是在视觉上,因为我打算在另一个.m文件中使用它。

注意:这都在matlab中。

1 个答案:

答案 0 :(得分:1)

可能最简单的方法是使用inpolygon,但不一定最有效。

C=convhull(x1, y1); 
D=convhull(x2, y2);

xC = x1(C); yC = y1(C);
xD = x2(D); yD = y2(D);
CinD = inpolygon(xC, yC, xD, yD);
DinC = inpolygon(xD, yD, xC, yC);

如果您只是在寻找二元是/否答案,以确定这两个多边形是否相交,

CDintersect = any(CinD) || any(DinC);

如果您需要实际积分,CinD包含xC,yC的索引,DinC包含xD,yD的索引。

虽然这并不需要任何工具箱,但它确实需要检查两个凸包上的所有点,但如果CinD包含任何点并且您只是在寻找它,则可以快捷方式是/否答案。