zoukankan      html  css  js  c++  java
  • BMesh 逆收缩代码对应解释

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

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

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

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

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

    [mathcal{F}(oldsymbol{x}, oldsymbol{n}, mathfrak{kappa}, mathcal{I}, cdots)=left(mathcal{I}(oldsymbol{x})-mathcal{I}_{ ext {target}} ight) f(mathfrak{kappa}) ]

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

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

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

    [Delta t leq frac{ ext {step}}{mathcal{F}_{max }(oldsymbol{x}(t), cdots)} ]

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

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

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

  • 相关阅读:
    【转】IOC和工厂模式联合使用简化工厂模式
    2014年12月24日
    【转】使用java程序模拟页面发送http的post请求
    2014年12月5日
    JAVA的double值去掉"E"
    多表联接查询解析
    Struts从后台向前台传递数据
    prepareCall()执行存储过程
    PreparedStatement
    C++ 中的new和delete理解与实操应用
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/14208995.html
Copyright © 2011-2022 走看看