zoukankan      html  css  js  c++  java
  • 基本实现蒙皮模拟

    今天把蒙皮模拟算法实现了。

    具体方法是加载此前算出的权重矩阵,每个内部点都是表面点的加权平均。
    于是求解的时候唯一的未知数就是参数p了。

    这次牛顿法能够模拟,但是同之前不带权重的模拟算法一样,模拟过程中无法收敛到全局极值点。
    出问题的是这根棒。
    rod.gif
    控制这根棒的参数有两个,一个是弯曲大小,另一个是弯曲方向。
    当强制令弯曲方向不起作用是,能够正常模拟,结果如上图。
    当让弯曲方向参数起作用时,结果如下,模型不弯曲。 
    rodStatic.gif
    检查原因,发现牛顿法模拟的过程中,首步的梯度、Hessian、以及求出的参数增量如下:

    梯度Hessian参数增量
    有方向参数
    G=[21319.284966 ;0.000000 ;];
    H=[
    1734695.368102 7.202621 ;
    7.202621 0.000000 ;
    ];
    x=1.0e+03 *
    [0 2.9599]

    没有方向参数G=[21319.284966 ;0.000000 ;];
    H=[
    1734695.368102 0.000000 ;
    0.000000 0.000000 ;
    ];
    x=[0.0123 0]

    准备在应用牛顿法前使用其他方法,例如沿梯度下降。
    加了一个很简单的梯度下降算法
    1. for (int ithIter = 0; ithIter < 5; ++ithIter)
    2. {
    3. double f;
    4. isSucceed &= m_fem->computeValueAndGrad(p, tVec, &f, &G);
    5. p -= G * 1e-6;
    6. if(G.norm() < m_minGradSize)
    7. break;
    8. }
    然后模拟成功了,如图……
    rodGrad.gif





  • 相关阅读:
    angular
    客户端存储cookie ---(优缺点及定义及用途)
    cookie的设置和获取
    和谐敏感字
    移动端上滑下滑换图片
    移动端适配方式
    Viewport及判断移动端上下滑动
    HTML5拖放&地理定位
    用canvas 做一个钟表
    用canvas上传图片
  • 原文地址:https://www.cnblogs.com/dydx/p/4272999.html
Copyright © 2011-2022 走看看