变形梯度 Deformation Gradient

推导二维三角形从重心坐标到世界坐标的变形梯度计算。

变形梯度 Deformation Gradient

假设有二维三角形,其静态时的三个顶点的坐标是

x0=[x0y0]x1=[x1y1]x2=[x2y2]\mathbf{\overline{x}_0} = \begin{bmatrix} \overline{x}_0 \\ \overline{y}_0 \end{bmatrix} \quad \mathbf{\overline{x}_1} = \begin{bmatrix} \overline{x}_1 \\ \overline{y}_1 \end{bmatrix} \quad \mathbf{\overline{x}_2} = \begin{bmatrix} \overline{x}_2 \\ \overline{y}_2 \end{bmatrix}

重心坐标是

b=[uv]Tβ0(b)=1uvβ1(b)=uβ2(b)=vax(b)=i=02xiβi=β0(b)x0+β1(b)x1+β2(b)x2\mathbf{b} = \begin{bmatrix} u & v \end{bmatrix}^T \\ \beta_0(\mathbf{b}) = 1 - u -v \quad \beta_1(\mathbf{b}) = u \quad \beta_2(\mathbf{b}) = v \\ \phantom{a} \\ \begin{align*} \mathbf{\overline{x}}(\mathbf{b}) &= \sum_{i=0}^{2} \mathbf{\overline{x}_i}\beta_i \\ &= \beta_0(\mathbf{b})\mathbf{\overline{x}_0} + \beta_1(\mathbf{b})\mathbf{\overline{x}_1} + \beta_2(\mathbf{b})\mathbf{\overline{x}_2} \end{align*}
  • βi\beta_i 是三角形各顶点的基函数,也就是各顶点的权重插值函数

变形后的三个顶点的坐标是

x0=[x0y0]x1=[x1y1]x2=[x2y2]\mathbf{x_0} = \begin{bmatrix} x_0 \\ y_0 \end{bmatrix} \quad \mathbf{x_1} = \begin{bmatrix} x_1 \\ y_1 \end{bmatrix} \quad \mathbf{x_2} = \begin{bmatrix} x_2 \\ y_2 \end{bmatrix}

重心坐标是

b=[uv]Tβ0(b)=1uvβ1(b)=uβ2(b)=vax(b)=i=02xiβi=β0(b)x0+β1(b)x1+β2(b)x2\mathbf{b} = \begin{bmatrix} u & v \end{bmatrix}^T \\ \beta_0(\mathbf{b}) = 1 - u -v \quad \beta_1(\mathbf{b}) = u \quad \beta_2(\mathbf{b}) = v \\ \phantom{a} \\ \begin{align*} \mathbf{x}(\mathbf{b}) &= \sum_{i=0}^{2} \mathbf{x_i}\beta_i \\ &= \beta_0(\mathbf{b})\mathbf{x_0} + \beta_1(\mathbf{b})\mathbf{x_1} + \beta_2(\mathbf{b})\mathbf{x_2} \end{align*}

变形可以表示为如下仿射变换

x=Fx+t\mathbf{x} = \mathbf{F}\mathbf{\overline{x}} + \mathbf{t}

我们计算变形梯度 F=xx\mathbf{F} = \dfrac{\partial\mathbf{x}}{\partial\mathbf{\overline{x}}}

F=xx=xbbx=xb(xb)1\begin{align*} \mathbf{F} = \frac{\partial\mathbf{x}}{\partial\mathbf{\overline{x}}} &= \frac{\partial\mathbf{x}}{\partial\mathbf{b}} \frac{\partial\mathbf{b}}{\partial\mathbf{\overline{x}}} \\ &= \frac{\partial\mathbf{x}}{\partial\mathbf{b}} \left(\frac{\partial\mathbf{\overline{x}}}{\partial\mathbf{b}}\right)^{-1} \end{align*}
  • 这里涉及了重心坐标和世界坐标的互相转换

将重心坐标公式代入

