Skip to content

Instantly share code, notes, and snippets.

@pv
Last active February 12, 2021 19:10
Show Gist options
  • Save pv/8037100 to your computer and use it in GitHub Desktop.
Save pv/8037100 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy.spatial import Voronoi"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def voronoi_finite_polygons_2d(vor, radius=None):\n",
" \"\"\"\n",
" Reconstruct infinite voronoi regions in a 2D diagram to finite\n",
" regions.\n",
"\n",
" Parameters\n",
" ----------\n",
" vor : Voronoi\n",
" Input diagram\n",
" radius : float, optional\n",
" Distance to 'points at infinity'.\n",
"\n",
" Returns\n",
" -------\n",
" regions : list of tuples\n",
" Indices of vertices in each revised Voronoi regions.\n",
" vertices : list of tuples\n",
" Coordinates for revised Voronoi vertices. Same as coordinates\n",
" of input vertices, with 'points at infinity' appended to the\n",
" end.\n",
"\n",
" \"\"\"\n",
"\n",
" if vor.points.shape[1] != 2:\n",
" raise ValueError(\"Requires 2D input\")\n",
"\n",
" new_regions = []\n",
" new_vertices = vor.vertices.tolist()\n",
"\n",
" center = vor.points.mean(axis=0)\n",
" if radius is None:\n",
" radius = vor.points.ptp().max()*2\n",
"\n",
" # Construct a map containing all ridges for a given point\n",
" all_ridges = {}\n",
" for (p1, p2), (v1, v2) in zip(vor.ridge_points, vor.ridge_vertices):\n",
" all_ridges.setdefault(p1, []).append((p2, v1, v2))\n",
" all_ridges.setdefault(p2, []).append((p1, v1, v2))\n",
"\n",
" # Reconstruct infinite regions\n",
" for p1, region in enumerate(vor.point_region):\n",
" vertices = vor.regions[region]\n",
"\n",
" if all([v >= 0 for v in vertices]):\n",
" # finite region\n",
" new_regions.append(vertices)\n",
" continue\n",
"\n",
" # reconstruct a non-finite region\n",
" ridges = all_ridges[p1]\n",
" new_region = [v for v in vertices if v >= 0]\n",
"\n",
" for p2, v1, v2 in ridges:\n",
" if v2 < 0:\n",
" v1, v2 = v2, v1\n",
" if v1 >= 0:\n",
" # finite ridge: already in the region\n",
" continue\n",
"\n",
" # Compute the missing endpoint of an infinite ridge\n",
"\n",
" t = vor.points[p2] - vor.points[p1] # tangent\n",
" t /= np.linalg.norm(t)\n",
" n = np.array([-t[1], t[0]]) # normal\n",
"\n",
" midpoint = vor.points[[p1, p2]].mean(axis=0)\n",
" direction = np.sign(np.dot(midpoint - center, n)) * n\n",
" far_point = vor.vertices[v2] + direction * radius\n",
"\n",
" new_region.append(len(new_vertices))\n",
" new_vertices.append(far_point.tolist())\n",
"\n",
" # sort region counterclockwise\n",
" vs = np.asarray([new_vertices[v] for v in new_region])\n",
" c = vs.mean(axis=0)\n",
" angles = np.arctan2(vs[:,1] - c[1], vs[:,0] - c[0])\n",
" new_region = np.array(new_region)[np.argsort(angles)]\n",
"\n",
" # finish\n",
" new_regions.append(new_region.tolist())\n",
"\n",
" return new_regions, np.asarray(new_vertices)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# make up data points\n",
"np.random.seed(1234)\n",
"points = np.random.rand(15, 2)\n",
"\n",
"# compute Voronoi tesselation\n",
"vor = Voronoi(points)\n",
"\n",
"# plot\n",
"regions, vertices = voronoi_finite_polygons_2d(vor)\n",
"print \"--\"\n",
"print regions\n",
"print \"--\"\n",
"print vertices\n",
"\n",
"# colorize\n",
"for region in regions:\n",
" polygon = vertices[region]\n",
" plt.fill(*zip(*polygon), alpha=0.4)\n",
"\n",
"plt.plot(points[:,0], points[:,1], 'ko')\n",
"plt.axis('equal')\n",
"plt.xlim(vor.min_bound[0] - 0.1, vor.max_bound[0] + 0.1)\n",
"plt.ylim(vor.min_bound[1] - 0.1, vor.max_bound[1] + 0.1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"--\n",
"[[10, 15, 14, 21, 20], [19, 7, 12, 17], [22, 23, 4, 3, 0], [24, 14, 16, 18, 25], [5, 26, 27], [9, 1, 0, 3, 2, 8], [12, 7, 6, 4, 3, 2, 11], [13, 8, 2, 11], [28, 29, 0, 1], [18, 19, 7, 6, 5, 30, 31], [17, 12, 11, 13, 15, 14, 16], [32, 1, 9, 10, 33], [34, 35, 5, 6, 4], [19, 17, 16, 18], [15, 10, 9, 8, 13]]\n",
"--\n",
"[[ 0.51204146 0.28170809]\n",
" [ 0.31568864 0.2231658 ]\n",
" [ 0.60181497 0.48198612]\n",
" [ 0.61195783 0.46638446]\n",
" [ 0.76349576 0.49961565]\n",
" [ 0.86163554 0.77300743]\n",
" [ 0.82428491 0.74711566]\n",
" [ 0.5955872 0.86737793]\n",
" [ 0.3398531 0.5360898 ]\n",
" [ 0.20717026 0.45505837]\n",
" [ 0.19839983 0.46568522]\n",
" [ 0.54203769 0.60556533]\n",
" [ 0.52991347 0.64525971]\n",
" [ 0.34632775 0.58619376]\n",
" [ 0.28095359 0.68979933]\n",
" [ 0.27956806 0.65401536]\n",
" [ 0.32776593 0.71199644]\n",
" [ 0.40994669 0.69667456]\n",
" [ 0.41517255 1.51501742]\n",
" [ 0.46233568 1.32637502]\n",
" [-1.51846216 1.25291487]\n",
" [-1.42673123 1.49674306]\n",
" [ 1.80180548 -1.09809421]\n",
" [ 2.5145059 -0.20841621]\n",
" [-1.42673123 1.49674306]\n",
" [ 0.11182282 3.37923966]\n",
" [ 2.73878052 0.56402822]\n",
" [ 0.92996562 2.66051282]\n",
" [-0.89071967 -1.23008044]\n",
" [ 1.80180548 -1.09809421]\n",
" [ 0.92996562 2.66051282]\n",
" [ 0.11182282 3.37923966]\n",
" [-0.89071967 -1.23008044]\n",
" [-1.51846216 1.25291487]\n",
" [ 2.5145059 -0.20841621]\n",
" [ 2.73878052 0.56402822]]\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
"(-0.086231550409317764, 0.98264119063611655)"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nNg4a8fQa/uAqO1CG5l0NpkETchc5xU8Xk7Fo+prdjKarrYvr/dcJDBx/I8d0UigUzM/NRZ+ejub0\naXZv2cLDUVHcl5WF0sq79Iwmk11snpmJDtce5kjdkUndd8Ig9vf3p6+vDwCdTof6trms73znO3z6\n6af8/e9/57nnnuO999676/ErV/5kkmXPLCpVBEsKvkVv7xXKj3/I1r1/IDg3hYylRajmzJG6vDHJ\nx5jjlU+ikU//JDdzaDSaESEMw0Gs0WgIDA/E3dudsgNlbHhlAx3Nt4X1jZ+tGcYXKi4wRyXNfx8P\nDw9yCwroTU9ny81denFxLM3MtHjufSzGwUGcZWJawhryE/PJT8y/9c+vfvzqmPed8PvIfffdx9mz\nZ4HhkcyKFStuvYlaW1txc3Pjueee4+rVq5bWPSN5e8+hYOHXeDTvl7hX+7Hz3//CrvVv037Jfo7f\nuV3xmjUEREWNuE0dGUnx6vH7yppMJgauXZvUZg7TGMf6DA4OYjQZcfN0Q/OuZkQIw3AQazZoJnx+\nS7TVtBEWEmbV15iIt7c3+UuWEHvffWzo7eX5Dz5gz9mzDFpwHNJYBkwmZM5i8ZTUJvwv8Oyzz7J2\n7Vo2btxIc3Mzq1at4hvf+AbvvvsuTz/9NK+99hqurq5873vfs0W9Dmu4Uf2zZBsfp6LyE/b9+i28\nkoNIKyki3I4W+d+cB9asX49pYAC5qyvFq1dPOD+su3oVd4ViUnON8jGO9XF2dsbF1QW5XI5pcPTQ\nMRmnP4xuMugN9FzuIWJehNVe416oVCoKli2jvb2d9Td26T2RkkJecvK0zekOHxzq2Kt8ZoIJg9jJ\nyYmXXnoJgCeffBKAd999F4DnnnvOiqXNTAqFB3OzHyfDtJLq6lI+/a9NnIlSkryskJjUVLu4aJJR\nUjKp5Wq302m1k15DXFxcTEdHx4jpCbVazYIFC2i/NnwNQu4y+q+mXGG90VtTVRMqb5XdtUINDAwk\n8P77aW5u5o+nT7OltpYn09KYNw0nzUzHCc6C5cR3EonI5QrS0x8kNfV+zp3bT+W6TygP3ENSSQGJ\nc+faRSDfi3vZVZdx43SJO1dN+Pn5oW3SAlD8dDEdzR0jpifUYWqKn5r62WwTaaluISRQ+g0WYwkL\nCyMsLIyGhgZeLSsjvrqaJ7KySJviLj2TycTOuhrqrjXyyr4X8ZKrUMr88XH1w1/pj0qpuvU/R/t9\n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\n",
"text": [
"<matplotlib.figure.Figure at 0x9e0a96c>"
]
}
],
"prompt_number": 3
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment