由于网格不是凸面,因此生成的横截面可能会断开,因此实际上由多个多边形组成.这意味着必须检查每个三角形,因此对于n个三角形,您至少需要O(n)个运算.
这是一种方法:
T <- the set of all triangles
P <- {}
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
Run Code Online (Sandbox Code Playgroud)
这将在O(n)时间内运行n个三角形,前提是您的三角形具有指向其三个邻居的指针,并且T
支持恒定时间删除(例如哈希集).
与所有几何算法一样,魔鬼在细节中.例如,仔细考虑三角形顶点正好在平面中的情况.