由于您的网格不是凸形的,因此所产生的横截面可能会断开,因此实际上是由多个多边形组成。这意味着必须检查每个三角形,因此您至少需要对n个三角形进行O(n)个运算。
这是一种实现方法:
T <- the set of all trianglesP <- {}while T is not empty: t <- some element from T remove t from T if t intersects the plane: l <- the line segment that is the intersection between t and the plane p <- [l] s <- l.start while l.end is not s: t <- the triangle neighbouring t on the edge that generated l.end remove t from T l <- the line segment that is the intersection between t and the plane append l to p add p to P这将在O(n)时间中对n个三角形运行,前提是您的三角形具有指向其三个邻居的指针,并且
T支持恒定时间删除(例如,哈希集)。
与所有几何算法一样,细节在于魔鬼。例如,仔细考虑三角形的顶点恰好在平面中的情况。



