Given a set of 2D sample points \(\{\mathbf{p}_1, \ldots , \mathbf{p}_n\}\)
Partition the plane by assigning each 2D point \(\mathbf{x}\) to its nearest sample.
All points assigned to \(\mathbf{p}_i\) form its Voronoi cell\[\mathcal{V}(\mathbf{p}_i) = \left\{ \mathbf{x} \in \mathbb{R}^2 : ||\mathbf{x}-\mathbf{p}_i|| \leq ||\mathbf{x}-\mathbf{p}_j|| \quad \forall j \neq i \right\}\]
Edges and vertices of these cells form the Voronoi diagram (VD).
Last week: Delaunay Triangulation
The dual graph of the Voronoi diagram is a planar straight line graph, the Delaunay triangulation (DT)
DT maximizes the minimum angle
Circumcircles of DT triangles are empty
DT triangles are duals of VD vertices
Criterion can be used for DT construction
Last week: Incremental Algorithm
For each point \(\mathbf{p}_i\)
Find containing triangle
Insert point into triangle (1-to-3 split)
Flip edges to re-establish Delaunay property
Check whether an edge is Delaunay by testing circumcircles of its incident triangles
Sample function \(f(x,y,t)\) on a regular grid with grid spacing \(h\) and time step \(\delta_t\)\[f[i,j,t] \;=\; f\left(i \cdot h, j \cdot h, t \cdot \delta t \right) \]\[i=1, \dots, n \quad j=1, \dots, m \quad t=0, 1, 2, \dots\]
Finite Differences
Approximate \(f(x+h)\) from Taylor series \[ \begin{align}
f(x+h) &\;=\; f(x) + h f'(x) + \frac{h^2}{2!} f''(x) + \ldots \\
&\;\approx\; f(x) + h f’(x)
\end{align}\]
Approximate \(f'(x)\) as \[f'(x) \;\approx\; \frac{f(x+h) - f(x)}{h}\]
Let’s write the position update in matrix notation
Write all points \(\vec{p}_i^{(t)}\) in a large vector/matrix: \[\vec{P}^{(t)} = \trans{\left( \vec{p}_1^{(t)}, \ldots, \vec{p}_n^{(t)} \right)} \in \R^{n\times 3}\]
Matrix version of explicit integration \[\vec{P}^{(t+1)} = (\vec{I} + \delta t \, \lambda \vec{L}) \, \vec{P}^{(t)}\]
Matrix version of implicit integration \[(\vec{I} - \delta t \, \lambda \vec{L}) \, \vec{P}^{(t+1)} = \vec{P}^{(t)}\]
requires small \(\delta t \lambda\) for stability!
Solve linear system in each iteration \[(\vec{I} - \delta t \, \lambda \vec{L}) \vec{P}^{(t+1)} = \vec{P}^{(t)}\]
Which solvers do you know?
Gaussian elimination? 💣
LU factorization? 💣
Analyze the properties of your system matrix!
very sparse (about 7 non-zeros per row) 😄
but not symmetric 😢
How to solve the linear system?
Matrix \(\vec{L} = \vec{DM}\) is not symmetric because of \(\vec{D}\).
Symmetrize it by multiplying with \(\vec{D}^{-1}\) from the left \[(\vec{D}^{-1} - \delta t \, \lambda \vec{M}) \vec{P}^{(t+1)} = \vec{D}^{-1} \vec{P}^{(t)}\]
Now the linear system is
sparse 😄
symmetric 😄
positive definite 😄
We can use much more efficient solvers!
conjugate gradients 😘
sparse Cholesky factorization 😍
Try it yourself!
Try it yourself!
Try it yourself!
Try it yourself!
Literature
Botsch et al., Polygon Mesh Processing, AK Peters, 2010
Chapter 4
Taubin, A Signal Processing Approach to Fair Surface Design, SIGGRAPH 1995
Desbrun, Meyer, Schröder, Barr: Implicit Fairing of Irregular Meshes using Diffusion and Curvature Flow, SIGGRAPH 1999
Literature
Botsch et al., Polygon Mesh Processing, AK Peters, 2010
Chapter 4
Taubin, A Signal Processing Approach to Fair Surface Design, SIGGRAPH 1995
Desbrun, Meyer, Schröder, Barr: Implicit Fairing of Irregular Meshes using Diffusion and Curvature Flow, SIGGRAPH 1999