Creating smooth surface models with ElasticSurfaceEmbedding.jl

1.7K Views

July 04, 23

スライド概要

https://pretalx.com/juliacon2023/talk/RBHAER/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Creating smooth surface models with ElasticSurfaceEmbedding.jl Yuto Horikawa (@Hyrodium) 2023-07-28

2.

View slides online https://www.docswell.com/s/hyrodium/5JL8EQ-JuliaCon2023 1

3.

About me - ➀ Name • Yuto Horikawa • @Hyrodium (GitHub, Twitter, bsky, etc.) I'm a maintainer of: • Rotations.jl • StaticArrays.jl • Quaternions.jl • FastGaussQuadrature.jl • IntervalSets.jl • ImageClipboard.jl • BasicBSpline.jl • ElasticSurfaceEmbedding.jl 2

4.

About me - ➁ Creating mathematical handicrafts is my lifework! 3

5.

Contents 1. Overview 2. Our formulation framework 3. More topics on the weaving theory 4. Results 4

6.

Contents 1. Overview 2. Our formulation framework 3. More topics on the weaving theory 4. Results 5

7.

Overview (1) Divide the surface into strips (2) Embed the strips onto a flat plane (3) Cut out the embedded strips from a paper (4) Weave the strips together 6

8.

Overview (1) Divide the surface into strips (2) Embed the strips onto a flat plane (3) Cut out the embedded strips from a paper (4) Weave the strips together 7

9.

Overview (1) Divide the surface into strips (2) Embed the strips onto a flat plane (3) Cut out the embedded strips from a paper (4) Weave the strips together 8

10.

Overview (1) Divide the surface into strips (2) Embed the strips onto a flat plane (3) Cut out the embedded strips from a paper (4) Weave the strips together 9

11.

Overview (1) Divide the surface into strips (2) Embed the strips onto a flat plane (3) Cut out the embedded strips from a paper (4) Weave the strips together 10

12.

Overview (1) Divide the surface into strips (2) Embed the strips onto a flat plane (3) Cut out the embedded strips from a paper (4) Weave the strips together 11

13.

Overview (1) Divide the surface into strips (2) Embed the strips onto a flat plane (3) Cut out the embedded strips from a paper (4) Weave the strips together Questions: • How can we characterize the embedded shapes? • How can we calculate the shapes? 12

14.

Overview (1) Divide the surface into strips (2) Embed the strips onto a flat plane (3) Cut out the embedded strips from a paper (4) Weave the strips together Questions: • How can we characterize the embedded shapes? • How can we calculate the shapes with Julia? 13

15.
[beta]
Let's start with code!

1
2
3
4
5
6
7
8
9
10
11
12

using ElasticSurfaceEmbedding
using IntervalSets
using StaticArrays
# Overload the shape definition
ElasticSurfaceEmbedding.surface(x,y) =
SVector(x, y, x^2+y^2)
# (1) split the surface into strips
dom = [(-1..1, (i-1)/10..i/10)
for i in 1:10]
# (2) Embed the strips onto a plane
res = auto_allsteps(dom)
export_pinned_steps("paraboloid", res)

(2) Embed the
strips onto a
flat plane

14

16.
[beta]
Let's start with code!

1
2
3
4
5
6
7
8
9
10
11
12

using ElasticSurfaceEmbedding
using IntervalSets
using StaticArrays
# Overload the shape definition
ElasticSurfaceEmbedding.surface(x,y) =
SVector(x, y, x^2+y^2)
# (1) split the surface into strips
dom = [(-1..1, (i-1)/10..i/10)
for i in 1:10]
# (2) Embed the strips onto a plane
res = auto_allsteps(dom)
export_pinned_steps("paraboloid", res)

(2) Embed the
strips onto a
flat plane

Define the shape of the target surface

15

17.
[beta]
Let's start with code!

1
2
3
4
5
6
7
8
9
10
11
12

