我有一个3D三角形网格,我正在寻找一种算法来沿着三角形网格的表面向内偏移网格的所有无边界边界边缘。
我已按照Clipper中的说法查看了An algorithm for inflating/deflating (offsetting, buffering) polygons,但它并没有真正处理3D,也无法保留三角网格,我也不确定重新三角化生成的边框以匹配原始输入网格更容易解决问题。
关于如何实现这一目标的任何建议?
答案 0 :(得分:0)
基于边界边仅由一个三角形共享的假设:
你需要
然后就可以了
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
要计算替换点,您必须找到不在同一平面上的共享三角形 -> 这定义了移动点的方向。