b=[uv]Tβ0(b)=1uvβ1(b)=uβ2(b)=vaF=xb(xb)1=b(i=02xiβi)b(i=02xiβi)1=(i=02xiβib)(i=02xiβib)1=(x0β0b(b)+x1β1b(b)+x2β2b(b))(x0β0b(b)+x1β1b(b)+x2β2b(b))1=([x0y0][β0uβ0v]+[x1y1][β1uβ1v]+[x2y2][β2uβ2v])=([  β0u[x0y0]β0v[x0y0]  ]+[  β1u[x1y1]β1v[x1y1]  ]+[  β2u[x2y2]β2v[x2y2]  ])=[(β0u[x0y0]+β1u[x1y1]+β2u[x2y2])(β0v[x0y0]+β1v[x1y1]+β2v[x2y2])]\mathbf{b} = \begin{bmatrix} u & v \end{bmatrix}^T \\ \beta_0(\mathbf{b}) = 1 - u -v \quad \beta_1(\mathbf{b}) = u \quad \beta_2(\mathbf{b}) = v \\ \phantom{a} \\ \begin{align*} \mathbf{F} &= \frac{\partial\mathbf{x}}{\partial\mathbf{b}} \left(\frac{\partial\mathbf{\overline{x}}}{\partial\mathbf{b}}\right)^{-1} \\ &= \frac{\partial}{\partial\mathbf{b}} \left( \sum_{i=0}^{2} \mathbf{x_i}\beta_i \right) \frac{\partial}{\partial\mathbf{b}} \left( \sum_{i=0}^{2} \mathbf{\overline{x}_i}\beta_i \right)^{-1} \\ &= \left( \sum_{i=0}^{2} \mathbf{x_i}\frac{\partial\beta_i}{\partial\mathbf{b}} \right) \left( \sum_{i=0}^{2} \mathbf{\overline{x}_i}\frac{\partial\beta_i}{\partial\mathbf{b}} \right)^{-1} \\ &= \left( \mathbf{x_0}\frac{\partial\beta_0}{\partial\mathbf{b}} (\mathbf{b}) + \mathbf{x_1}\frac{\partial\beta_1}{\partial\mathbf{b}} (\mathbf{b}) + \mathbf{x_2}\frac{\partial\beta_2}{\partial\mathbf{b}} (\mathbf{b}) \right) \left( \mathbf{\overline{x}_0}\frac{\partial\beta_0}{\partial\mathbf{b}} (\mathbf{b}) + \mathbf{\overline{x}_1}\frac{\partial\beta_1}{\partial\mathbf{b}} (\mathbf{b}) + \mathbf{\overline{x}_2}\frac{\partial\beta_2}{\partial\mathbf{b}} (\mathbf{b}) \right)^{-1} \\ &= \left( \begin{bmatrix} x_0 \\ y_0 \end{bmatrix} \begin{bmatrix} \frac{\partial\beta_0}{\partial\mathbf{u}} & \frac{\partial\beta_0}{\partial\mathbf{v}} \end{bmatrix} + \begin{bmatrix} x_1 \\ y_1 \end{bmatrix} \begin{bmatrix} \frac{\partial\beta_1}{\partial\mathbf{u}} & \frac{\partial\beta_1}{\partial\mathbf{v}} \end{bmatrix} + \begin{bmatrix} x_2 \\ y_2 \end{bmatrix} \begin{bmatrix} \frac{\partial\beta_2}{\partial\mathbf{u}} & \frac{\partial\beta_2}{\partial\mathbf{v}} \end{bmatrix} \right) \cdot \quad \cdots \\ &= \left( \begin{bmatrix} \ \ \frac{\partial\beta_0}{\partial\mathbf{u}} \begin{bmatrix} x_0 \\ y_0 \end{bmatrix} & \frac{\partial\beta_0}{\partial\mathbf{v}} \begin{bmatrix} x_0 \\ y_0 \end{bmatrix} \ \ \end{bmatrix} + \begin{bmatrix} \ \ \frac{\partial\beta_1}{\partial\mathbf{u}} \begin{bmatrix} x_1 \\ y_1 \end{bmatrix} & \frac{\partial\beta_1}{\partial\mathbf{v}} \begin{bmatrix} x_1 \\ y_1 \end{bmatrix} \ \ \end{bmatrix} + \begin{bmatrix} \ \ \frac{\partial\beta_2}{\partial\mathbf{u}} \begin{bmatrix} x_2 \\ y_2 \end{bmatrix} & \frac{\partial\beta_2}{\partial\mathbf{v}} \begin{bmatrix} x_2 \\ y_2 \end{bmatrix} \ \ \end{bmatrix} \right) \cdot \quad \cdots \\ &= \begin{bmatrix} \left( \frac{\partial\beta_0}{\partial u} \begin{bmatrix} x_0 \\ y_0 \end{bmatrix} + \frac{\partial\beta_1}{\partial u} \begin{bmatrix} x_1 \\ y_1 \end{bmatrix} + \frac{\partial\beta_2}{\partial u} \begin{bmatrix} x_2 \\ y_2 \end{bmatrix} \right) & \left( \frac{\partial\beta_0}{\partial v} \begin{bmatrix} x_0 \\ y_0 \end{bmatrix} + \frac{\partial\beta_1}{\partial v} \begin{bmatrix} x_1 \\ y_1 \end{bmatrix} + \frac{\partial\beta_2}{\partial v} \begin{bmatrix} x_2 \\ y_2 \end{bmatrix} \right) \end{bmatrix} \cdot \quad \cdots \end{align*}

