检查哪些三角形与凸包相交
Checking which triangles intersect a convex hull
我有一堆二维三角形(即在 R2 中),以及一个二维凸包(表示为一组线性约束),我需要检查哪些三角形与凸包相交。执行此操作的算法是什么?
在稍后阶段,我可能还需要将问题推广到比 2D 更高的维度(即,在 Rd 中的一组单纯形中,检查其中哪些在 Rd) 中与一个凸包相交,所以如果你知道一种算法可以处理一般情况,那也很好。
您可以分两步解决二维问题:
构建凸包的顶点;
与三角形和船体相交,它们都是凸多边形(https://www.bowdoin.edu/~ltoma/teaching/cs3250-CompGeom/spring17/Lectures/cg-convexintersection.pdf)。对于 N 个顶点的外壳,相交时间为 O(N)。
如果您需要对许多三角形执行此操作,一种可能是沿着一个轴(比如 X)将外壳分解为两个单调链,并通过二分搜索找到外壳和每个三角形的重叠范围。这会将时间减少到 O(Log N + K),其中 K 是与三角形 X 重叠时船体的平均边数。
我有一堆二维三角形(即在 R2 中),以及一个二维凸包(表示为一组线性约束),我需要检查哪些三角形与凸包相交。执行此操作的算法是什么?
在稍后阶段,我可能还需要将问题推广到比 2D 更高的维度(即,在 Rd 中的一组单纯形中,检查其中哪些在 Rd) 中与一个凸包相交,所以如果你知道一种算法可以处理一般情况,那也很好。
您可以分两步解决二维问题:
构建凸包的顶点;
与三角形和船体相交,它们都是凸多边形(https://www.bowdoin.edu/~ltoma/teaching/cs3250-CompGeom/spring17/Lectures/cg-convexintersection.pdf)。对于 N 个顶点的外壳,相交时间为 O(N)。
如果您需要对许多三角形执行此操作,一种可能是沿着一个轴(比如 X)将外壳分解为两个单调链,并通过二分搜索找到外壳和每个三角形的重叠范围。这会将时间减少到 O(Log N + K),其中 K 是与三角形 X 重叠时船体的平均边数。