using ElasticSurfaceEmbedding
using IntervalSets
using StaticArrays
# Overload the shape definition
ElasticSurfaceEmbedding.surface(x,y) =
SVector(x, y, x^2+y^2)
# (1) split the surface into strips
dom = [(-1..1, (i-1)/10..i/10)
for i in 1:10]
# (2) Embed the strips onto a plane
res = auto_allsteps(dom)
export_pinned_steps("paraboloid", res)

(2) Embed the
strips onto a
flat plane

Define the domains of the strips

16

18.
[beta]
Let's start with code!

1
2
3
4
5
6
7
8
9
10
11
12

using ElasticSurfaceEmbedding
using IntervalSets
using StaticArrays
# Overload the shape definition
ElasticSurfaceEmbedding.surface(x,y) =
SVector(x, y, x^2+y^2)
# (1) split the surface into strips
dom = [(-1..1, (i-1)/10..i/10)
for i in 1:10]
# (2) Embed the strips onto a plane
res = auto_allsteps(dom)
export_pinned_steps("paraboloid", res)

(2) Embed the
strips onto a
flat plane

Calculate the embeddings of strips

17

19.
[beta]
Let's start with code!

1
2
3
4
5
6
7
8
9
10
11
12

using ElasticSurfaceEmbedding
using IntervalSets
using StaticArrays
# Overload the shape definition
ElasticSurfaceEmbedding.surface(x,y) =
SVector(x, y, x^2+y^2)
# (1) split the surface into strips
dom = [(-1..1, (i-1)/10..i/10)
for i in 1:10]
# (2) Embed the strips onto a plane
res = auto_allsteps(dom)
export_pinned_steps("paraboloid", res)

(2) Embed the
strips onto a
flat plane

Generates SVG files in paraboloid/pinned/

18

20.

Contents 1. Overview 2. Our formulation framework 3. More topics on the weaving theory 4. Results 19

21.

Our formulation framework • Mathematical & physical modeling • 2D Riemannian manifold • Geometric nonlinear elasticity • Numerical methods • B-spline manifold • Galerkin method • Newton-Raphson method 20

22.

Mathematical & physical modeling - ➀ • Geometry • Approximate 3D medium with 2D surface • Reference state M[0] and current state M[t] are diffeomorphic with Φ • M[0] = (M, g[0] ), M[t] = (M, g[t] ) are Riemannian manifolds Curved paper strip • Elasticity • Hooke's law (material linear model) • Stress is proportional to strain • S ij = C ijkl Ekl (C : stiffness tensor) • Two types of deformations • in-plane (dominant) • out-plane (ignored) 21

23.

Mathematical & physical modeling - ➀ • Geometry • Approximate 3D medium with 2D surface • Reference state M[0] and current state M[t] are diffeomorphic with Φ • M[0] = (M, g[0] ), M[t] = (M, g[t] ) are Riemannian manifolds Curved paper strip • Elasticity • Hooke's law (material linear model) • Stress is proportional to strain • S ij = C ijkl Ekl (C : stiffness tensor) • Two types of deformations • in-plane (dominant) • out-plane (ignored) 22

24.

Mathematical & physical modeling - ➀ • Geometry • Approximate 3D medium with 2D surface • Reference state M[0] and current state M[t] are diffeomorphic with Φ • M[0] = (M, g[0] ), M[t] = (M, g[t] ) are Riemannian manifolds • Elasticity • Hooke's law (material linear model) • Stress is proportional to strain • S ij = C ijkl Ekl (C : stiffness tensor) • Two types of deformations • in-plane (dominant) • out-plane (ignored) 23

25.

Mathematical & physical modeling - ➀ • Geometry • Approximate 3D medium with 2D surface • Reference state M[0] and current state M[t] are diffeomorphic with Φ • M[0] = (M, g[0] ), M[t] = (M, g[t] ) are Riemannian manifolds • Elasticity • Hooke's law (material linear model) • Stress is proportional to strain • S ij = C ijkl Ekl (C : stiffness tensor) • Two types of deformations • in-plane (dominant) • out-plane (ignored) 24

26.

