如何检查两个凸包是否在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回答。
假设我有两个这样的凸包。
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回答。