【GAMES201学习笔记】MLS-MPM公式基础
1. 符号记法
1.1 标量
- 标量 用非加粗的小写字母或者大写字母表示。
符 号 | 含 义 |
---|---|
mim_imi | 第 iii 个网格的质量 |
Vp0V^0_pVp0 | 第 ppp 个粒子在第 000 个时间步的体积 |
1.2 向量及矩阵
- 向量 用加粗的小写字母表示;
- 矩阵 用加粗的大写字母表示。
符 号 | 含 义 |
---|---|
vp\bold{v}_pvp | 第 ppp 个粒子的速度 |
Cp\bold{C}_pCp | 第 ppp 个粒子相关矩阵(下述中为粒子速度的梯度) |
1.3 角标
- 左下角的 iii 表示第 iii 个 网格 ;
- 左下角的 ppp 表示第 ppp 个 粒子 ;
- 左上角的 nnn 表示第 nnn 个 时间步 。
符 号 | 含 义 |
---|---|
vi\bold{v}_ivi | 第 iii 个网格的速度 |
vp\bold{v}_pvp | 第 ppp 个粒子的速度 |
xpn\bold{x}^n_pxpn | 第 ppp 个粒子在第 nnn 个时间步的位置 |
xpn+1\bold{x}^{n+1}_pxpn+1 | 第 ppp 个粒子在第 n+1n+1n+1 个时间步的位置 |
2. 不可压缩流体的 APIC
2.1 Particle to grid (P2G)
网格结点的动量:
(mv)in+1=∑pwip[mpvpn+mpCpn(xi−xpn)](m\bold{v})^{n+1}_i = \sum_p w_{ip}[m_p \bold{v}^n_p + m_p \bold{C}^n_p(\bold{x}_i - \bold{x}^n_p)] (mv)in+1=p∑wip[mpvpn+mpCpn(xi−xpn)]
网格结点的质量:
min+1=∑pmpwipm^{n+1}_i = \sum_p m_p w_{ip} min+1=p∑mpwip
2.2 Grid operations
网格结点的速度:
v^in+1=(mv)in+1/min+1\hat{\bold{v}}^{n+1}_i = (m \bold{v})^{n+1}_i / m^{n+1}_i v^in+1=(mv)in+1/min+1
使用 Chorin-style 压力投影:
vn+1=project(v^n+1)\bold{v}^{n+1} = \bold{project} (\bold{\hat{v}}^{n+1}) vn+1=project(v^n+1)
2.3 Grid to particle (G2P)
粒子速度:
vpn+1=∑iwipvin+1\bold{v}^{n+1}_p = \sum_i w_{ip} \bold{v}^{n+1}_i vpn+1=i∑wipvin+1
粒子速度的梯度:
Cpn+1=4Δx2∑iwipvin+1(xi−xpn)T\bold{C}^{n+1}_p = \cfrac{4}{\Delta x^2} \sum_i w_{ip} \bold{v}^{n+1}_i(\bold{x}_i - \bold{x}^n_p)^T Cpn+1=Δx24i∑wipvin+1(xi−xpn)T
Note :
- APIC 矩阵,表示网格结点上的速度 vin+1\bold{v}^{n+1}_ivin+1 与 x\bold{x}x 的变化量 (xi−xpn)(\bold{x}_i - \bold{x}^n_p)(xi−xpn) 之间的关系;
- 二者之间做个外积: vin+1⊗(xi−xpn)=vin+1(xi−xpn)T\bold{v}^{n+1}_i \otimes (\bold{x}_i - \bold{x}^n_p) = \bold{v}^{n+1}_i(\bold{x}_i - \bold{x}^n_p)^Tvin+1⊗(xi−xpn)=vin+1(xi−xpn)T 。
粒子位置:
xpn+1=xpn+Δtvpn+1\bold{x}^{n+1}_p = \bold{x}^n_p + \Delta t \bold{v}^{n+1}_p xpn+1=xpn+Δtvpn+1
3. MLS-MPM(隐式)
3.1 Particle to grid (P2G)
粒子形变:
Fpn+1=(I+ΔtCpn)Fpn\bold{F}^{n+1}_p = (\bold{I} + \Delta t \bold{C}^n_p)\bold{F}^n_p Fpn+1=(I+ΔtCpn)Fpn
网格动量:
(mv)in+1=∑pwip{mpvpn+[mpCpn−4ΔtΔx2∑pVp0P(Fpn+1)(Fpn+1)T](xi−xpn)}(m \bold{v})^{n+1}_i = \sum_p w_{ip} \{ m_p \bold{v}^n_p + [m_p \bold{C}^n_p - \frac{4\Delta t}{\Delta x^2} \sum_p V^0_p \bold{P}(\bold{F}^{n+1}_p)(\bold{F}^{n+1}_p)^T] (\bold{x}_i - \bold{x}^n_p) \} (mv)in+1=p∑wip{mpvpn+[mpCpn−Δx24Δtp∑Vp0P(Fpn+1)(Fpn+1)T](xi−xpn)}
网格质量:
min+1=∑pmpwipm^{n+1}_i = \sum_p m_p w_{ip} min+1=p∑mpwip
3.2 Grid operations
网格速度:
v^in+1=(mv)in+1/min+1\hat{\bold{v}}^{n+1}_i = (m \bold{v})^{n+1}_i / m^{n+1}_i v^in+1=(mv)in+1/min+1
网格边界条件(其中 BC 是边界条件运算符):
vin+1=BC(v^in+1)\bold{v}^{n+1}_i = \mathsf{BC}(\hat{\bold{v}}^{n+1}_i) vin+1=BC(v^in+1)
3.3 Grid to particle (G2P)
粒子速度:
vpn+1=∑iwipvin+1\bold{v}^{n+1}_p = \sum_i w_{ip} \bold{v}^{n+1}_i vpn+1=i∑wipvin+1
粒子速度梯度:
Cpn+1=4Δx2∑iwipvin+1(xi−xpn)T\bold{C}^{n+1}_p = \frac{4}{\Delta x^2} \sum_i w_{ip} \bold{v}^{n+1}_i (\bold{x}_i - \bold{x}^n_p)^T Cpn+1=Δx24i∑wipvin+1(xi−xpn)T
粒子坐标:
xpn+1=xpn+Δtvpn+1\bold{x}^{n+1}_p = \bold{x}^{n}_p + \Delta t \bold{v}^{n+1}_p xpn+1=xpn+Δtvpn+1
4. 更新粒子的形变
局部速度场的梯度不为零,因此粒子的形变梯度 F\bold{F}F 会变化:
∇v=∂vn∂x|x=xpn≠0\nabla \bold{v} = \left. \frac{\partial \bold{v}^n}{\partial \bold{x}} \middle | \begin{aligned} \\ {\bold{x} = \bold{x}^n_p} \end{aligned} \right. \neq \bold{0} ∇v=∂x∂vn∣∣∣∣∣x=xpn=0
可推出形变梯度的递推式:
Fpn+1=(I+Δt∇v)Fpn\bold{F}^{n+1}_p = (\bold{I} + \Delta t \nabla \bold{v})\bold{F}^n_p Fpn+1=(I+Δt∇v)Fpn
在 APIC 中,∇v\nabla \bold{v}∇v 使用 Cpn\bold{C}^n_pCpn 进行近似:
Fpn+1=(I+ΔtCpn)Fpn\bold{F}^{n+1}_p = (\bold{I} + \Delta t \bold{C}^n_p)\bold{F}^n_p Fpn+1=(I+ΔtCpn)Fpn
5. P2G
5.1 内力计算
网格动量:
(mv)in+1=∑pwip{mpvpn+[mpCpn−4ΔtΔx2∑pVp0P(Fpn+1)(Fpn+1)T](xi−xpn)}(m \bold{v})^{n+1}_i = \sum_p w_{ip} \{ m_p \bold{v}^n_p + [\textcolor{Red}{m_p \bold{C}^n_p} - \textcolor{Blue}{\frac{4 \textcolor{Black}{\Delta t}}{\Delta x^2} \sum_p V^0_p \bold{P}(\bold{F}^{n+1}_p)(\bold{F}^{n+1}_p)^T}] (\bold{x}_i - \bold{x}^n_p) \} (mv)in+1=p∑wip{mpvpn+[mpCpn−Δx24Δtp∑Vp0P(Fpn+1)(Fpn+1)T](xi−xpn)}
两个动量项:
- APIC:
wip[mpvpn+mpCpn(xi−xpn)]w_{ip} [m_p \bold{v}^n_p + \textcolor{Red}{m_p \bold{C}^n_p} (\bold{x}_i - \bold{x}^n_p)] wip[mpvpn+mpCpn(xi−xpn)]
- 粒子的弹力冲量:
Δtfip=−wip4ΔtΔx2∑pVp0P(Fpn+1)(Fpn+1)T(xi−xpn)\Delta t \bold{f}_{ip} = - w_{ip} \textcolor{Blue}{\frac{4 \textcolor{Black}{\Delta t}}{\Delta x^2} \sum_p V^0_p \bold{P}(\bold{F}^{n+1}_p)(\bold{F}^{n+1}_p)^T} (\bold{x}_i - \bold{x}^n_p) Δtfip=−wipΔx24Δtp∑Vp0P(Fpn+1)(Fpn+1)T(xi−xpn)
假设超弹性材料,使用势能梯度导出 fi\bold{f}_ifi ,即粒子 ppp 对网格结点 iii 力的贡献:
U=∑pVp0Ψp(Fp)fi=−∂U∂xi\begin{aligned} U &= \sum_p V^0_p \Psi_p (\bold{F}_p) \\ \bold{f}_i &= -\cfrac{\partial U}{\partial \bold{x}_i} \end{aligned} Ufi=p∑Vp0Ψp(Fp)=−∂xi∂U
Note :
- Ψp\Psi_pΨp :粒子 ppp 的弹性能量密度;
- UUU :总弹性势能;
- Vp0V^0_pVp0 :粒子 ppp 的初始体积。
5.2 节点力计算
总所周知,网格上的结点理论上是不会发生位移和形变的,因此这使得我们需要借助微分工具来获得一个微形变,从而计算出总弹性势能 UUU 对位移 xi\bold{x}_ixi 的梯度,继而获得 fi\bold{f}_ifi 。
设网格结点经过了一个微小的时间间隔 τ\tauτ ,该值趋于零,即 τ→0\tau \to 0τ→0 ,那么我们可以获得以下几个对应的式子:
- 网格结点的当前位置(前向欧拉积分):
xi^=xi+τvi\textcolor{Orange}{\hat{\bold{x}_i} = \bold{x}_i + \tau \bold{v}_i} xi^=xi+τvi
- 网格结点的 APIC 矩阵:
Cp=4Δx2∑iwipvi(xi−xp)T\textcolor{Red}{\bold{C}_p = \cfrac{4}{\Delta x^2} \sum_i w_{ip} \bold{v}_i (\bold{x}_i - \bold{x}_p)^T} Cp=Δx24i∑wipvi(xi−xp)T
- 网格结点的形变梯度:
Fp′=(I+τCp)Fp\textcolor{SkyBlue}{\bold{F}'_p = (\bold{I} + \tau \bold{C}_p)\bold{F}_p} Fp′=(I+τCp)Fp
- 网格结点的受力:
fi=−∂U∂xi=−∑pVp0∂Ψ(Fp′)∂x^i=−∑pVp0τ∂Ψp(Fp′)∂vi=−∑pVp0τ∂Ψ(Fp′)∂Fp′∂Fp′∂Cp∂Cp∂vin=−∑pVp0τPp(Fp′)⋅τFpT⋅4wipΔx2(xi−xp)=−4Δx2∑pVp0P(Fp′)⋅FpTwip(xi−xp)\begin{aligned} \bold{f}_i &= -\cfrac{\partial U}{\partial \bold{x}_i} \\ &= - \sum_p V^0_p \cfrac{\partial \Psi(\bold{F}'_p)}{\partial \textcolor{Orange}{\hat{\bold{x}}_i}} \\ &= - \sum_p \cfrac{V^0_p}{\textcolor{Orange}{\tau}} \cfrac{\partial \Psi_p (\bold{F}'_p)}{\partial \textcolor{Orange}{\bold{v}_i}} \\ &= - \sum_p \cfrac{V^0_p}{\tau} \textcolor{Green}{\cfrac{\partial \Psi (\bold{F}'_p)}{\partial \bold{F}'_p}} \textcolor{SkyBlue}{\cfrac{\partial \bold{F}'_p}{\partial \bold{C}_p}} \textcolor{Red}{\cfrac{\partial \bold{C}_p}{\partial \bold{v}^n_i}} \\ &= - \sum_p \cfrac{V^0_p}{\tau} \textcolor{Green}{\bold{P}_p(\bold{F}'_p)} \cdot \textcolor{SkyBlue}{\tau \bold{F}^T_p} \cdot \textcolor{Red}{\cfrac{4w_{ip}}{\Delta x^2}(\bold{x}_i - \bold{x}_p)} \\ &= - \textcolor{Blue}{\cfrac{4}{\Delta x^2} \sum_p V^0_p \bold{P}(\bold{F}'_p) \cdot \bold{F}^T_p} w_{ip}(\bold{x}_i - \bold{x}_p) \end{aligned} fi=−∂xi∂U=−p∑Vp0∂x^i∂Ψ(Fp′)=−p∑τVp0∂vi∂Ψp(Fp′)=−p∑τVp0∂Fp′∂Ψ(Fp′)∂Cp∂Fp′∂vin∂Cp=−p∑τVp0Pp(Fp′)⋅τFpT⋅Δx24wip(xi−xp)=−Δx24p∑Vp0P(Fp′)⋅FpTwip(xi−xp)
6. Grid operations
6.1 强边界条件(BC)
因为上述的分部积分、散度定理、自由度均在网格上进行操作,所以 MPM 中应在网格上计算边界条件,对于每个在边界内的网格结点 iii :
6.1.1 sticky 边界条件
粒子在边界上速度直接归零:
vin+1=BCsticky(v^in+1)=0\bold{v}^{n+1}_i = \mathsf{BC_{sticky}} (\bold{\hat{v}}^{n+1}_i) = \bold{0} vin+1=BCsticky(v^in+1)=0
6.1.2 slip 边界条件(滑移)
粒子在边界上法线方向上的速度归零,切向速度不变,粒子会在边界上沿着边界光滑地滑动:
vin+1=BCslip(v^in+1)=v^in+1−n(nTv^in+1)\bold{v}^{n+1}_i = \mathsf{BC_{slip}} (\bold{\hat{v}}^{n+1}_i) = \bold{\hat{v}}^{n+1}_i - \bold{n}(\bold{n}^T \bold{\hat{v}}^{n+1}_i) vin+1=BCslip(v^in+1)=v^in+1−n(nTv^in+1)
Note ;
- n\bold{n}n :表面法向量。
6.1.3 separate 边界条件(分离)
仅仅使得靠近边界的粒子应用 slip 边界条件:
vin+1=BCseparate(v^in+1)=v^in+1−n⋅min(nTv^in+1,0)\bold{v}^{n+1}_i = \mathsf{BC_{separate}} (\bold{\hat{v}}^{n+1}_i) = \bold{\hat{v}}^{n+1}_i - \bold{n} \cdot \min(\bold{n}^T \bold{\hat{v}}^{n+1}_i , 0) vin+1=BCseparate(v^in+1)=v^in+1−n⋅min(nTv^in+1,0)
Note :
- 其中 nTv^in+1\bold{n}^T \bold{\hat{v}}^{n+1}_inTv^in+1 是速度法线方向的分量;
- 当粒子有靠近边界的趋势时( nTv^in+1<0\bold{n}^T \bold{\hat{v}}^{n+1}_i < 0nTv^in+1<0 ),即 min(nTv^in+1,0)=nTv^in+1\min(\bold{n}^T \bold{\hat{v}}^{n+1}_i , 0) = \bold{n}^T \bold{\hat{v}}^{n+1}_imin(nTv^in+1,0)=nTv^in+1 ,边界条件变为 slip 边界条件;
- 当粒子远离边界时,速度不发生变化,这使得原本在边界上的粒子有了离开边界的可能。
6.1.4 施加额外的外力
- 添加重力:vin+1+=Δtg\bold{v}^{n+1}_i += \Delta t \bold{g}vin+1+=Δtg (在边界条件之前操作)
- 移动碰撞对象:在相对速度上计算边界条件
- 库伦摩擦
7. 本构模型
- 弹性物体:NeoHookean & Corotated
- (弱可压缩)流体:Equation-of-States (EOS)
- 弹塑性物体(雪,沙等):屈服准则(例如 ad-hoc boxing ,Cam-clay , Drucker-prager ,NACC)
本构模型主要分为两个部分:
- (弹性/塑性)形变更新
- (PK1)计算应力
7.1 弹性固体
7.1.1 形变更新
Fpn+1=(I+ΔtCpn)Fpn\bold{F}^{n+1}_p = (\bold{I} + \Delta t \bold{C}^n_p)\bold{F}^n_p Fpn+1=(I+ΔtCpn)Fpn
7.1.2 超弹性材料模型的 PK1 应力
Neo-Hookean 模型
Ψ(F)=μ2∑i[(FTF)ii−1]−μlog(J)+λ2log2(J)P(F)=∂Ψ∂F=μ(F−F−T)+λlog(J)F−T\begin{aligned} \Psi(\bold{F}) &= \cfrac{\mu}{2} \sum_i [(\bold{F}^T \bold{F})_{ii} - 1] - \mu \log (J) + \cfrac{\lambda}{2} \log^2(J) \\ \bold{P(F)} &= \cfrac{\partial \Psi}{\partial \bold{F}} = \mu (\bold{F} - \bold{F}^{-T}) + \lambda \log (J) \bold{F}^{-T} \end{aligned} Ψ(F)P(F)=2μi∑[(FTF)ii−1]−μlog(J)+2λlog2(J)=∂F∂Ψ=μ(F−F−T)+λlog(J)F−T
(Fixed)Corotated 模型
Ψ(F)=μ∑i(σi−1)2+λ2(J−1)2P(F)=∂Ψ∂F=2μ(F−R)+λ(J−1)JF−T\begin{aligned} \Psi(\bold{F}) &= \mu \sum_i(\sigma_i - 1)^2 + \cfrac{\lambda}{2}(J - 1)^2 \\ \bold{P(F)} &= \cfrac{\partial \Psi}{\partial \bold{F}} = 2\mu(\bold{F} - \bold{R}) + \lambda (J - 1)J \bold{F}^{-T} \end{aligned} Ψ(F)P(F)=μi∑(σi−1)2+2λ(J−1)2=∂F∂Ψ=2μ(F−R)+λ(J−1)JF−T
Note :
- σi\sigma_iσi :F\bold{F}F 的奇异值;
- R\bold{R}R :F\bold{F}F 做 SVD 后的旋转分量;
- 柯西应力 σ=1JPFT\sigma = \cfrac{1}{J} \bold{P} \bold{F}^Tσ=J1PFT 在 MPM 中不常使用。
7.2 弱可压缩流体
7.2.1 体积比
Jp=Vpn/Vp0=det(Fpn)J_p = V^n_p / V^0_p = \det(\bold{F}^n_p) Jp=Vpn/Vp0=det(Fpn)
Note :
- 体积比直接可以反映当前位置的压强;
- 体积比是粒子 ppp 在时间步 nnn 的形变 Fpn\bold{F}^n_pFpn 的行列式,即矩阵 Fpn\bold{F}^n_pFpn 代表的变换中空间体积沿着各个特征向量发生变化的倍数。
7.2.2 简易状态方程
使用一个物理层面上不够严谨的方程,来反映体积比和压强之间的关系:
p=K(1−J)p = K(1 - J) p=K(1−J)
Note :
- KKK :体积系数。
之后可以计算柯西应力:
σ=−pI\sigma = -p \bold{I} σ=−pI
7.2.3 形变更新
为了避免 catastrophic cancellation ,不维护 Fp\bold{F}_pFp ,直接维护 Jpn=det(Fpn)J^n_p = \det(\bold{F}^n_p)Jpn=det(Fpn) :
Fpn+1=(I+ΔtCpn)Fpn⇒det(Fpn+1)=det(I+ΔtCp)det(Fpn)⇒Jpn+1=(1+Δttr(Cpn))Jpn\begin{aligned} \bold{F}^{n+1}_p &= (\bold{I} + \Delta t \bold{C}^n_p) \bold{F}^n_p \\ \Rightarrow \det(\bold{F}^{n+1}_p) &= \det(\bold{I} + \Delta t \bold{C}_p) \det(\bold{F}^n_p) \\ \Rightarrow J^{n+1}_p &= (1 + \Delta t \bold{tr}(\bold{C}^n_p)) J^{n}_p \end{aligned} Fpn+1⇒det(Fpn+1)⇒Jpn+1=(I+ΔtCpn)Fpn=det(I+ΔtCp)det(Fpn)=(1+Δttr(Cpn))Jpn
7.2.4 简单实现弱可压缩流体
Corotated 模型:
Ψ(F)=μ∑i(σi−1)2+λ2(J−1)2P(F)=∂Ψ∂F=2μ(F−R)+λ(J−1)JF−T\begin{aligned} \Psi(\bold{F}) &= \mu \sum_i(\sigma_i - 1)^2 + \cfrac{\lambda}{2}(J - 1)^2 \\ \bold{P(F)} &= \cfrac{\partial \Psi}{\partial \bold{F}} = 2\mu(\bold{F} - \bold{R}) + \lambda (J - 1)J \bold{F}^{-T} \end{aligned} Ψ(F)P(F)=μi∑(σi−1)2+2λ(J−1)2=∂F∂Ψ=2μ(F−R)+λ(J−1)JF−T
Note :
- 设置 μ=0\mu = 0μ=0 ,只保留 λ\lambdaλ ,通过这种方式仅惩罚体积项,通过 Corotated 实现;
- 为了避免数值不稳定的情况,每次更新 F\bold{F}F 时,将 F\bold{F}F 设置为单位矩阵,仅将第一行第一列项设置为 JJJ 。
8. 奇异值分解(SVD)
8.1 SVD 定义
对于任意矩阵 Mn×m\bold{M}_{n \times m}Mn×m 均可以进行奇异值分解:
Mn×m=Un×nΣn×mVm×mT\bold{M}_{n \times m} = \bold{U}_{n \times n} \bold{\Sigma}_{n \times m} \bold{V}^T_{m \times m} Mn×m=Un×nΣn×mVm×mT
Note :
- 其中 U\bold{U}U 和 V\bold{V}V 为正交矩阵;
- Σ\bold{\Sigma}Σ 为对角矩阵(Σij=0,i≠j\bold{\Sigma}_{ij} = 0,i \neq jΣij=0,i=j );
- 对角矩阵的迹 σi=Σii\sigma_i = \Sigma_{ii}σi=Σii 称之为 奇异值 。
8.2 奇异值分解的唯一性
SVD 的结果不是惟一的,因此需要添加一些限制:
- det(U)=det(V)=1\det(\bold{U}) = \det(\bold{V}) = 1det(U)=det(V)=1 (仅限制在旋转,不是映射);
- ∣Σii∣\vert \bold{\Sigma}_{ii} \vert∣Σii∣ 降序排序;
- 只有模最小的奇异值才能为负。
taichi
中的实现:
U, sig, V = ti.svd(M)
# sig is an NxN diagonal matrix.
8.3 模拟弹塑性固体
超弹性设置:
Fp=Fp<elastic>Fp<plastic>Ψpn=Ψ(Fp<elastic>)\begin{aligned} \bold{F}_p &= \bold{F}_{p<\bold{elastic}>} \bold{F}_{p<\bold{plastic}>} \\ \Psi^n_p &= \Psi(\bold{F}_{p<\bold{elastic}>}) \end{aligned} FpΨpn=Fp<elastic>Fp<plastic>=Ψ(Fp<elastic>)
Note :
- 势能只会影响弹性形变,塑性形变被 “遗忘” 。
8.3.1 “Box” 屈服准则
先更新弹性形变:
F^pn+1=(I+ΔtCpn)Fp<elastic>n\bold{\hat{F}}^{n+1}_p = (\bold{I} + \Delta t \bold{C}^n_p) \bold{F}^n_{p<\bold{elastic}>}F^pn+1=(I+ΔtCpn)Fp<elastic>n
SVD:
F^pn+1=UΣ^VT\bold{\hat{F}}^{n+1}_p = \bold{U} \bold{\hat{\Sigma}} \bold{V}^T F^pn+1=UΣ^VT
对缩放倍数做一个 Clamping,限制数值的上下界,对于超出限制的部分舍去,以此实现塑性形变:
Σii=max(min(Σii^,1+θs),1−θc)\bold{\Sigma}_{ii} = \max(\min(\hat{\bold{\Sigma}_{ii}} , 1 + \theta_s), 1 - \theta_c) Σii=max(min(Σii^,1+θs),1−θc)
Note :
- θs\theta_sθs :拉伸倍数的上限,拉伸超过该数值则不再拉伸;
- θc\theta_cθc :压缩倍数的上限,压缩超过该数值则不再压缩;
- Σii∈[1−θc,1+θs]\bold{\Sigma}_{ii} \in [1 - \theta_c , 1 + \theta_s]Σii∈[1−θc,1+θs]
舍去塑性形变部分的缩放之后,更新新的弹性形变矩阵:
Fp<elastic>n+1=UΣVT\bold{F}^{n+1}_{p<\bold{elastic}>} = \bold{U} \bold{\Sigma} \bold{V}^T Fp<elastic>n+1=UΣVT
而在 Clamping 过程中舍去的形变作为塑性形变 Fp<plastic>n+1\bold{F}^{n+1}_{p<\bold{plastic}>}Fp<plastic>n+1
【GAMES201学习笔记】MLS-MPM公式基础相关推荐
- MATLAB学习笔记2:MATLAB基础知识(下)
阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...
- 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符
Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...
- 强化学习笔记(一)基础篇
强化学习笔记(一)基础篇 目录 1.强化学习相关概念 2.强化学习与监督学习和非监督学习的区别 3.强化学习分类 4.三对重要概念 目录 写在前面:本文系小编学习邹伟老师等人编著的<强化学习&g ...
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- Linux 学习笔记之超详细基础linux命令 Part 3
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 2----------------- ...
- XML学习笔记01【xml_基础、xml_约束】
Java后端 学习路线 笔记汇总表[黑马程序员] XML学习笔记01[xml_基础.xml_约束][day01] XML学习笔记02[xml_解析][day01] 目录 01 xml_基础 今日内容 ...
- 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版)
经过几天的学习,opencv基础部分学习完啦.整理出来. OpenCV opencv学习笔记1:图片读入,显示与保存(有代码) opencv学习笔记2:图像处理基础 opencv学习笔记3:像素处理 ...
- 《Go语言圣经》学习笔记 第三章 基础数据类型
<Go语言圣经>学习笔记 第三章 基础数据类型 目录 整型 浮点数 复数 布尔型 字符串 常量 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记, ...
最新文章
- 石墨烯新新新应用,MIT大规模生产细胞大小机器人,有感知能存储
- 脑电分析系列[MNE-Python-1]| MNE-Python详细安装与使用(更新)
- Spring Boot处理静态资源(自定义资源映射)
- java读取与写入_Java读取与写入文件
- Java项目实例教程详细
- LSMW批处理使用方法(06)_步骤4、5
- 美开发数据自毁技术适用云计算架构
- 排序算法之low B三人组
- iPhone/Mac Objective-C内存管理教程和原理剖析(二)口诀与范式转
- angularjs 验证用户名是否重复
- 2021 ACDU China Tour-上海站暨数据库大咖讲坛(第4期)成功举办!(附视频回放PPT下载)...
- 团队开发——冲刺2.g
- 将python随机森林模型保存到文件
- 2021爱分析·时尚品牌数字化厂商全景报告
- [1] UI原型设计工具Pencil Project 学习系列----- 为什么选择
- 容斥原理在C语言中的应用,容斥原理在排列问题中的应用实例
- linux构建lamp的关键步骤,Linux-LAMP平台搭建详解
- 多媒体音箱选购指南--理论篇
- 5年码农吐血推荐10款用了就离不开的网站
- 【赛后总结】第十三届服务外包创新创业大赛总结——A14