Mathematical & physical modeling - ➁ • How can we characterize the embedded shape M[t] ? • Minimize the elastic energy W of the embedding Φ ∫ √ 1 W = C ijkl Eij Ekl det g[0]ij du1 ∧ du2 i,j 2 M • Energy minimization problem leads a weak from PDE: • xi[t] : unknown functions • ξ i : arbitary test funcitons ) ( ∫ s ∂xp[t] ∂xq[t] ∂ξ r ∂x[t] ijkl δrs − g[0]ij υ[0] = 0 C δpq i j k ∂u ∂u ∂u ∂ul M 25

27.

Numerical methods • B-spline manifold • Approximate the embedded shape with piecewise polynomial xi[t] ≈ aiI N I • N I : 2D B-spline basis function • Galerkin method • Discretize PDE into nonlinear equations 0 = ajJ akK alL δij δkl AIJKL − ajJ δij B IJ =: FiI • AIJKL , B IJ : some constants • Newton-Raphson method • Solve the nonlinear equations numerically aiI = aiI − ν+1 ν ∂aiI J Fj ∂FjJ ν ν • represents ν-th iteration ν 26

28.

Contents 1. Overview 2. Our formulation framework 3. More topics on the weaving theory 4. Results 27

29.

Details of the shape computation The output of auto_allsteps(dom) was like this: 1 15: Initial state - domain: [-1, 1]×[0.2, 0.3] 2 └─16: Newton onestep - residual norm: 4.7580e-02, Δa norm: 2.2337e-02, computation 3 └─17: Newton onestep - residual norm: 2.7644e-03, Δa norm: 1.3057e-02, computati 4 └─18: Refinement - p₊:(0, 1), k₊:([-0.9166666666666667, -0.75, -0.583333333333 5 └─19: Newton onestep - residual norm: 1.2488e-03, Δa norm: 1.4208e-02, compu 6 └─20: Newton onestep - residual norm: 5.3362e-06, Δa norm: 3.5955e-04, com 7 └─21: 📌 Newton onestep - residual norm: 2.5164e-09, Δa norm: 1.9453e-06 Each step has its embedded shape and strain distribution: 15: Initial state - Approximate the embedded shape (somehow) 28

30.

Details of the shape computation The output of auto_allsteps(dom) was like this: 15: Initial state - domain: [-1, 1]×[0.2, 0.3] └─16: Newton onestep - residual norm: 4.7580e-02, Δa norm: 2.2337e-02, computation └─17: Newton onestep - residual norm: 2.7644e-03, Δa norm: 1.3057e-02, computati └─18: Refinement - p₊:(0, 1), k₊:([-0.9166666666666667, -0.75, -0.583333333333 └─19: Newton onestep - residual norm: 1.2488e-03, Δa norm: 1.4208e-02, compu └─20: Newton onestep - residual norm: 5.3362e-06, Δa norm: 3.5955e-04, com └─21: 📌 Newton onestep - residual norm: 2.5164e-09, Δa norm: 1.9453e-06 Each step has its embedded shape and strain distribution: 16: Newton onestep - Relax the shape to decrease the strain energy 29

31.

Details of the shape computation The output of auto_allsteps(dom) was like this: 15: Initial state - domain: [-1, 1]×[0.2, 0.3] └─16: Newton onestep - residual norm: 4.7580e-02, Δa norm: 2.2337e-02, computation └─17: Newton onestep - residual norm: 2.7644e-03, Δa norm: 1.3057e-02, computati └─18: Refinement - p₊:(0, 1), k₊:([-0.9166666666666667, -0.75, -0.583333333333 └─19: Newton onestep - residual norm: 1.2488e-03, Δa norm: 1.4208e-02, compu └─20: Newton onestep - residual norm: 5.3362e-06, Δa norm: 3.5955e-04, com └─21: 📌 Newton onestep - residual norm: 2.5164e-09, Δa norm: 1.9453e-06 Each step has its embedded shape and strain distribution: 17: Newton onestep - Relax the shape to decrease the strain energy 30

32.

Details of the shape computation The output of auto_allsteps(dom) was like this: 15: Initial state - domain: [-1, 1]×[0.2, 0.3] └─16: Newton onestep - residual norm: 4.7580e-02, Δa norm: 2.2337e-02, computation └─17: Newton onestep - residual norm: 2.7644e-03, Δa norm: 1.3057e-02, computati └─18: Refinement - p₊:(0, 1), k₊:([-0.9166666666666667, -0.75, -0.583333333333 └─19: Newton onestep - residual norm: 1.2488e-03, Δa norm: 1.4208e-02, compu └─20: Newton onestep - residual norm: 5.3362e-06, Δa norm: 3.5955e-04, com └─21: 📌 Newton onestep - residual norm: 2.5164e-09, Δa norm: 1.9453e-06 Each step has its embedded shape and strain distribution: 18: Refinement - More control points for more accuracy 31

33.

Details of the shape computation The output of auto_allsteps(dom) was like this: 15: Initial state - domain: [-1, 1]×[0.2, 0.3] └─16: Newton onestep - residual norm: 4.7580e-02, Δa norm: 2.2337e-02, computation └─17: Newton onestep - residual norm: 2.7644e-03, Δa norm: 1.3057e-02, computati └─18: Refinement - p₊:(0, 1), k₊:([-0.9166666666666667, -0.75, -0.583333333333 └─19: Newton onestep - residual norm: 1.2488e-03, Δa norm: 1.4208e-02, compu └─20: Newton onestep - residual norm: 5.3362e-06, Δa norm: 3.5955e-04, com └─21: 📌 Newton onestep - residual norm: 2.5164e-09, Δa norm: 1.9453e-06 Each step has its embedded shape and strain distribution: 19: Newton onestep - Relax the shape to decrease the strain energy 32

34.

Details of the shape computation The output of auto_allsteps(dom) was like this: 15: Initial state - domain: [-1, 1]×[0.2, 0.3] └─16: Newton onestep - residual norm: 4.7580e-02, Δa norm: 2.2337e-02, computation └─17: Newton onestep - residual norm: 2.7644e-03, Δa norm: 1.3057e-02, computati └─18: Refinement - p₊:(0, 1), k₊:([-0.9166666666666667, -0.75, -0.583333333333 └─19: Newton onestep - residual norm: 1.2488e-03, Δa norm: 1.4208e-02, compu └─20: Newton onestep - residual norm: 5.3362e-06, Δa norm: 3.5955e-04, com └─21: 📌 Newton onestep - residual norm: 2.5164e-09, Δa norm: 1.9453e-06 Each step has its embedded shape and strain distribution: 20: Newton onestep - Relax the shape to decrease the strain energy 33

35.

Details of the shape computation The output of auto_allsteps(dom) was like this: 15: Initial state - domain: [-1, 1]×[0.2, 0.3] └─16: Newton onestep - residual norm: 4.7580e-02, Δa norm: 2.2337e-02, computation └─17: Newton onestep - residual norm: 2.7644e-03, Δa norm: 1.3057e-02, computati └─18: Refinement - p₊:(0, 1), k₊:([-0.9166666666666667, -0.75, -0.583333333333 └─19: Newton onestep - residual norm: 1.2488e-03, Δa norm: 1.4208e-02, compu └─20: Newton onestep - residual norm: 5.3362e-06, Δa norm: 3.5955e-04, com └─21: 📌 Newton onestep - residual norm: 2.5164e-09, Δa norm: 1.9453e-06 Each step has its embedded shape and strain distribution: 21: Newton onestep - Relax the shape to decrease the strain energy 34

36.

Initial shape determination - ➀ How can we calculate this initial state of the Newton-Raphson method? 15: Initial state - Approximate the embedded shape (somehow) Next theorem is useful to construct the initial shape 35

37.

Initial shape determination - ➁ Theorem (Embedding approximation) Let C[0] be the center curve of M[0] , κ[0] be its geodesic curvature, B be the breadth from center curve of M[0] . Similarly, let C[t] be the center curve of M[t] , κ[t] be its planer curvature. If the breadth B is sufficiently small, then the following approximation is satisfied. g[t] |C ≈ g[0] |C κ[t] ≈ κ[0] (Isometric on the center curve) (The curvature is conserved) 36

38.

Strip breadth trade-offs - ➀ Paraboloid case: devide the surface into 10 strips • Large breadth: ⟨0⟩ • Increases strain E11 in paper medium* • Causes non-smooth surface model • Small breadth: • Complicates assembly process Identifying optimal breadth is essential for assembling smooth surface. ⟨0⟩ ⟨0⟩ * E11 is a coefficient of the Green's strain tensor E = Eij θ ⟨0⟩i ⊗ θ ⟨0⟩j where {θ ⟨0⟩i } is a dual orthonormal frame of the reference state M[0] . 37

39.

Strip breadth trade-offs - ➁ Theorem (Strain approximation) The stress state is approximately one-dimensional, and the principal ⟨0⟩ strain E11 can be approximated by ( ) 1 1 ⟨0⟩ E11 ≈ K[0] B 2 r2 − 2 3 if the breadth B is sufficiently small. Where K[0] is a Gaussian curvature of the surface, r is a normalized (|r| ≤ 1) breadth-directional coordinate. show_strain(dom) # predict strain, should be < 1% 38

40.

Contents 1. Overview 2. Our formulation framework 3. More topics on the weaving theory 4. Results 39

41.

Results • Paraboloid • Hyperbolic paraboloid • Helicatenoid • Stereographic projection 40

42.

Paraboloid z = x2 + y 2 41

43.

Hyperbolic paraboloid z = x2 − y 2 • The surface is doubly ruled. • Pulling the surface reminds us a straight line on the surface. 42

44.

Helicatenoid Catenoid   cosh(v) cos(u)   p[0] (u, v) =  cosh(v) sin(u)  v Helicoid   sinh(v) cos(u)   p[0] (u, v) =  sinh(v) sin(u)  u 43

45.

Helicatenoid It deforms to each other! 44

46.

Stereographic projection   2u 2 + v2 + 1 u     2v   p[0] (u, v) =  2  2 u + v + 1  2  2 u +v −1 u2 + v 2 + 1 45

47.

Thank you! The following packages helped ElasticSurfaceEmbedding.jl a lot! • FastGaussQuadrature.jl • ForwardDiff.jl • Luxor.jl • IntervalSets.jl • BasicBSpline.jl • Documenter.jl Special Gifts! Weaving kits for: • Paraboloid • Hyperbolic paraboloid • Stereographic projection 46

48.

Backup slides • Why weaving? • Swapping states • Coordinate system and notations • References 47

49.

Why weaving? - ➀ There are several ways to create surfaces: • Solid models (e.g. 3D printing) a • Combining cross-sections b • Combining paper strips • Combining strips in one-direction c • Weaving strips in hexiagonal shape d • (Weaving strips in checker pattern) a Twitter: Twitter: c Twitter: d Twitter: b @henryseg @onomahedron @jmitani @alisonmartin57 48

50.

Why weaving? - ➁ Benefits of weaving strips in checker pattern: • Easy to split the surface along with its coordinates • Enough strength • Deformable • Totally thin 49

51.

Swapping states The embedding Φ is characterized by minimizing the strain enery. • Physically correct way (left): • Φ : M[0] → S • Flat material deforms into curved strip • Computationally easy way (right): • Φ : M[0] → E2 • Curved strip deforms into flat material • Tension / Compression are swapped • Strain energies of Φ are equivalent 50

52.

Coordinate system and notations 51

53.

References • Yuto Horikawa and Ryuichi Tarumi. “Weaving paper strips for designing of general curved surface with geometrical elasticity”. In: arXiv:2211.06372 [cs] (2022). • Arthur Ogawa. “Helicatenoid”. In: Mathematica Journal 2.2 (1992). • Javier Bonet and Richard D Wood. “Nonlinear Continuum Mechanics for Finite Element Analysis”. In: (2008). • Shigeyuki Morita. Geometry of Differential Forms. Translations of Mathematical Monographs v. 201. Providence, R.I: American Mathematical Society, 2001. ISBN : 978-0-8218-1045-3. 52