zoukankan      html  css  js  c++  java
  • 网格形变

    简介

    网格形变如果算法优秀的话,那么动画里就会大量应用。
    先提供一个比较简单的拉普拉斯网格形变简介

    参考文献

    https://www.cse.iitb.ac.in/~cs749/spr2017/lecs/18_laplace.pdf
    https://blog.csdn.net/qq_31804159/article/details/103409465

    核心公式

    (left(egin{array}{c} ext {LaplacianMatrix} \ ext {FixedPointMatrix} \ ext {oneEditPoint}end{array} ight) *( ext {newPointPosition})=left(egin{array}{c} ext {LaplacianPointMatrix} \ ext {FixedPointPosionMatrix} \ ext {YouWantThisPointToMoveWhere}end{array} ight))

    分步公式简介

    拉普拉斯矩阵的计算公式:
    注:矩阵的大小是示例
    对于每个点如果他和某个点相互连接的话,那么计算他的1邻域点的个数
    LaplacianMatrix(=left(egin{array}{cccc}1 & -frac{1}{ ext {neighborNumber}} & 0 & 0 \ -frac{1}{ ext {neighborNumber}} & 1 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1end{array} ight))
    固定点矩阵计算:
    FixedPointMatrix(=left(egin{array}{cccc}0 & 0 & 1 & 0 \ 0 & 1 & 0 & 0 \ 0 & 0 & 0 & 1 \ 1 & 0 & 0 & 0end{array} ight))
    就是某个固定点是选中的,那么在那一行的idx(openmesh中的属性)就会标为1
    oneEditPoint 同上
    (newPointPosition) 就是n*3的矩阵(待求解)
    LaplacianPointMatrix 表示的是$$delta_{i}=frac{sum_{j in N(i)} w_{i j}left(V_{i}-V_{j} ight)}{sum_{j in N(i)} w_{i j}}$$ 所代表的点的微分坐标
    简化表示可以认为w权重为1
    FixedPointPosionMatrix 表示的是固定点的坐标未变
    YouWantThisPointToMoveWhere 你想要把你的编辑点坐标移动的位置

    原理分析

    说实话原理不是很清楚,

    个人理解

    微分坐标其实保存的信息就是某个点的一邻域的局部信息,固定点就是约束,然后在形变的过程中尽量保证某个点的局部信息不变。

    code

    https://github.com/lishaohsuai/digital_geo

    TIPS

    软件只能对 bunmy 模型进行形变 因为没有做好交互功能。

    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    HDU2013 蟠桃记
    HDU2012 素数判定
    I00030 Grades conversion
    HDU2011 多项式求和
    HDU2009 求数列的和
    HDU2005 第几天?【日期计算】
    HDU2004 成绩转换
    HDU2006 求奇数的乘积
    HDU2007 平方和与立方和【序列处理】
    HDU2010 水仙花数【进制+趣味程序】
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/13028137.html
Copyright © 2011-2022 走看看