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).
Georgy Voronoi 1868 - 1908
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
Boris Delaunay 1890 - 1980
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}\]
Brook Taylor (1685-1731)
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