polylabel 0.1.9

A Rust implementation of the Polylabel algorithm
Documentation
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "from shapely.geometry import LineString, Polygon, Point, box, shape\n",
    "# from shapely.algorithms.polylabel import polylabel\n",
    "from descartes import PolygonPatch\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "initial_polygon = Polygon([\n",
    "    (0.0, 0.0),\n",
    "    (4.0, 0.0),\n",
    "    (4.0, 1.0),\n",
    "    (1.0, 1.0),\n",
    "    (1.0, 4.0),\n",
    "    (0.0, 4.0),\n",
    "    (0.0, 0.0)\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "quad_polygons = [\n",
    "    Polygon(((1, 1), (3, 1), (3, 3), (1, 3))),\n",
    "    Polygon(((0.5, 0.5), (1.5, 0.5), (1.5, 1.5), (0.5, 1.5))),\n",
    "    Polygon(((1.25, 1.25), (1.75, 1.25), (1.75, 1.75), (1.25, 1.75))),\n",
    "    Polygon(((1.625, 1.125), (1.875, 1.125), (1.875, 1.375), (1.625, 1.375))),\n",
    "    Polygon(((1.125, 1.125), (1.375, 1.125), (1.375, 1.375), (1.125, 1.375))),\n",
    "    Polygon(((1.125, 1.625), (1.375, 1.625), (1.375, 1.875), (1.125, 1.875))),\n",
    "    Polygon(((0.25, 1.25), (0.75, 1.25), (0.75, 1.75), (0.25, 1.75))),\n",
    "    Polygon(((0.125, 1.125), (0.375, 1.125), (0.375, 1.375), (0.125, 1.375))),\n",
    "    Polygon(((0.625, 1.625), (0.875, 1.625), (0.875, 1.875), (0.625, 1.875))),\n",
    "    Polygon(((0.625, 1.125), (0.875, 1.125), (0.875, 1.375), (0.625, 1.375))),\n",
    "    Polygon(((0.125, 1.625), (0.375, 1.625), (0.375, 1.875), (0.125, 1.875))),\n",
    "    Polygon(((0.25, 0.25), (0.75, 0.25), (0.75, 0.75), (0.25, 0.75))),\n",
    "    Polygon(((0.125, 0.125), (0.375, 0.125), (0.375, 0.375), (0.125, 0.375))),\n",
    "    Polygon(((0.125, 0.625), (0.375, 0.625), (0.375, 0.875), (0.125, 0.875))),\n",
    "    Polygon(((0.625, 0.125), (0.875, 0.125), (0.875, 0.375), (0.625, 0.375))),\n",
    "    Polygon(((0.625, 0.625), (0.875, 0.625), (0.875, 0.875), (0.625, 0.875))),\n",
    "    Polygon(((0.5625, 0.5625), (0.6875, 0.5625), (0.6875, 0.6875), (0.5625, 0.6875))),\n",
    "    Polygon(((1.25, 0.25), (1.75, 0.25), (1.75, 0.75), (1.25, 0.75))),\n",
    "    Polygon(((2.5, 0.5), (3.5, 0.5), (3.5, 1.5), (2.5, 1.5))),\n",
    "    Polygon(((3.25, 0.25), (3.75, 0.25), (3.75, 0.75), (3.25, 0.75))),\n",
    "    Polygon(((2.25, 0.25), (2.75, 0.25), (2.75, 0.75), (2.25, 0.75))),\n",
    "    Polygon(((0.5, 2.5), (1.5, 2.5), (1.5, 3.5), (0.5, 3.5))),\n",
    "    Polygon(((0.25, 2.25), (0.75, 2.25), (0.75, 2.75), (0.25, 2.75))),\n",
    "    Polygon(((0.25, 3.25), (0.75, 3.25), (0.75, 3.75), (0.25, 3.75))),\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "quad_polygons = [\n",
    "box(0, 0, 4, 4),\n",
    "box(0, 0, 2, 2),\n",
    "box(2, 0, 4, 2),\n",
    "box(0, 2, 2, 4),\n",
    "box(2, 2, 4, 4),\n",
    "box(0, 2, 1, 3),\n",
    "box(1, 2, 2, 3),\n",
    "box(0, 3, 1, 4),\n",
    "box(1, 3, 2, 4),\n",
    "box(1, 2, 1.5, 2.5),\n",
    "box(1.5, 2, 2, 2.5),\n",
    "box(1, 2.5, 1.5, 3),\n",
    "box(1.5, 2.5, 2, 3),\n",
    "box(1, 2, 1.25, 2.25),\n",
    "box(1.25, 2, 1.5, 2.25),\n",
    "box(1, 2.25, 1.25, 2.5),\n",
    "box(1.25, 2.25, 1.5, 2.5),\n",
    "box(1, 2.5, 1.25, 2.75),\n",
    "box(1.25, 2.5, 1.5, 2.75),\n",
    "box(1, 2.75, 1.25, 3),\n",
    "box(1.25, 2.75, 1.5, 3),\n",
    "box(1, 3, 1.5, 3.5),\n",
    "box(1.5, 3, 2, 3.5),\n",
    "box(1, 3.5, 1.5, 4),\n",
    "box(1.5, 3.5, 2, 4),\n",
    "box(1, 3, 1.25, 3.25),\n",
    "box(1.25, 3, 1.5, 3.25),\n",
    "box(1, 3.25, 1.25, 3.5),\n",
    "box(1.25, 3.25, 1.5, 3.5),\n",
    "box(1, 3.5, 1.25, 3.75),\n",
    "box(1.25, 3.5, 1.5, 3.75),\n",
    "box(1, 3.75, 1.25, 4),\n",
    "box(1.25, 3.75, 1.5, 4),\n",
    "box(0, 2, 0.5, 2.5),\n",
    "box(0.5, 2, 1, 2.5),\n",
    "box(0, 2.5, 0.5, 3),\n",
    "box(0.5, 2.5, 1, 3),\n",
    "box(0, 2, 0.25, 2.25),\n",
    "box(0.25, 2, 0.5, 2.25),\n",
    "box(0, 2.25, 0.25, 2.5),\n",
    "box(0.25, 2.25, 0.5, 2.5),\n",
    "box(0, 2.5, 0.25, 2.75),\n",
    "box(0.25, 2.5, 0.5, 2.75),\n",
    "box(0, 2.75, 0.25, 3),\n",
    "box(0.25, 2.75, 0.5, 3),\n",
    "box(0.5, 2.5, 0.75, 2.75),\n",
    "box(0.75, 2.5, 1, 2.75),\n",
    "box(0.5, 2.75, 0.75, 3),\n",
    "box(0.75, 2.75, 1, 3),\n",
    "box(0.5, 2, 0.75, 2.25),\n",
    "box(0.75, 2, 1, 2.25),\n",
    "box(0.5, 2.25, 0.75, 2.5),\n",
    "box(0.75, 2.25, 1, 2.5),\n",
    "box(0, 3, 0.5, 3.5),\n",
    "box(0.5, 3, 1, 3.5),\n",
    "box(0, 3.5, 0.5, 4),\n",
    "box(0.5, 3.5, 1, 4),\n",
    "box(0, 3, 0.25, 3.25),\n",
    "box(0.25, 3, 0.5, 3.25),\n",
    "box(0, 3.25, 0.25, 3.5),\n",
    "box(0.25, 3.25, 0.5, 3.5),\n",
    "box(0.5, 3.5, 0.75, 3.75),\n",
    "box(0.75, 3.5, 1, 3.75),\n",
    "box(0.5, 3.75, 0.75, 4),\n",
    "box(0.75, 3.75, 1, 4),\n",
    "box(0.5, 3, 0.75, 3.25),\n",
    "box(0.75, 3, 1, 3.25),\n",
    "box(0.5, 3.25, 0.75, 3.5),\n",
    "box(0.75, 3.25, 1, 3.5),\n",
    "box(0, 3.5, 0.25, 3.75),\n",
    "box(0.25, 3.5, 0.5, 3.75),\n",
    "box(0, 3.75, 0.25, 4),\n",
    "box(0.25, 3.75, 0.5, 4),\n",
    "box(2, 0, 3, 1),\n",
    "box(3, 0, 4, 1),\n",
    "box(2, 1, 3, 2),\n",
    "box(3, 1, 4, 2),\n",
    "box(3, 0, 3.5, 0.5),\n",
    "box(3.5, 0, 4, 0.5),\n",
    "box(3, 0.5, 3.5, 1),\n",
    "box(3.5, 0.5, 4, 1),\n",
    "box(3, 0, 3.25, 0.25),\n",
    "box(3.25, 0, 3.5, 0.25),\n",
    "box(3, 0.25, 3.25, 0.5),\n",
    "box(3.25, 0.25, 3.5, 0.5),\n",
    "box(3.5, 0.5, 3.75, 0.75),\n",
    "box(3.75, 0.5, 4, 0.75),\n",
    "box(3.5, 0.75, 3.75, 1),\n",
    "box(3.75, 0.75, 4, 1),\n",
    "box(3.5, 0, 3.75, 0.25),\n",
    "box(3.75, 0, 4, 0.25),\n",
    "box(3.5, 0.25, 3.75, 0.5),\n",
    "box(3.75, 0.25, 4, 0.5),\n",
    "box(3, 0.5, 3.25, 0.75),\n",
    "box(3.25, 0.5, 3.5, 0.75),\n",
    "box(3, 0.75, 3.25, 1),\n",
    "box(3.25, 0.75, 3.5, 1),\n",
    "box(2, 0, 2.5, 0.5),\n",
    "box(2.5, 0, 3, 0.5),\n",
    "box(2, 0.5, 2.5, 1),\n",
    "box(2.5, 0.5, 3, 1),\n",
    "box(2, 0, 2.25, 0.25),\n",
    "box(2.25, 0, 2.5, 0.25),\n",
    "box(2, 0.25, 2.25, 0.5),\n",
    "box(2.25, 0.25, 2.5, 0.5),\n",
    "box(2.5, 0.5, 2.75, 0.75),\n",
    "box(2.75, 0.5, 3, 0.75),\n",
    "box(2.5, 0.75, 2.75, 1),\n",
    "box(2.75, 0.75, 3, 1),\n",
    "box(2.5, 0, 2.75, 0.25),\n",
    "box(2.75, 0, 3, 0.25),\n",
    "box(2.5, 0.25, 2.75, 0.5),\n",
    "box(2.75, 0.25, 3, 0.5),\n",
    "box(2, 0.5, 2.25, 0.75),\n",
    "box(2.25, 0.5, 2.5, 0.75),\n",
    "box(2, 0.75, 2.25, 1),\n",
    "box(2.25, 0.75, 2.5, 1),\n",
    "box(0, 0, 1, 1),\n",
    "box(1, 0, 2, 1),\n",
    "box(0, 1, 1, 2),\n",
    "box(1, 1, 2, 2),\n",
    "box(0, 1, 0.5, 1.5),\n",
    "box(0.5, 1, 1, 1.5),\n",
    "box(0, 1.5, 0.5, 2),\n",
    "box(0.5, 1.5, 1, 2),\n",
    "box(0, 1, 0.25, 1.25),\n",
    "box(0.25, 1, 0.5, 1.25),\n",
    "box(0, 1.25, 0.25, 1.5),\n",
    "box(0.25, 1.25, 0.5, 1.5),\n",
    "box(0.5, 1.5, 0.75, 1.75),\n",
    "box(0.75, 1.5, 1, 1.75),\n",
    "box(0.5, 1.75, 0.75, 2),\n",
    "box(0.75, 1.75, 1, 2),\n",
    "box(0.5, 1, 0.75, 1.25),\n",
    "box(0.75, 1, 1, 1.25),\n",
    "box(0.5, 1.25, 0.75, 1.5),\n",
    "box(0.75, 1.25, 1, 1.5),\n",
    "box(0, 1.5, 0.25, 1.75),\n",
    "box(0.25, 1.5, 0.5, 1.75),\n",
    "box(0, 1.75, 0.25, 2),\n",
    "box(0.25, 1.75, 0.5, 2),\n",
    "box(0, 0, 0.5, 0.5),\n",
    "box(0.5, 0, 1, 0.5),\n",
    "box(0, 0.5, 0.5, 1),\n",
    "box(0.5, 0.5, 1, 1),\n",
    "box(0, 0, 0.25, 0.25),\n",
    "box(0.25, 0, 0.5, 0.25),\n",
    "box(0, 0.25, 0.25, 0.5),\n",
    "box(0.25, 0.25, 0.5, 0.5),\n",
    "box(0, 0.5, 0.25, 0.75),\n",
    "box(0.25, 0.5, 0.5, 0.75),\n",
    "box(0, 0.75, 0.25, 1),\n",
    "box(0.25, 0.75, 0.5, 1),\n",
    "box(0.5, 0, 0.75, 0.25),\n",
    "box(0.75, 0, 1, 0.25),\n",
    "box(0.5, 0.25, 0.75, 0.5),\n",
    "box(0.75, 0.25, 1, 0.5),\n",
    "box(0.5, 0.5, 0.75, 0.75),\n",
    "box(0.75, 0.5, 1, 0.75),\n",
    "box(0.5, 0.75, 0.75, 1),\n",
    "box(0.75, 0.75, 1, 1),\n",
    "box(0.5, 0.5, 0.625, 0.625),\n",
    "box(0.625, 0.5, 0.75, 0.625),\n",
    "box(0.5, 0.625, 0.625, 0.75),\n",
    "box(0.625, 0.625, 0.75, 0.75),\n",
    "box(1, 0, 1.5, 0.5),\n",
    "box(1.5, 0, 2, 0.5),\n",
    "box(1, 0.5, 1.5, 1),\n",
    "box(1.5, 0.5, 2, 1),\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkwAAAJMCAYAAAAIZPnDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAuIwAALiMBeKU/dgAAG1BJREFUeJzt3U+MnPd93/HPj6KsndmQ0K6of6Foy1ZkswkF12oNqujB\nhtEisdGivdTqvXBj5GAgObWABASwbj302AapDy4goFJQIAXaOgFyiG8R3MitSilyJcoiRUqhSXFT\nkeWu9e/pYZekAiX8ctvfw2dm9XoBixkBxBdfP3y4855nxjNtGIYAAPDX2zf1AgAAi04wAQAUBBMA\nQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEw\nAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAU\nBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMA\nQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEw\nAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAU\nBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMA\nQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEw\nAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAU\nBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMA\nQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEw\nAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAU\nBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMAQEEwAQAUBBMA\n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\nkx/8kgQCAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1041d5310>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ppatches = [PolygonPatch(poly, fc='None', ec='#ff0000', alpha=1.0, zorder=3, lw=0.25) for poly in quad_polygons]\n",
    "\n",
    "fig = plt.figure(1, figsize=(5., 5.), dpi=300)\n",
    "ax = fig.add_subplot(121)\n",
    "ax.set_aspect('equal')\n",
    "ax.get_xaxis().set_visible(False)\n",
    "ax.get_yaxis().set_visible(False)\n",
    "ax.axis('off')\n",
    "ax.set_xlim(-0.15, 6.0)\n",
    "ax.set_ylim(-0.15, 6.0)\n",
    "\n",
    "# add initial polygon\n",
    "ax.add_patch(PolygonPatch(initial_polygon, fc='None', ec='#000000', lw=0.5, alpha=1.0, zorder=2))\n",
    "# add centroid as dot patch\n",
    "ax.add_patch(PolygonPatch(Point(1.3571, 1.3571).buffer(.025), lw=0.25, fc='#ffa500', ec='#000000', zorder=4))\n",
    "plt.savefig(\"data/polylabel_000.png\", format=\"png\", bbox_inches='tight', alpha=True, transparent=True, dpi=300)\n",
    "\n",
    "j = 0\n",
    "for i, poly in enumerate(quad_polygons):\n",
    "    j += 1\n",
    "    ax.add_patch(ppatches[i])\n",
    "    plt.savefig(\"data/polylabel_{:03d}.png\".format(i + 1), format=\"png\", bbox_inches='tight', alpha=True, transparent=True, dpi=300)\n",
    "\n",
    "# add pole of inaccessibility as patch\n",
    "ax.add_patch(PolygonPatch(Point(0.5625, 0.5625).buffer(.025), lw=0.25, fc='#00b3b3', ec='#000000', zorder=4))\n",
    "\n",
    "# save final plot\n",
    "plt.savefig(\"data/polylabel_{:03d}.png\".format(j + 1), format=\"png\", bbox_inches='tight', alpha=True, transparent=True, dpi=300)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%%bash\n",
    "convert -background white -alpha remove -layers OptimizePlus -set delay 30 -colors 512 -loop 0 -scale 100% data/*.png output.gif"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}