注意结果是向量外积,生成了 2×22 \times 2 矩阵,我们可以定义几个矩阵来简化这个描述过程

X=[   x0x1x2 ]R2×3X=[   x0x1x2 ]R2×3ab=[uv]Tβ0(b)=1uvβ1(b)=uβ2(b)=vaH=[β0uβ0vβ1uβ1vβ2uβ2v]=[111001]XH=[   x0x1x2 ][111001]=[ x1x0x2x0 ]=DsXH=[   x0x1x2 ][111001]=[ x1x0x2x0 ]=DmF=XH(XH)1=DsDm1\begin{align*} \mathbf{\overline{X}} &= \begin{bmatrix} \ | &| &|\\ \ \ \mathbf{\overline{x}_0} & \mathbf{\overline{x}_1} & \mathbf{\overline{x}_2}\\ \ | &| &|\\ \end{bmatrix} \in \mathbb{R}^{2 \times 3} \\ \\ \mathbf{X} &= \begin{bmatrix} \ | &| &|\\ \ \ \mathbf{x_0} & \mathbf{x_1} & \mathbf{x_2}\\ \ | &| &|\\ \end{bmatrix} \in \mathbb{R}^{2 \times 3} \end{align*} \\ \phantom{a} \\ \mathbf{b} = \begin{bmatrix} u & v \end{bmatrix}^T \\ \beta_0(\mathbf{b}) = 1 - u -v \quad \beta_1(\mathbf{b}) = u \quad \beta_2(\mathbf{b}) = v \\ \phantom{a} \\ \begin{align*} \mathbf{H} &= \left[\begin{array}{c c} \frac{\partial\beta_0}{\partial\mathbf{u}} & \frac{\partial\beta_0}{\partial\mathbf{v}} \\[2mm] \frac{\partial\beta_1}{\partial\mathbf{u}} & \frac{\partial\beta_1}{\partial\mathbf{v}} \\[2mm] \frac{\partial\beta_2}{\partial\mathbf{u}} & \frac{\partial\beta_2}{\partial\mathbf{v}} \end{array}\right] \\ &= \begin{bmatrix} -1 & -1 \\ \phantom{-}1 & \phantom{-}0 \\ \phantom{-}0 & \phantom{-}1 \end{bmatrix} \\ \\ \mathbf{X}\mathbf{H} &= \begin{bmatrix} \ | &| &|\\ \ \ \mathbf{x_0} & \mathbf{x_1} & \mathbf{x_2}\\ \ | &| &|\\ \end{bmatrix} \begin{bmatrix} -1 & -1 \\ \phantom{-}1 & \phantom{-}0 \\ \phantom{-}0 & \phantom{-}1 \end{bmatrix} = \begin{bmatrix} \ | &| \\ \mathbf{x_1} - \mathbf{x_0} & \mathbf{x_2} - \mathbf{x_0}\\ \ | &| \\ \end{bmatrix} = \mathbf{D}_s \\ \\ \mathbf{\overline{X}}\mathbf{H} &= \begin{bmatrix} \ | &| &|\\ \ \ \mathbf{\overline{x}_0} & \mathbf{\overline{x}_1} & \mathbf{\overline{x}_2}\\ \ | &| &|\\ \end{bmatrix} \begin{bmatrix} -1 & -1 \\ \phantom{-}1 & \phantom{-}0 \\ \phantom{-}0 & \phantom{-}1 \end{bmatrix} = \begin{bmatrix} \ | &| \\ \mathbf{\overline{x}_1} - \mathbf{\overline{x}_0} & \mathbf{\overline{x}_2} - \mathbf{\overline{x}_0}\\ \ | &| \\ \end{bmatrix} = \mathbf{D}_m \\ \\ \mathbf{F} &= \mathbf{X}\mathbf{H} (\mathbf{\overline{X}}\mathbf{H})^{-1} \\ &= \mathbf{D}_s \mathbf{D}_m^{-1} \end{align*}