变形梯度 Deformation Gradient

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

变形梯度 Deformation Gradient

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

x‾0=[x‾0y‾0]x‾1=[x‾1y‾1]x‾2=[x‾2y‾2]\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)=1−u−vβ1(b)=uβ2(b)=vax‾(b)=∑i=02x‾iβi=β0(b)x‾0+β1(b)x‾1+β2(b)x‾2\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)=1−u−vβ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=∂x∂x‾\mathbf{F} = \dfrac{\partial\mathbf{x}}{\partial\mathbf{\overline{x}}}

F=∂x∂x‾=∂x∂b∂b∂x‾=∂x∂b(∂x‾∂b)−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)=1−u−vβ1(b)=uβ2(b)=vaF=∂x∂b(∂x‾∂b)−1=∂∂b(∑i=02xiβi)∂∂b(∑i=02x‾iβi)−1=(∑i=02xi∂βi∂b)(∑i=02x‾i∂βi∂b)−1=(x0∂β0∂b(b)+x1∂β1∂b(b)+x2∂β2∂b(b))(x‾0∂β0∂b(b)+x‾1∂β1∂b(b)+x‾2∂β2∂b(b))−1=([x0y0][∂β0∂u∂β0∂v]+[x1y1][∂β1∂u∂β1∂v]+[x2y2][∂β2∂u∂β2∂v])⋅⋯=([  ∂β0∂u[x0y0]∂β0∂v[x0y0]  ]+[  ∂β1∂u[x1y1]∂β1∂v[x1y1]  ]+[  ∂β2∂u[x2y2]∂β2∂v[x2y2]  ])⋅⋯=[(∂β0∂u[x0y0]+∂β1∂u[x1y1]+∂β2∂u[x2y2])(∂β0∂v[x0y0]+∂β1∂v[x1y1]+∂β2∂v[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‾=[ ∣∣∣  x‾0x‾1x‾2 ∣∣∣]∈R2×3X=[ ∣∣∣  x0x1x2 ∣∣∣]∈R2×3ab=[uv]Tβ0(b)=1−u−vβ1(b)=uβ2(b)=vaH=[∂β0∂u∂β0∂v∂β1∂u∂β1∂v∂β2∂u∂β2∂v]=[−1−1−1−0−0−1]XH=[ ∣∣∣  x0x1x2 ∣∣∣][−1−1−1−0−0−1]=[ ∣∣x1−x0x2−x0 ∣∣]=DsX‾H=[ ∣∣∣  x‾0x‾1x‾2 ∣∣∣][−1−1−1−0−0−1]=[ ∣∣x‾1−x‾0x‾2−x‾0 ∣∣]=DmF=XH(X‾H)−1=DsDm−1\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*}