用于抵消三角形三维网格边缘的算法

时间:2015-09-04 16:27:30

标签: algorithm geometry

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

我已按照Clipper中的说法查看了An algorithm for inflating/deflating (offsetting, buffering) polygons,但它并没有真正处理3D,也无法保留三角网格,我也不确定重新三角化生成的边框以匹配原始输入网格更容易解决问题。

关于如何实现这一目标的任何建议?

triangle mesh offset

1 个答案:

答案 0 :(得分:0)

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

你需要

  • 地图边缘 -> 三角形: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

要计算替换点,您必须找到不在同一平面上的共享三角形 -> 这定义了移动点的方向。

它看起来像这样: enter image description here