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

Jef*_*eff 7 algorithm geometry

我有一个3D三角形网格,我正在寻找一种算法来抵消所有的 没边界的边缘 网格的边界边缘向内,沿着三角形网格的表面.

我已经看过在一个用于充气/放气(偏移,缓冲)多边形的算法中提到的Clipper,但它并不真正处理3D,也不能保留三角形网格,我不确定是否重新三角测量结果与原始输入网格匹配的边框更容易解决问题.

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

三角网格偏移

beb*_*bbo 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
Run Code Online (Sandbox Code Playgroud)

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

那么它看起来像这样: 在此输入图像描述