码迷,mamicode.com
首页 > 其他好文 > 详细

网格形变

时间:2020-06-01 23:28:06      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:参考   矩阵   坐标   isp   大小   移动   position   sdn   Fix   

简介

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

参考文献

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

核心公式

\(\left(\begin{array}{c}\text {LaplacianMatrix} \\ \text {FixedPointMatrix} \\ \text {oneEditPoint}\end{array}\right) *(\text {newPointPosition})=\left(\begin{array}{c}\text {LaplacianPointMatrix} \\ \text {FixedPointPosionMatrix} \\ \text {YouWantThisPointToMoveWhere}\end{array}\right)\)

分步公式简介

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

原理分析

说实话原理不是很清楚,

个人理解

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

code

https://github.com/lishaohsuai/digital_geo

网格形变

标签:参考   矩阵   坐标   isp   大小   移动   position   sdn   Fix   

原文地址:https://www.cnblogs.com/eat-too-much/p/13028137.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!