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

How to check if two convex hulls have intersection in Matlab?

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

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

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

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

注意:这都是在matlab中。

虽然不一定是最有效的,但可能是最简单的方法是使用 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);

如果您只是在寻找关于两个多边形是否相交的二进制 yes/no 答案,

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

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

虽然这不需要任何工具箱,但它确实需要检查两个凸包上的所有点,尽管如果 CinD 包含任何点并且您只是在寻找 yes/no回答。