Skip to content

Instantly share code, notes, and snippets.

@sgillies
Created February 15, 2015 22:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sgillies/74a9ecb7cdb4e522c06d to your computer and use it in GitHub Desktop.
Save sgillies/74a9ecb7cdb4e522c06d to your computer and use it in GitHub Desktop.
Descartes polygon holes -- orientation is important
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:db2fe700cd5eba2329830c908f06724fc986a232de7f6bffb97959be8324e898"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import matplotlib.pyplot as plt"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from matplotlib import pyplot\n",
"from shapely.geometry import LineString\n",
"from shapely.geometry import Polygon\n",
"from descartes.patch import PolygonPatch\n",
"from shapely.affinity import translate\n",
"from shapely.affinity import rotate\n",
"from shapely.validation import explain_validity\n",
"import numpy as np\n",
"import random"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig = plt.figure(1, figsize=(3,3) , dpi=180, facecolor='white')\n",
"ax = fig.gca()\n",
"ax.set_xlim(0,10);\n",
"ax.set_ylim(0,10);\n",
"poly1 = Polygon(shell = [(0, 0), (8,0),(8,4),(0,4)] , holes = [[(1, 1), (3, 1), (3, 3), (1, 3)], [(5, 1), (7, 1), (7, 3), (5, 3)]])\n",
"patch1 = PolygonPatch(poly1, facecolor = [1.0, 0.0, 0.0])\n",
"ax.add_patch(patch1)\n",
"fig.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stderr",
"text": [
"/Users/seang/envs/pydotorg27/lib/python2.7/site-packages/matplotlib/figure.py:387: UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure\n",
" \"matplotlib is currently using a non-GUI backend, \"\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x1062ae9d0>"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from shapely.geometry import Point, MultiPoint"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"polygon = Point(0, 0).buffer(10.0).difference(\n",
" MultiPoint([(-5, 0), (5, 0)]).buffer(3.0))\n",
"polygon"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"svg": [
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"100.0\" height=\"100.0\" viewBox=\"-10.8 -10.8 21.6 21.6\" preserveAspectRatio=\"xMinYMin meet\"><g transform=\"matrix(1,0,0,-1,0,0.0)\"><path fill-rule=\"evenodd\" fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.432\" opacity=\"0.6\" d=\"M 10.0,0.0 L 9.95184726672,-0.980171403296 L 9.80785280403,-1.95090322016 L 9.56940335732,-2.90284677254 L 9.23879532511,-3.82683432365 L 8.81921264348,-4.71396736826 L 8.31469612303,-5.5557023302 L 7.73010453363,-6.34393284164 L 7.07106781187,-7.07106781187 L 6.34393284164,-7.73010453363 L 5.5557023302,-8.31469612303 L 4.71396736826,-8.81921264348 L 3.82683432365,-9.23879532511 L 2.90284677254,-9.56940335732 L 1.95090322016,-9.80785280403 L 0.980171403296,-9.95184726672 L 1.61554457443e-14,-10.0 L -0.980171403296,-9.95184726672 L -1.95090322016,-9.80785280403 L -2.90284677254,-9.56940335732 L -3.82683432365,-9.23879532511 L -4.71396736826,-8.81921264348 L -5.5557023302,-8.31469612303 L -6.34393284164,-7.73010453363 L -7.07106781187,-7.07106781187 L -7.73010453363,-6.34393284164 L -8.31469612303,-5.5557023302 L -8.81921264348,-4.71396736826 L -9.23879532511,-3.82683432365 L -9.56940335732,-2.90284677254 L -9.80785280403,-1.95090322016 L -9.95184726672,-0.980171403296 L -10.0,-1.01064309961e-14 L -9.95184726672,0.980171403296 L -9.80785280403,1.95090322016 L -9.56940335732,2.90284677254 L -9.23879532511,3.82683432365 L -8.81921264348,4.71396736826 L -8.31469612303,5.5557023302 L -7.73010453363,6.34393284164 L -7.07106781187,7.07106781187 L -6.34393284164,7.73010453363 L -5.5557023302,8.31469612303 L -4.71396736826,8.81921264348 L -3.82683432365,9.23879532511 L -2.90284677254,9.56940335732 L -1.95090322016,9.80785280403 L -0.980171403296,9.95184726672 L -2.84823227897e-14,10.0 L 0.980171403296,9.95184726672 L 1.95090322016,9.80785280403 L 2.90284677254,9.56940335732 L 3.82683432365,9.23879532511 L 4.71396736826,8.81921264348 L 5.5557023302,8.31469612303 L 6.34393284164,7.73010453363 L 7.07106781187,7.07106781187 L 7.73010453363,6.34393284164 L 8.31469612303,5.5557023302 L 8.81921264348,4.71396736826 L 9.23879532511,3.82683432365 L 9.56940335732,2.90284677254 L 9.80785280403,1.95090322016 L 9.95184726672,0.980171403296 L 10.0,8.23853513713e-14 L 10.0,0.0 z M 8.0,0.0 L 8.0,2.47156054114e-14 L 7.98555418002,0.294051420989 L 7.94235584121,0.585270966048 L 7.8708210072,0.870854031763 L 7.77163859753,1.1480502971 L 7.64576379305,1.41419021048 L 7.49440883691,1.66671069906 L 7.31903136009,1.90317985249 L 7.12132034356,2.12132034356 L 6.90317985249,2.31903136009 L 6.66671069906,2.49440883691 L 6.41419021048,2.64576379305 L 6.1480502971,2.77163859753 L 5.87085403176,2.8708210072 L 5.58527096605,2.94235584121 L 5.29405142099,2.98555418002 L 5.0,3.0 L 4.70594857901,2.98555418002 L 4.41472903395,2.94235584121 L 4.12914596824,2.8708210072 L 3.8519497029,2.77163859753 L 3.58580978952,2.64576379305 L 3.33328930094,2.49440883691 L 3.09682014751,2.31903136009 L 2.87867965644,2.12132034356 L 2.68096863991,1.90317985249 L 2.50559116309,1.66671069906 L 2.35423620695,1.41419021048 L 2.22836140247,1.1480502971 L 2.1291789928,0.870854031763 L 2.05764415879,0.585270966048 L 2.01444581998,0.294051420989 L 2.0,-3.03192929884e-15 L 2.01444581998,-0.294051420989 L 2.05764415879,-0.585270966048 L 2.1291789928,-0.870854031763 L 2.22836140247,-1.1480502971 L 2.35423620695,-1.41419021048 L 2.50559116309,-1.66671069906 L 2.68096863991,-1.90317985249 L 2.87867965644,-2.12132034356 L 3.09682014751,-2.31903136009 L 3.33328930094,-2.49440883691 L 3.58580978952,-2.64576379305 L 3.8519497029,-2.77163859753 L 4.12914596824,-2.8708210072 L 4.41472903395,-2.94235584121 L 4.70594857901,-2.98555418002 L 5.0,-3.0 L 5.29405142099,-2.98555418002 L 5.58527096605,-2.94235584121 L 5.87085403176,-2.8708210072 L 6.1480502971,-2.77163859753 L 6.41419021048,-2.64576379305 L 6.66671069906,-2.49440883691 L 6.90317985249,-2.31903136009 L 7.12132034356,-2.12132034356 L 7.31903136009,-1.90317985249 L 7.49440883691,-1.66671069906 L 7.64576379305,-1.41419021048 L 7.77163859753,-1.1480502971 L 7.8708210072,-0.870854031763 L 7.94235584121,-0.585270966048 L 7.98555418002,-0.294051420989 L 8.0,0.0 z M -2.0,0.0 L -2.0,2.47156054114e-14 L -2.01444581998,0.294051420989 L -2.05764415879,0.585270966048 L -2.1291789928,0.870854031763 L -2.22836140247,1.1480502971 L -2.35423620695,1.41419021048 L -2.50559116309,1.66671069906 L -2.68096863991,1.90317985249 L -2.87867965644,2.12132034356 L -3.09682014751,2.31903136009 L -3.33328930094,2.49440883691 L -3.58580978952,2.64576379305 L -3.8519497029,2.77163859753 L -4.12914596824,2.8708210072 L -4.41472903395,2.94235584121 L -4.70594857901,2.98555418002 L -5.0,3.0 L -5.29405142099,2.98555418002 L -5.58527096605,2.94235584121 L -5.87085403176,2.8708210072 L -6.1480502971,2.77163859753 L -6.41419021048,2.64576379305 L -6.66671069906,2.49440883691 L -6.90317985249,2.31903136009 L -7.12132034356,2.12132034356 L -7.31903136009,1.90317985249 L -7.49440883691,1.66671069906 L -7.64576379305,1.41419021048 L -7.77163859753,1.1480502971 L -7.8708210072,0.870854031763 L -7.94235584121,0.585270966048 L -7.98555418002,0.294051420989 L -8.0,-3.03192929884e-15 L -7.98555418002,-0.294051420989 L -7.94235584121,-0.585270966048 L -7.8708210072,-0.870854031763 L -7.77163859753,-1.1480502971 L -7.64576379305,-1.41419021048 L -7.49440883691,-1.66671069906 L -7.31903136009,-1.90317985249 L -7.12132034356,-2.12132034356 L -6.90317985249,-2.31903136009 L -6.66671069906,-2.49440883691 L -6.41419021048,-2.64576379305 L -6.1480502971,-2.77163859753 L -5.87085403176,-2.8708210072 L -5.58527096605,-2.94235584121 L -5.29405142099,-2.98555418002 L -5.0,-3.0 L -4.70594857901,-2.98555418002 L -4.41472903395,-2.94235584121 L -4.12914596824,-2.8708210072 L -3.8519497029,-2.77163859753 L -3.58580978952,-2.64576379305 L -3.33328930094,-2.49440883691 L -3.09682014751,-2.31903136009 L -2.87867965644,-2.12132034356 L -2.68096863991,-1.90317985249 L -2.50559116309,-1.66671069906 L -2.35423620695,-1.41419021048 L -2.22836140247,-1.1480502971 L -2.1291789928,-0.870854031763 L -2.05764415879,-0.585270966048 L -2.01444581998,-0.294051420989 L -2.0,0.0 z\" /></g></svg>"
],
"text": [
"<shapely.geometry.polygon.Polygon at 0x1063fbf50>"
]
}
],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig = plt.figure(1, figsize=(3,3) , dpi=180, facecolor='white')\n",
"ax = fig.gca()\n",
"ax.set_xlim(-12,12);\n",
"ax.set_ylim(-12,12);\n",
"patch1 = PolygonPatch(polygon, facecolor = [1.0, 0.0, 0.0])\n",
"ax.add_patch(patch1)\n",
"fig.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x10645f590>"
]
}
],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig = plt.figure(1, figsize=(3,3) , dpi=180, facecolor='white')\n",
"ax = fig.gca()\n",
"ax.set_xlim(0,10);\n",
"ax.set_ylim(0,10);\n",
"poly1 = Polygon(shell=[(0, 0),(8,0),(8,4),(0,4)], holes=[[(1, 1), (3, 1), (3, 3), (1, 3)], [(5, 1), (7, 1), (7, 3), (5, 3)]])\n",
"from shapely.geometry.polygon import orient\n",
"patch1 = PolygonPatch(orient(poly1), facecolor = [1.0, 0.0, 0.0])\n",
"ax.add_patch(patch1)\n",
"fig.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nrkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x106469450>"
]
}
],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment