Curvature#
Discrete differential geometry tools for computing intrinsic and extrinsic curvatures on simplicial manifolds.
Two kinds of curvature are provided:
- Gaussian Curvature (intrinsic)
Computed through the angle defect method: \(K_i = (\theta_{\text{full}} - \sum \theta_{ij}) / A_i^*\), where \(A_i^*\) is the dual (Voronoi) area around vertex \(i\). Gaussian curvature is an intrinsic property (Gauss’s Theorema Egregium), so it works for any codimension. Available at both vertices and cells.
- Mean Curvature (extrinsic)
Computed through the cotangent Laplacian method: \(H_i = \|L \mathbf{x}\|_i / (2 A_i^*)\). Requires codimension 1 (the mesh must have well-defined normal vectors).
Both curvatures are also accessible as cached properties on the
Mesh class (mesh.gaussian_curvature_vertices,
mesh.mean_curvature_vertices).
from physicsnemo.mesh.primitives.surfaces import sphere_icosahedral
mesh = sphere_icosahedral.load(subdivisions=3)
# Via standalone functions
from physicsnemo.mesh.curvature import gaussian_curvature_vertices, mean_curvature_vertices
K = gaussian_curvature_vertices(mesh)
H = mean_curvature_vertices(mesh)
# Or via Mesh properties (equivalent, cached)
K = mesh.gaussian_curvature_vertices
H = mesh.mean_curvature_vertices
API Reference#
Curvature computation for simplicial meshes.
This module provides discrete differential geometry tools for computing intrinsic and extrinsic curvatures on n-dimensional simplicial manifolds.
Gaussian Curvature (Intrinsic): - Angle defect method: K = (full_angle - Σ angles) / voronoi_area - Works for any codimension (intrinsic property) - Measures intrinsic geometry (Theorema Egregium)
Mean Curvature (Extrinsic): - Cotangent Laplacian method: H = ||L @ points|| / (2 * voronoi_area) - Requires codimension-1 (needs normal vectors) - Measures extrinsic bending
Example
>>> from physicsnemo.mesh.curvature import gaussian_curvature_vertices, mean_curvature_vertices
>>> from physicsnemo.mesh.primitives.surfaces import sphere_icosahedral
>>> mesh = sphere_icosahedral.load(subdivisions=2)
>>>
>>> # Compute Gaussian curvature
>>> K = gaussian_curvature_vertices(mesh)
>>>
>>> # Compute mean curvature (codimension-1 only)
>>> H = mean_curvature_vertices(mesh)
>>>
>>> # Or use Mesh properties:
>>> K = mesh.gaussian_curvature_vertices
>>> H = mesh.mean_curvature_vertices