Delaunay Mesh: A triangulation of a set of points where no point lies inside the circumcircle of any triangle, avoiding skinny triangles by maximizing the minimum angle.
Voronoi Mesh: A partitioning of space into regions (Voronoi cells), each associated with one point, containing all locations closer to that point than to any other.
Duality Relationship -- Voronoi Mesh and Delaunay Mesh encode the same information in complementary ways:
◼
Delaunay vertices ↔ Voronoi cells.
◼
Delaunay edges ↔ Voronoi edges (orthogonal).
◼
Delaunay triangles ↔ Voronoi vertices (each Voronoi vertex is the circumcenter of its corresponding Delaunay triangle).
Define a Strauss Point Process, which is a type of spatial point process used in statistical mechanics and spatial statistics.
μ=10000;(*Intensity*)γ=0.001;(*Interactionparameter,0≤γ≤1*)rs=0.05;(*Interactionradius*)d=2;(*Dimension*)SeedRandom[7];
straussProcess=StraussPointProcess[μ,γ,rs,d];
Define the region where the point process will be simulated. The region is a rectangle with corners at (0, 0) and (3, 3).
region=Rectangle[{0,0},3{1,1}];
Generate a random point configuration using the previously defined Strauss Point Process within the specified region. The points are obtained using a Markov Chain Monte Carlo (MCMC) method with a specified run length.
points=RandomPointConfiguration[straussProcess,region,Method->{"MCMC","LengthOfRun"50000}]["Points"];
Define a function that computes a circular path based on a given radius and center. This function will be used to create circular orbits for each point in the configuration.
In[]:=
ClearAll[cir]cir[r_,{a_,b_}][t_]:=a+
r/2
+r
Cos[2Pit],b+r/2
+r
Sin[2Pit]Define function to calculate orbits for each point in the configuration. The orbits are influenced by the distance of each point from the center of the region (1.5, 1.5) and a scaling factor `s`.
In[]:=
ClearAll[orbs]orbs[s_,t_]=cir[.01,#][t+2PiNorm[#-{1.5,1.5}]/s]&/@points;
Use Manipulate to display a dynamic visualization of the orbits. The visualization includes both Delaunay and Voronoi meshes.
In[]:=
Manipulate[Show[HighlightMesh[DelaunayMesh[orbs[s,-t]],{Style[0,White,PointSize[.01]],Style[1,Dotted,White,Opacity[.9]],Style[2,None]},Background->Black],HighlightMesh[VoronoiMesh[orbs[s,-t],{3{0,1},3{0,1}}],{Style[0,None],Style[1,Directive[,Thickness[.003]]],Style[2,None]},Background->Black],PlotRange->r+(3-2r){{0,1},{0,1}},ImageSize->550],{t,0,1},{s,.5,10},{r,.2,1.3},SaveDefinitions->True,FrameMargins0]
Create a video from the interactive visualization using ManipulateVideo.
ManipulateVideo[Show[HighlightMesh[DelaunayMesh[orbs[s,-t]],{Style[0,White,PointSize[.01]],Style[1,Dotted,Directive[White,Thickness[.003]],Opacity[1]],Style[2,None]},Background->Black],HighlightMesh[VoronoiMesh[orbs[s,-t],{3{0,1},3{0,1}}],{Style[0,None],Style[1,Directive[,Thickness[.003]]],Style[2,None]},Background->Black],PlotRange->r+(3-2r){{0,1},{0,1}},ImageSize->550],{t,<|0->0,14->.4×14,15->.4×14+.2,20->.4×14+.2×5,21->.4×14+.2×5+.4,35->7+.4×14|>},{s,<|0->3.36,2->3.36,3->6,7->6,8->2,21->2,23->8,25->8,32->8,35->3.36|>},{r,<|0->.2,10->.2,14->1,17->1,18->.77,25->.77,30->1.3,31->.77,32->.77,35->.2|>},FrameMargins0,RasterSize->1080{1,1}];
Out[]=
CITE THIS NOTEBOOK
CITE THIS NOTEBOOK
Animating Voronoi-Delaunay mesh dynamics with circular orbits on Strauss point process
by Vitaliy Kaurov
Wolfram Community, STAFF PICKS, April 16, 2025
https://community.wolfram.com/groups/-/m/t/3444884
by Vitaliy Kaurov
Wolfram Community, STAFF PICKS, April 16, 2025
https://community.wolfram.com/groups/-/m/t/3444884