构建标量场函数为了演化(逆收缩)

\[f_{i}(r)=\left\{\begin{array}{c} \left(1-\left(\frac{r}{R_{i}}\right)^{2}\right)^{2}, \quad r \leq R_{i} \\ 0, \quad r>R_{i} \end{array}\right. \]

其中 r^2 就是球函数
\(r^{2}=\left(x-c_{x}^{i}\right)^{2}+\left(y-c_{y}^{i}\right)^{2}+\left(z-c_{z}^{i}\right)^{2}\)
\(R_i=\alpha r_i\) 其中\(r_i\)是球i的半径\((c_x^i, c_y^i, c_z^i)\)是球的中心坐标,\(\alpha\)是1.5应该就是一个系数。
标量场定义为满足下面公式的东西。
\(\mathcal{I}(\boldsymbol{x})=\sum_{i=1}^{n} f_{i}-T=0\)
其中\(T\)是门限参数,门限参数控制着演进网格多接近标量场。一个更大的T降维生成更瘦的结果。
初始的网格图2C,定义为要演化的网格。
具体而言点在表面移动的轨迹被认为时间t的函数x(t)

\[\frac{d \boldsymbol{x}}{d t}=\boldsymbol{n}(\boldsymbol{x}, t) \mathcal{F}(\boldsymbol{x}, \boldsymbol{n}, \mathfrak{K}, \mathcal{I}, \cdots) \]

其中 \(d \boldsymbol{x} / d t\) 认为是速率。\(\boldsymbol{n}=-\nabla \mathcal{I} /|\nabla \mathcal{I}|\)
被认为是法向量,\(\mathcal{I}\) 被认为是标量场。\(\mathcal{F}(\boldsymbol{x}, \boldsymbol{n}, \mathfrak{K}, \mathcal{I}, \cdots)\) 是一个带符号的标量函数(运动速度函数)依赖于标量的属性包括位置和法向量曲率和标量场等等。典型的S(0)是初始化网格。
运动速度函数\(\mathcal{F}\) 被标量场和一个切线水平集决定。公式如下

\[\mathcal{F}(\boldsymbol{x}, \boldsymbol{n}, \mathfrak{\kappa}, \mathcal{I}, \cdots)=\left(\mathcal{I}(\boldsymbol{x})-\mathcal{I}_{\text {target}}\right) f(\mathfrak{\kappa}) \]

这公式意味着顶点演化的更快如果它原理切线水平集。区域函数在这个公式中控制着演化速度对不同区域的自适应。
标量场靠近小球会比靠近打球更加密集。在当前的系统中。\(f(\kappa)=1/\left(1+\left|\kappa_{1}\right|+\left|\kappa_{2}\right|\right)\)表现的很好\(\kappa_{1}\)\(\kappa_{2}\)是顶点 \(x\) 的主曲率。
一个顶点\(\boldsymbol{x}(t)\)在当前的网格面S(t)演进如下所示

\[\boldsymbol{x}(t+\Delta t)=\boldsymbol{x}(t)+\boldsymbol{n}(\boldsymbol{x}, t) \mathcal{F}(\boldsymbol{x}, \cdots) \Delta t \]

\(\Delta t\) 是时间间隔防止出现震荡情况,我们限制的迭代的次数。公式从另一篇论文CFL中导出
同时我们限制\(\Delta t\)的最小值

\[\Delta t \leq \frac{\text {step}}{\mathcal{F}_{\max }(\boldsymbol{x}(t), \cdots)} \]

step 定义为
\(step =\min \left\{r_{i}\right\} / 2^{k}\) k是细分次数。最小的step定义为最小的球面半径

  double step = getMinRadius(root, root->getValue()->radius) / pow(2, subdivisionLevel);

网格演进终止与表面接近标量场。演化工程在接近表面的时候很快。

posted on 2020-12-29 22:10  HDU李少帅  阅读(152)  评论(0编辑  收藏  举报