1.基本概念

  feature line分为flat、concave、convex三种,由integrated curvature的根据阈值判定:

这里,例子如下图

  标架场采用《Mixed-integer quadrangulation》中的方法建立

2.Field-Coherent Loops

  由标架场引导出field-coherent geodesic path:切线与p点标架夹角小于。为了描述其偏离程度使用以下公式

其中为切向量,为标架之一,为惩罚系数。我们的目标是由点沿着field-coherent geodesic path返回点,即得到闭合曲线。而上述公式是为了避免造成过度偏离现象,如下图

  定义曲线之间的距离如下:

其中之间的最短field-coherent geodesic path长度。

  设loop集合,而

则离最远的

3.特征loop

  维护一个初始队列用来装loop,feature line 分为两类处理,如下:

  1. 闭合:如果为flat特征则加入队列;如果为concave,拷贝正反方向两份入队
  2. 非闭合:如果为flat拓展成一个loop入队,如果为concave,沿两端点分别生成两个loop入队

4.采样最远loop

  每次采样最远的loop加入中,其终止条件需满足以下两个:

  1. Topological integrity :Q中每个loop至少与其他loop相交三次。
  2. Geometric fit :path的面积与polyon的面积相差不超过阈值

5. 维护采样池

  定义,其中为convex feature,通过以下两种方式创建采样池:

  1. 以固定间隔采样中loop,对其中每个loop,跟踪一个垂直它自己新loop加入采样池,新loop需满足与中loop不正切相交
  2. 在表面进行泊松分布采样(Poisson-Disk Sampling)获得点集,对于每个跟踪两条新的loop,同样的他们需要满足与中的不正切相交,加入采样池

每当从中选择一条最远loop加入中后,需要对采样池用方法1重新装填新的loop进去。

  为提高Topological integrity,从采样池中选取loop不再是简单的选择与中最远的loop,而使用新的规则:设的子集且不满足Topological integrity条件,我们使采样池中与中相交的loop具有更大的优先度被选择,即除了距离因素外加入相交次数作为优先度来快速提高拓扑完整性。根据以上规则在采样池中选择与最远的loop 加入,然后在采样池中移除所有与正切相交的loop,并重新跟踪它们的源点的两条正交loop(满足与新更新的中的loop不正切相交)

6. 输出

  输出由两部分组成:队列与凸特征。其中每个loop都以形式给出,为点,为法向量。

  需要注意不是每个非闭合的feature都可以拓展成闭合loop,在拓展feature loop时也可能产生自相交的loop(这种类型舍弃),而那些无法闭合的feature我们把它们称为incomplete loop并加入,在下一个阶段进行处理。

附1.Tracing loops

  trace loop使用《Tracing Field-Coherent Quad Layouts 》的方法在一个拓展出来的图上进行Dijkstra 算法,其中图由曲面M上的边和顶点,还有边上的采样得到斯坦纳点(Steiner point)和连接斯坦纳点和顶点的边组成。不同的是,这里的

  距离测量:对于集合中的每条loop,在每条loop上的每个点作为源点跑Dijkstra,从而找到最远的(这里很耗时)

  传播限制:在做Dijkstra时,搜索路径不能与正切相交

附2.相交说明

  1. 正切相交判断:曲线相交,标架平行
  2. 垂直相交判断:曲线相交,标架相交

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

C++易踩Bug持续更新 上一篇
Instant Meshes 奇异点检测 下一篇