Algorithm 三维三角形网格边缘偏移算法

Algorithm 三维三角形网格边缘偏移算法,algorithm,geometry,Algorithm,Geometry,我有一个3D三角形网格,我正在寻找一种算法,沿三角形网格的表面向内偏移网格的所有无边界边 我已经看过了,如中所述,但它不能真正处理3D,也不能保留三角形网格,而且我不确定重新三角化生成的边界以匹配原始输入网格是否更容易解决问题 关于如何完成这项工作,有什么建议吗 基于边界边仅由一个三角形共享的假设: 你需要 地图边缘->三角形:e2t 多贴图点->三角形:p2t 跟踪已修改点的集合:pts 这样就行了 for all triangles do: for each edge do:

我有一个3D三角形网格,我正在寻找一种算法,沿三角形网格的表面向内偏移网格的所有无边界边

我已经看过了,如中所述,但它不能真正处理3D,也不能保留三角形网格,而且我不确定重新三角化生成的边界以匹配原始输入网格是否更容易解决问题

关于如何完成这项工作,有什么建议吗


基于边界边仅由一个三角形共享的假设:

你需要

  • 地图边缘->三角形:e2t
  • 多贴图点->三角形:p2t
  • 跟踪已修改点的集合:pts
这样就行了

for all triangles do:
    for each edge do:
        normalize edge: e.p1 < e.p2
        if the egde is in e2t: put edge/dummy into e2t
        else: put the edge/triangle into e2t

    for each point do:
        put point/triangle into p2t

prune all edge/dummy from e2t

while e2t is not empty:
    remove first edge/triangle from e2t -> e,t
    calculate replacement points for t: e.p1,e.p2 -> q1,q2
        unless the point is in pts
    use p2t to update all triangles with e.p1->q1 and all with e.p2->q2:
        update e2t if the modified edge is in there
    add each modified point to pts
对于所有三角形,请执行以下操作:
对于每个边,请执行以下操作:
规格化边:e.p1e,t移除第一条边/三角形
计算t的替换点:e.p1,e.p2->q1,q2
除非重点在pts中
使用p2t使用e.p1->q1更新所有三角形,使用e.p2->q2更新所有三角形:
如果修改的边在其中,则更新e2t
将每个修改点添加到pts
要计算替换点,必须找到不在同一平面上的共享三角形->这定义了移动点的方向

看起来是这样的:

这个问题似乎有点模糊;虽然图片给出了一些粗略的概念,但什么是无边界边?我认为“无边界边”是指边界上的边,如图中所示?即,只有一个三角形而不是两个三角形共享的边?我将以一种特殊的方式处理它,计算新的偏移边坐标。我认为您找不到这个特定任务的代码。很抱歉,Joseph是正确的。更复杂的是,在某些情况下需要创建新的三角形(发生在图片中),而在另一些情况下,需要删除三角形。有时,甚至不沿边的三角形也会受到影响,例如,如果它们由位于边上但小于偏移距离的三角形包围。嗯,我会1。将网格转换为一组平面(仅边界多段线
粗体黑线
而非完整的三角剖分)2。然后根据任务
收缩/修剪/平移/剪切右侧多段线,该任务描述得不够好
3。然后三角剖分回到网格。这样,您可以在2D空间中工作,您链接的算法应该在该空间中工作。如果网格具有曲面/边,则这将不起作用(除非将面选择方法从“平面”更改为“边界”)@Spektre对于任何具有共面三角形的网格,可能存在一个类似的网格,其中所有三角形都不共面,此时我回到了开始的位置。结合共面三角形可能有助于解决特定情况,但我认为这并不能使我更接近于一个适用于所有情况的解决方案。