Mass-Spring Model based
Cloth Simulation
Wanho Choi
The explicit forward Euler time integration x = dv dt a = dv dt = d dt dx dt ⎛ ⎝⎜ ⎞⎠⎟ = d2x dt 2 = M−1 f : Newton' s 2nd law v = dx dt position : velocity : acceleration : differentiation differentiation integration integration d dt x v ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ = v M−1f ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ 1 Δt xn+1 − xn vn+1 − vn ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = vn M−1f n ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ discretization f : force
(
)
M = m 0 0 0 m 0 0 0 m ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥: 3 × 3 mass matrix ← 3D :(x, y,z)
The explicit forward Euler time integration d dt x v ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ = v M−1f ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ 1 Δt xn+1 − xn vn+1 − vn ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = vn M−1f n ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ discretization
1 Δt xn+1 − xn vn+1 − vn ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ = v n+1 M−1f n+1 ⎛ ⎝ ⎜ ⎞ ⎠ ⎟
The implicit backward Euler time integration
⇐ f n+1 = f n + ∂f ∂x x n+1 − x n
(
)
+ ∂f ∂v v n+1 − v n(
)
: the 1st order Taylor’s expansion1 Δt xn+1 − xn Δt − v n ⎛ ⎝⎜ ⎞ ⎠⎟ = M −1 fn + ∂f ∂x x n+1 − xn
(
)
+ ∂f ∂v xn+1 − xn Δt − v n ⎛ ⎝⎜ ⎞ ⎠⎟ ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ 1 Δt v n+1 − vn(
)
= M−1 f n+1 = M−1 f n + ∂f ∂x x n+1 − xn(
)
+ ∂f ∂v v n+1 − v n(
)
⎡ ⎣⎢ ⎤ ⎦⎥ ⇐ v n+1 = x n+1 − xn Δt xn+1 − xn(
)
− Δt2 vn = Δt2M−1 f n + ∂f ∂x x n+1 − xn(
)
+ ∂f ∂v xn+1 − xn Δt − v n ⎛ ⎝⎜ ⎞ ⎠⎟ ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ = Δt2M−1f n + Δt2M−1 ∂f ∂x x n+1 − xn(
)
+ ΔtM−1 ∂f ∂v x n+1 − xn(
)
− Δt2 M−1 ∂f ∂v v n I − Δt 2M−1 ∂f ∂x ⎛ ⎝⎜ ⎞⎠⎟(
xn+1 − xn)
= Δt2(
vn + M−1f n)
Ax
= b
We don't know fn+1 at n-th frame,
but we can estimate fn+1 from fn, xn and, vn.
I − Δt2M−1 ∂f ∂x − ΔtM −1 ∂f ∂v ⎛ ⎝⎜ ⎞⎠⎟
(
xn+1 − xn)
= Δt2 ⎡⎣⎢vn + M−1⎛⎝⎜ f n − ∂∂vf vn⎞⎠⎟ ⎤⎦⎥ ⇐ ∂∂vf = 0 by later formulation I − Δt2M−1 ∂f ∂x ⎛ ⎝⎜ ⎞⎠⎟(
xn+1 − xn)
= Δt2(
vn + M−1fn)
f
n: forces
x
n+1: positions
n +1 ( ) instead of n1 Δt 3 2 x n+1 − 2xn + 1 2 x n−1 3 2 v n+1 − 2vn + 1 2 v n−1 ⎛ ⎝ ⎜ ⎜ ⎜ ⎜ ⎞ ⎠ ⎟ ⎟ ⎟ ⎟ = vn+1 M−1f n+1 ⎛ ⎝ ⎜ ⎞ ⎠
⎟ : the 1st order Taylor’s expansion
The semi-implicit second-order backward time integration (BDF)
1 Δt 3 2 v n+1 − 2vn + 1 2 v n−1 ⎛ ⎝⎜ ⎞⎠⎟ = M−1f n+1 = M−1 f n + ∂ f ∂x x n+1 − xn
(
)
+ ∂f ∂v v n+1 − v n(
)
⎡ ⎣⎢ ⎤ ⎦⎥ 2Δt 3 v n+1 − 8Δt 9 v n + 2Δt 9 v n−1 = 4Δt 2 9 M −1 f n + 4Δt 2 9 M −1 ∂f ∂x x n+1 − 4Δt 2 9 M −1 ∂f ∂x x n+ 4Δt 2 9 M −1 ∂f ∂v v n+1 − 4Δt 2 9 M −1 ∂f ∂v v n ⇐ vn+1 = 1 Δt 3 2 x n+1 − 2xn + 1 2 x n−1 ⎛ ⎝⎜ ⎞⎠⎟ 2 3 3 2 x n+1 − 2xn + 1 2 x n−1 ⎛ ⎝⎜ ⎞⎠⎟ − Δt9(
8vn − 2vn−1)
= 4Δt2 9 M −1fn + 4Δt 2 9 M −1 ∂f ∂x x n+1 − 4Δt 2 9 M −1 ∂f ∂x x n+ 4Δt 9 M −1 ∂f ∂v 3 2 x n+1 − 2xn + 1 2 x n−1 ⎛ ⎝⎜ ⎞⎠⎟ − 4Δt2 9 M −1 ∂f ∂v v n xn+1 − 4 3 x n + 1 3 x n−1 − Δt 9 8v n − 2vn−1(
)
= 4Δt2 9 M −1 fn + 4Δt 2 9 M −1 ∂f ∂x x n+1 − 4Δt 2 9 M −1 ∂f ∂x x n+ 2Δt 3 M −1 ∂f ∂v x n+1 − 8Δt 9 M −1 ∂f ∂v x n + 2Δt 9 M −1 ∂f ∂v x n−1 − 4Δt 2 9 M −1 ∂f ∂v v n ⇐ f n+1 = f n + ∂f ∂x x n+1 − x n(
)
+ ∂f ∂v v n+1 − v n(
)
second order time discretization
I − 4Δt 2 9 M −1 ∂f ∂x − 2Δt 3 M −1 ∂f ∂v ⎛ ⎝⎜ ⎞ ⎠⎟ x n+1 − xn − 1 3 x n − xn−1
(
)
− Δt 9 8v n − 2vn−1(
)
= 4Δt2 9 M −1 fn − 4Δt 2 9 M −1 ∂f ∂x x n− 8Δt 9 M −1 ∂f ∂v x n + 2Δt 9 M −1 ∂f ∂v x n−1 − 4Δt 2 9 M −1 ∂f ∂v v n I − 4Δt 2 9 M −1 ∂f ∂x − 2Δt 3 M −1 ∂f ∂v ⎛ ⎝⎜ ⎞ ⎠⎟ x n+1 − I − 4Δt 2 9 M −1 ∂f ∂x x n− 2Δt 3 M −1 ∂f ∂v ⎛ ⎝⎜ ⎞ ⎠⎟ x n = 1 3 x n − xn−1(
)
+ Δt 9 8v n − 2vn−1(
)
+ 4Δt2 9 M −1 fn − 2Δt 9 M −1 ∂f ∂v x n + 2Δt 9 M −1 ∂f ∂v x n−1 − 4Δt 2 9 M −1 ∂f ∂v v n I − 4Δt 2 9 M −1 ∂f ∂x − 2Δt 3 M −1 ∂f ∂v ⎛ ⎝⎜ ⎞ ⎠⎟ x n+1 − xn(
)
= 1 3 x n − xn−1(
)
+ Δt 9 8v n − 2vn−1(
)
− 2Δt 9 M −1 ∂f ∂v x n − xn−1(
)
+ 4Δt2 9 M −1 fn − ∂f ∂v v n ⎛ ⎝⎜ ⎞⎠⎟I − 4Δt 2 9 M −1 ∂f ∂x ⎛ ⎝⎜ ⎞ ⎠⎟ x n+1 − xn
(
)
= 1 3 x n − xn−1(
)
+ Δt 9 8v n − 2vn−1(
)
+ 4Δt2 9 M −1 fn I − 4Δt 2 9 M −1 ∂f ∂x − 2Δt 3 M −1 ∂f ∂v ⎛ ⎝⎜ ⎞ ⎠⎟ x n+1 − xn(
)
= 1 3 x n − xn−1(
)
+ Δt 9 8v n − 2vn−1(
)
− 2Δt 9 M −1 ∂f ∂v x n − xn−1(
)
+ 4Δt2 9 M −1 fn − ∂f ∂v v n ⎛ ⎝⎜ ⎞⎠⎟ ⇐ ∂ f ∂v = 0 by later formulation I − 4Δt 2 9 M −1 ∂f ∂x ⎛ ⎝⎜ ⎞ ⎠⎟ x n+1 − xn(
)
= 1 3 x n − xn−1(
)
+ Δt 9 8v n − 2vn−1(
)
+ 4Δt 2 9 M −1 f nI
− Δt
2M
−1∂f
∂x
⎛
⎝⎜
⎞
⎠⎟
(
x
n+1− x
n)
= Δt
2(
v
n+ M
−1f
n)
Ax
= b
The explicit forward Euler time integration
The implicit backward Euler time integration : 3n × 3n symmetric matrix equation
(n : the number of mesh vertices)
: We need to derive f(= force) and ∂f
Stretch Force & Jacobian
for a Linear Spring
Eij = kij 2
(
xij − Lij)
2 fi (= −fj ) = − ∂Eij ∂xi = kij 1− Lij xij ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ xijx
ix
jx
ij= x
j− x
i: Hook’s law (Lij : rest length)
E
ijL
ij : the 1st derivative ∂fi ∂x j = kij xijxijT xijTxij + kij 1− Lij xij ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ I − xijxij T xijTxij ⎛ ⎝⎜ ⎞ ⎠⎟ : the 2nd derivative (elastic energy) (force) (Jacobian) (3x3 symmetric matrix) ∴ ∂f ∂x ⎛⎝⎜ ⎞⎠⎟ i = j∈neighbors
∑
∂x∂fij : the Jacobian of i-th node (3x3 symmetric matrix)proof) fi = − ∂Eij ∂xi = kij 1− Lij xij ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ xij = kij
(
xij − Lij)
xij xij = kij 1− Lij xij ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ xij fi = − ∂Eij ∂xi = − ∂∂xi kij 2(
xij − Lij)
2 ⎡ ⎣⎢ ⎤ ⎦⎥ = − kij 2 ∂ ∂xi(
xij − Lij)
2 ⎡ ⎣⎢ ⎤⎦⎥ = −kij(
xij − Lij)
∂ ∂xi(
xij − Lij)
⎛ ⎝⎜ ⎞ ⎠⎟ = −kij(
xij − Lij)
∂ ∂xi xij ⎛ ⎝⎜ ⎞ ⎠⎟ ⇐ ∂∂xi xij = − xij xij proof) ∂fi ∂x j = kij xijxijT xijTxij + kij 1− Lij xij ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ I − xijxij T xijTxij ⎛ ⎝⎜ ⎞ ⎠⎟ ∂fi ∂xj = ∂ fi ∂xij ∂xij ∂xj = ∂ fi ∂xij ∂ ∂xj(
x j − xi)
= ∂ fi ∂xij I = ∂ fi ∂xij = ∂∂xij kij 1− Lij xij ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ xij ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = kij ∂ ∂xij 1− Lij xij ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ xij ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = k ∂∂x 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ x ⎡ ⎣ ⎢ ⎤ ⎦ ⎥: Let’s omit ij index for convenience = k 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ I + x ∂∂x 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ ⎧ ⎨ ⎪ ⎩⎪ ⎫ ⎬ ⎪ ⎭⎪ T ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ∵ ∂ ∂x[ f (x)x] = f (x)I + x ∂⎡⎣⎢∂x f (x)⎤⎦⎥ T ⎛ ⎝⎜ ⎞ ⎠⎟ ∂ ∂x 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ = ∂∂x x − L x ⎛ ⎝⎜ ⎞ ⎠⎟ = ∂∂x xTx − L xTx ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ = ∂ ∂x x T x − L
(
)
xTx − x(
Tx − L)
∂ ∂x x T x ⎛ ⎝⎜ ⎞⎠⎟ xTx = 2x 2 xTx x T x − x(
Tx − L)
2x 2 xTx xTx = x − x − L(
)
x x xTx = L x x xTx = L x x xTx ∴ ∂fi ∂xj = k 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ I + x L x x xTx ⎛ ⎝⎜ ⎞ ⎠⎟ T ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = k 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ I + L x xxT xTx ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ = k 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ I + xxT xTx − xxT xTx + L x xxT xTx ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ = k 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ I + xxT xTx − 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ xxT xTx ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ = k xx T xTx + 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ I − 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ xxT xTx ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ = k xx T xTx + 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ I − xxT xTx ⎛ ⎝⎜ ⎞ ⎠⎟ ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ = k xx T xTx + k 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ I − xxT xTx ⎛ ⎝⎜ ⎞ ⎠⎟∂fi ∂x j = kij xijxijT xijTxij + kij 1− Lij xij ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ I − xijxij T xijTxij ⎛ ⎝⎜ ⎞ ⎠⎟
Geometric meaning of Jacobian
projection operator complementary projection operator X = x x a b y = a + b a = X ⋅ y
(
)
X = X X ⋅ y(
)
= XX( )
T y = x x xT x y = xxT xTx y = Pay Pa = xxT xTx : projection operator on x b = y − a = y − Pay = I − P(
a)
y = Pby Pb = I − xx TxTx : complementary projection operator on x x
Stretch Force & Jacobian
for a Triangular Spring
static triangle per frame deformed triangle (uv-coordinate) (xyz-coordinate) (ui,vi ) (uj,vj ) (uk ,vk ) xk (xk , yk , zk ) xi (xi, yi, zi ) x j (x j, yj, zj ) S(u,v) = (x, y,z) x j − xi = Su
(
uj − ui)
+ Sv(
vj − vi)
xk − xi = Su(
uk − ui)
+ Sv(
vk − vi)
x j − xi xk − xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = uj − ui vj − vi uk − ui vk − vi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ Su Sv ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = uij vij uik vik ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ Su Sv ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ Su = ∂S ∂u , Sv = ∂ S ∂v : 3D vectors ⎛ ⎝⎜ ⎞⎠⎟ ∴ Su Sv ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = uij vij uik vik ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ −1 x j − xi xk − xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = 1 uijvik − vijuik vik −vij −uik uij ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ x j − xi xk − xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ Su = vik(
x j − xi)
− vij(
xk − xi)
2A Sv = −uik(
x j − xi)
+ uij(
xk − xi)
2ATriangle based Stretch Spring (Baraff’s 98)
∂Su ∂xi = vij − vik 2A ∂Sv ∂xi = uik − uij 2A ∂Su ∂x j = vik 2A ∂Su ∂xk = −vij 2A ∂Sv ∂x j = − uik 2A ∂Sv ∂xk = uij 2A
3D vectors scalar values
= 1 2A vik −vij −uik uij ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ x j − xi xk − xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ A = areauv = uijvik − vijuik 2 ⎛ ⎝⎜ ⎞ ⎠⎟
fi = − ∂Eij ∂xi = kij 1− Lij xij ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ xij (elastic energy) (force) (Jacobian) Et = At kt 2
(
Su −1)
2 + At kt 2(
Sv −1)
2 fi = − ∂Et ∂xi = Atkt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ Su ∂Su ∂xi + 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ Sv ∂Sv ∂xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = At kt ∂Su ∂xi ∂Su ∂x j SuSuT SuTSu + Atkt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ ∂Su ∂xi ∂Su ∂x j I − SuSuT SuTSu ⎛ ⎝⎜ ⎞ ⎠⎟ (elastic energy) (force) (Jacobian)Stretch “Linear” Spring Stretch “Triangular” Spring
∂fi ∂x j = kij xijxijT xijTxij + kij 1− Lij xij ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ I − xijxij T xijTxij ⎛ ⎝⎜ ⎞ ⎠⎟ ∂fi ∂x j +Atkt ∂Sv ∂xi ∂Sv ∂x j SvSvT SvTSv + Atkt 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ ∂Sv ∂xi ∂Sv ∂x j I − SvSvT SvTSv ⎛ ⎝⎜ ⎞ ⎠⎟ Eij = kij 2
(
xij − Lij)
2(Lij : rest length)
(
t : triangle index)
1: rest stretch ratio
proof) fi = − ∂Eij ∂xi = kij 1− Lij xij ⎛ ⎝ ⎜ ⎞ ⎠ ⎟ xij
from the equation
For the force in u − direciton
By chain rule, fi = Atkt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ Su ∂Su ∂xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ let kij = Atkt, xij = Su , and Lij = 1. By chain rule, fi = At kt 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ Sv ∂Sv ∂xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ let kij = Atkt, xij = Sv, and Lij = 1. ∴fi = Atkt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ Su ∂Su ∂xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ + Atkt 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ Sv ∂Sv ∂xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ fi = − ∂Et ∂xi = Atkt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ Su ∂Su ∂xi + 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ Sv ∂Sv ∂xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥
proof) ∂fi ∂x j = Atkt ∂Su ∂xi ∂Su ∂x j SuSuT SuTSu + At kt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ ∂Su ∂xi ∂Su ∂x j I − SuSuT SuTSu ⎛ ⎝⎜ ⎞ ⎠⎟ + Atkt ∂Sv ∂xi ∂Sv ∂x j SvSvT SvTSv + Atkt 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ ∂Sv ∂xi ∂Sv ∂x j I − SvSvT SvTSv ⎛ ⎝⎜ ⎞ ⎠⎟ ∵ ∂ ∂x [ f (x)x] = f (x)I + x ∂⎡⎣⎢∂x f (x)⎤⎦⎥ T ⎛ ⎝⎜ ⎞ ⎠⎟ = Atkt ∂Su ∂xi ∂Su ∂x j ⋅ 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ I + Su ∂ ∂Su 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ ⎧ ⎨ ⎪ ⎩⎪ ⎫ ⎬ ⎪ ⎭⎪ T ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = Atkt ∂Su ∂xi ∂Su ∂x j ⋅ 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ I + Su 1 Su Su SuTSu ⎛ ⎝⎜ ⎞ ⎠⎟ T ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ∵ ∂ ∂x 1− L x ⎛ ⎝⎜ ⎞ ⎠⎟ = L x x xTx ⇒ ∂∂Su 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ = 1 Su Su SuTSu ⎛ ⎝⎜ ⎞ ⎠⎟ = Atkt ∂Su ∂xi ∂Su ∂x j ⋅ 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ I + 1 Su SuSuT SuTSu ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = Atkt ∂Su ∂xi ∂Su ∂xj ⋅ 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ I + SuSuT SuTSu − SuSuT SuTSu 1 Su SuSuT SuTSu ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = Atkt ∂Su ∂xi ∂Su ∂xj ⋅ 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ I + SuSuT SuTSu − 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ SuSuT SuTSu ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = Atkt ∂Su ∂xi ∂Su ∂x j ⋅ SuSuT SuTSu + 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ I − SuSuT SuTSu ⎛ ⎝⎜ ⎞ ⎠⎟ ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = Atkt ∂Su ∂xi ∂Su ∂xj SuSuT SuTSu + Atkt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ ∂Su ∂xi ∂Su ∂x j I − SuSuT SuTSu ⎛ ⎝⎜ ⎞ ⎠⎟ u − direciton : ∂fi ∂xj = ∂ fi ∂Su ∂Su ∂x j = ∂ Su ∂xj ∂fi ∂Su = ∂ Su ∂xj ∂ ∂Su Atkt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ Su ∂Su ∂xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = Atkt ∂Su ∂xi ∂Su ∂x j ⋅ ∂∂Su 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ Su ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ v − direciton : ∂fi ∂xj = Atkt ∂Sv ∂xi ∂Sv ∂xj SvSvT SvTSv + Atkt 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ ∂Sv ∂xi ∂Sv ∂x j I − SvSvT SvTSv ⎛ ⎝⎜ ⎞ ⎠⎟ in a similar way ∴ ∂fi ∂x j = ∂ fi ∂xj ⎛ ⎝⎜ ⎞ ⎠⎟u + ∂ fi ∂xj ⎛ ⎝⎜ ⎞ ⎠⎟ v = Atkt ∂Su ∂xi ∂Su ∂x j SuSuT SuTSu + Atkt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ ∂Su ∂xi ∂Su ∂xj I − SuSuT SuTSu ⎛ ⎝⎜ ⎞ ⎠⎟ + Atkt ∂Sv ∂xi ∂Sv ∂x j SvSvT SvTSv + Atkt 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ ∂Sv ∂xi ∂Sv ∂x j I − SvSvT SvTSv ⎛ ⎝⎜ ⎞ ⎠⎟
fi = − ∂Et ∂xi = At kt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ Su ∂Su ∂xi + 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ Sv ∂Sv ∂xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ fj = − ∂Et ∂x j = Atkt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ Su ∂Su ∂x j + 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ Sv ∂Sv ∂x j ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ fk = − ∂Et ∂xk = At kt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ Su ∂Su ∂xk + 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ Sv ∂Sv ∂xk ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ Forces ∂fi ∂x j = ∂fj ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ = Atkt ∂Su ∂xi ∂Su ∂x j SuSuT SuTSu + 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ I − SuSuT SuTSu ⎛ ⎝⎜ ⎞ ⎠⎟ ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ + Atkt ∂Sv ∂xi ∂Sv ∂x j SvSvT SvTSv + 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ I − SvSvT SvTSv ⎛ ⎝⎜ ⎞ ⎠⎟ ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ∂fi ∂xk = ∂ fk ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ = Atkt ∂Su ∂xi ∂Su ∂xk SuSuT SuTSu + 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ I − SuSuT SuTSu ⎛ ⎝⎜ ⎞ ⎠⎟ ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ + At kt ∂Sv ∂xi ∂Sv ∂xk SvSvT SvTSv + 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ I − SvSvT SvTSv ⎛ ⎝⎜ ⎞ ⎠⎟ ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ∂fj ∂xk = ∂ fk ∂x j ⎛ ⎝⎜ ⎞ ⎠⎟ = Atkt ∂Su ∂x j ∂Su ∂xk SuSuT SuTSu + 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ I − SuSuT SuTSu ⎛ ⎝⎜ ⎞ ⎠⎟ ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ + Atkt ∂Sv ∂x j ∂Sv ∂xk SvSvT SvTSv + 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ I − SvSvT SvTSv ⎛ ⎝⎜ ⎞ ⎠⎟ ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ Jacobians ∂Su ∂xi = vij − vik 2A ∂Sv ∂xi = uik − uij 2A ∂Su ∂x j = vik 2A ∂Su ∂xk = −vij 2A ∂Sv ∂x j = − uik 2A ∂Sv ∂xk = uij 2A
Shear Force & Jacobian
for a Triangular Spring
Shear “Triangular” Spring
Replace
S
u→ S
(
u+ S
v)
S
v→ S
(
u− S
v)
1
→ 2
Et = At kt 2(
Su −1)
2 + At kt 2(
Sv −1)
2 fi = − ∂Et ∂xi = Atkt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ Su ∂Su ∂xi + 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ Sv ∂Sv ∂xi ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = Atkt ∂Su ∂xi ∂Su ∂x j SuSuT SuTSu + Atkt 1− 1 Su ⎛ ⎝⎜ ⎞ ⎠⎟ ∂Su ∂xi ∂Su ∂x j I − SuSuT SuTSu ⎛ ⎝⎜ ⎞ ⎠⎟ (elastic energy) (force) (Jacobian) ∂fi ∂x j +Atkt ∂Sv ∂xi ∂Sv ∂x j SvSvT SvTSv + At kt 1− 1 Sv ⎛ ⎝⎜ ⎞ ⎠⎟ ∂Sv ∂xi ∂Sv ∂x j I − SvSvT SvTSv ⎛ ⎝⎜ ⎞ ⎠⎟ t : triangle index(
)
1: rest stretch ratio
(
)
Caution) Shearing force may be unstable espetially using without stretching force. Also, shearing force cannot detect reverse triangle.
Bend Force & Jacobian
for a Triangular Spring
x1 x2 x3 x4 x34 = x4 − x3 : bending element (elastic energy) E = k 2
θ
2 (
θ
: the angle between triangle x134 and triangle x243) n1 n2 n1 = x13 × x14 = x
(
3 − x1)
× x(
4 − x1)
n2 = x24 × x23 = x(
4 − x2)
× x(
3 − x2)
cosθ
= n1 ⋅n2 n1 ⋅ n2 ⇔θ
= cos −1 n1 ⋅n2 n1 ⋅ n2 ⎛ ⎝⎜ ⎞ ⎠⎟fi = − ∂E ∂xi = − ∂∂xi k 2
θ
2 ⎛ ⎝⎜ ⎞⎠⎟ = −kθ
∂x∂θ
i = kθ
sinθ
∂ ∂xi(
cosθ
)
∵ ∂ ∂xi(
cosθ
)
= −sinθ
∂θ
∂xi = kθ
sinθ
⋅ ∂∂xi n1 ⋅n2 n1 ⋅ n2 ⎛ ⎝⎜ ⎞ ⎠⎟ ∵cosθ
= n1 ⋅n2 n1 ⋅ n2 ∂ ∂xi n1 ⋅n2 n1 ⋅ n2 ⎛ ⎝⎜ ⎞ ⎠⎟ = ∂ ∂xi(
n1 ⋅n2)
⎡ ⎣ ⎢ ⎤ ⎦ ⎥⋅ n(
1 ⋅ n2)
− n(
1 ⋅n2)
⋅ ∂∂x i n1 ⋅ n2(
)
⎡ ⎣ ⎢ ⎤ ⎦ ⎥ n1 2 ⋅ n2 2 ∵ ∂ ∂x f g ⎛ ⎝⎜ ⎞ ⎠⎟ = ∂ f ∂x g − f ∂ g ∂x g2 ∂ ∂xi(
n1 ⋅n2)
= ∂ n1 ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ T n2 + ∂n2 ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ T n1 ∂ ∂xi(
n1 ⋅ n2)
= ∂ n1 ∂xi ⋅ n2 + n1 ⋅ ∂ n2 ∂xi = ∂ n1 ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ T n1 n1 ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥⋅ n2 + n1 ⋅ ∂ n2 ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ T n2 n2 ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ∵ ∂( u ) ∂w = ∂ u ∂w ⎛ ⎝⎜ ⎞⎠⎟ T u u = n2 n1 ⋅ ∂ n1 ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ T n1 ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ + n1 n2 ⋅ ∂ n2 ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ T n2 ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ∵ ∂(u⋅v) ∂w = ∂ u ∂w ⎛ ⎝⎜ ⎞⎠⎟ T v + ∂v ∂w ⎛ ⎝⎜ ⎞⎠⎟ T u ∴fi = kθ
sinθ
1 n1 ⋅ n2 ∂n1 ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ T n2 + 1 n1 ⋅ n2 ∂n2 ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ T n1 − n1 ⋅n2 n1 2 ⋅ n2 2 n2 n1 ∂n1 ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ T n1 − n1 ⋅n2 n1 2 ⋅ n2 2 n1 n2 ∂n2 ∂xi ⎛ ⎝⎜ ⎞ ⎠⎟ T n2 ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥from ∂(u × v) ∂w = u * ∂v ∂w − v * ∂u ∂w ∂n1 ∂xi = ∂∂xi ⎡⎣
(
x3 − x1)
× x(
4 − x1)
⎤⎦ = x(
3 − x1)
* ∂ ∂xi(
x4 − x1)
− x(
4 − x1)
* ∂ ∂xi(
x3 − x1)
∂n2 ∂xi = ∂∂xi ⎡⎣(
x4 − x2)
× x(
3 − x2)
⎤⎦ = x(
4 − x2)
* ∂ ∂xi(
x3 − x2)
− x(
3 − x2)
* ∂ ∂xi(
x4 − x2)
∂n1 ∂x1 = x(
3 − x1)
* ∂ ∂x1(
x4 − x1)
− x(
4 − x1)
* ∂ ∂x1(
x3 − x1)
= − x(
3 − x1)
* + x(
4 − x1)
* = x(
4 − x3)
* = x*34 ∴ ∂n1 ∂x1 ⎛ ⎝⎜ ⎞ ⎠⎟ T = −x*34 ∂n1 ∂x2 = x(
3 − x1)
* ∂ ∂x2(
x4 − x1)
− x(
4 − x1)
* ∂ ∂x2(
x3 − x1)
= 0 − 0 = 0 ∴ ∂n1 ∂x2 ⎛ ⎝⎜ ⎞ ⎠⎟ T = 0 ∂n1 ∂x3 = x(
3 − x1)
* ∂ ∂x3(
x4 − x1)
− x(
4 − x1)
* ∂ ∂x3(
x3 − x1)
= 0 − x(
4 − x1)
* = −x14* ∴ ∂n1 ∂x3 ⎛ ⎝⎜ ⎞ ⎠⎟ T = x14* ∂n1 ∂x4 = x(
3 − x1)
* ∂ ∂x4(
x4 − x1)
− x(
4 − x1)
* ∂ ∂x4(
x3 − x1)
= x(
3 − x1)
* − 0 = x13* ∴ ∂n1 ∂x4 ⎛ ⎝⎜ ⎞ ⎠⎟ T = −x13* ∂n2 ∂x1 = x(
4 − x2)
* ∂ ∂x1(
x3 − x2)
− x(
3 − x2)
* ∂ ∂x1(
x4 − x2)
= 0 − 0 = 0 ∴ ∂n2 ∂x1 ⎛ ⎝⎜ ⎞ ⎠⎟ T = 0 ∂n2 ∂x2 = x(
4 − x2)
* ∂ ∂x2(
x3 − x2)
− x(
3 − x2)
* ∂ ∂x2(
x4 − x2)
= − x(
4 − x2)
* + x(
3 − x2)
* = x(
3 − x4)
* = −x*34 ∴ ∂n2 ∂x2 ⎛ ⎝⎜ ⎞ ⎠⎟ T = x*34 ∂n2 ∂x3 = x(
4 − x2)
* ∂ ∂x3(
x3 − x2)
− x(
3 − x2)
* ∂ ∂x3(
x4 − x2)
= x(
4 − x2)
* − 0 = −x*24 ∴ ∂n2 ∂x3 ⎛ ⎝⎜ ⎞ ⎠⎟ T = x*24 ∂n2 ∂x4 = x(
4 − x2)
* ∂ ∂x4(
x3 − x2)
− x(
3 − x2)
* ∂ ∂x4(
x4 − x2)
= 0 − x(
3 − x2)
* = −x*23 ∴ ∂n2 ∂x4 ⎛ ⎝⎜ ⎞ ⎠⎟ T = x*23f1 = kθ sinθ 1 n1 ⋅ n2 ∂n1 ∂x1 ⎛ ⎝⎜ ⎞ ⎠⎟ T n2 + 1 n1 ⋅ n2 ∂n2 ∂x1 ⎛ ⎝⎜ ⎞ ⎠⎟ T n1 − n1 ⋅n2 n1 2 ⋅ n2 2 n2 n1 ∂n1 ∂x1 ⎛ ⎝⎜ ⎞ ⎠⎟ T n1 − n1 ⋅n2 n1 2 ⋅ n2 2 n1 n2 ∂n2 ∂x1 ⎛ ⎝⎜ ⎞ ⎠⎟ T n2 ⎡ ⎣ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ = kθ sinθ 1 n1 ⋅ n2 −x34 *