Skip to content

Instantly share code, notes, and snippets.

@sonygod
Created November 1, 2023 02:59
Show Gist options
  • Save sonygod/81842f817a06d32f88f71b77e74cd5c3 to your computer and use it in GitHub Desktop.
Save sonygod/81842f817a06d32f88f71b77e74cd5c3 to your computer and use it in GitHub Desktop.
pp
{
"cells": [
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11eb38f98>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Horizontal chords before collinear vertices = [(6, 37), (9, 21)]\n",
"vertical_chords = [(21, 37), (22, 36)]\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x118795d30>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1187877f0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"horizontal_chords = [(6, 37), (9, 21), (12, 19), (13, 16), (29, 24), (31, 22), (32, 8), (33, 36)]\n",
"vertical_chords = [(21, 37), (22, 36), (1, 19), (2, 8), (3, 6), (10, 16), (17, 9), (27, 24)]\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x11bffe0b8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11d5d80f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"'Please make sure that the INPUT is A CLOSED RECTILINEAR POLYGON,'\n",
"'CONSTRUCTED WHILE GOING IN ANTI-CLOCKWISE ONLY'\n",
"# importing libraries\n",
"import networkx as nx\n",
"import turtle\n",
"import matplotlib.pyplot as plt\n",
"import warnings\n",
"from networkx.algorithms import bipartite\n",
"import math\n",
"\n",
"warnings.filterwarnings(\"ignore\")\n",
"# declaration list\n",
"wn = turtle.Screen()\n",
"# a turtle called gopu \n",
"gopu = turtle.Turtle() \n",
"# co-ordinate points\n",
"x = [] \n",
"y = []\n",
"# vertex-type := rectilinear = -1; convex = 0; concave = 1 \n",
"vertex_type = [] \n",
"# store the bipartite graph of chords\n",
"G = nx.Graph()\n",
"# the line below can be commented if one needs animation\n",
"gopu.speed(0)\n",
"# starts recording keys being pressed\n",
"gopu.begin_poly()\n",
"\n",
"# Event handlers\n",
"stride = 25\n",
"# Up = up() - vertex to be deleted = -1\n",
"def up():\n",
" vertex_type.append(-1)\n",
" gopu.forward(stride)\n",
" \n",
"# left = left() ; make vertex - convex = 0\n",
"def left():\n",
" vertex_type.append(0)\n",
" gopu.setheading(gopu.heading()+90)\n",
" gopu.forward(stride)\n",
" \n",
"# right = right() ; make vertex - concave = 1\n",
"def right():\n",
" vertex_type.append(1)\n",
" gopu.setheading(gopu.heading()-90)\n",
" gopu.forward(stride)\n",
" \n",
"# back = back() -- doing undo is allowed only once.\n",
"def back():\n",
" vertex_type.pop()\n",
" gopu.undo()\n",
"\n",
"# quits the screen and outputs the plots the partitioned polygon\n",
"def partition_polygon():\n",
" # closing the screen\n",
" wn.bye()\n",
" # stopped recording the polygon\n",
" gopu.end_poly()\n",
" p = gopu.get_poly()\n",
" p = list(p)\n",
" compute_partition(p) \n",
" \n",
"'''\n",
"The movements of the turtle are recorded and the rectilinear graph thus \n",
"obtained is converted into bipartite graph of chords\n",
"'''\n",
"def compute_partition(p):\n",
" # p now contains the list of coordinates of vertices\n",
" # last one is same as the origin\n",
" # and the origin is always going to be a convex vertex\n",
" p.pop()\n",
" vertex_type[0] = 0\n",
" \n",
" # x and y contain list of x and y coordinates respectively\n",
" for i,j in p:\n",
" x.append(i)\n",
" y.append(j)\n",
"\n",
" # this is done as there are some very small errors in recording the \n",
" # position by the turtle library\n",
" for i in range(len(x)):\n",
" x[i] = int(x[i])\n",
" y[i] = int(y[i])\n",
"\n",
" for i in range(len(x)):\n",
" if x[i] % stride != 0:\n",
" x[i] += (stride - x[i] % stride)\n",
" if y[i] % stride != 0:\n",
" y[i] += (stride - y[i] % stride)\n",
" \n",
" collinear_vertices = [i for i,val in enumerate(vertex_type) if val == -1]\n",
" # finding the chords inside the polygon\n",
" horizontal_chords = []\n",
" vertical_chords = []\n",
" concave_vertices = [i for i,val in enumerate(vertex_type) if val == 1]\n",
"\n",
" # middles is used because, there are cases when there is a chord between vertices\n",
" # and they intersect with external chords, hence if there is any vertex in between \n",
" # two vertices then skip that chord. \n",
" for i in range(len(concave_vertices)):\n",
" for j in range(i+1,len(concave_vertices)):\n",
" if concave_vertices[j] != concave_vertices[i] + 1:\n",
" middles = []\n",
" if y[concave_vertices[i]] == y[concave_vertices[j]]:\n",
" for k in range(len(x)):\n",
" if y[concave_vertices[i]] == y[k] and (x[concave_vertices[i]] < x[k] and x[concave_vertices[j]] > x[k] \\\n",
" or x[concave_vertices[i]] > x[k] and x[concave_vertices[j]] < x[k]):\n",
" middles.append(k)\n",
" if len(middles) == 0:\n",
" horizontal_chords.append((concave_vertices[i],concave_vertices[j]))\n",
" middles = []\n",
" if x[concave_vertices[i]] == x[concave_vertices[j]]:\n",
" for k in range(len(x)):\n",
" if x[concave_vertices[i]] == x[k] and (y[concave_vertices[i]] < y[k] and y[concave_vertices[j]] > y[k] \\\n",
" or y[concave_vertices[i]] > y[k] and y[concave_vertices[j]] < y[k]):\n",
" middles.append(k)\n",
" if len(middles) == 0:\n",
" vertical_chords.append((concave_vertices[i],concave_vertices[j]))\n",
" \n",
"\n",
" \n",
" fig, ax = plt.subplots()\n",
" ax.plot(x+[0], y+[0], color='black')\n",
" ax.scatter(x+[0], y+[0], color='black')\n",
" for i in range(len(x)):\n",
" ax.annotate(i, (x[i],y[i]))\n",
" plt.show()\n",
" plt.clf()\n",
" print(\"Horizontal chords before collinear vertices = \", horizontal_chords)\n",
" print(\"vertical_chords = \", vertical_chords)\n",
"\n",
" fig, ax = plt.subplots()\n",
" ax.plot(x+[0], y+[0], color='black')\n",
" ax.scatter(x+[0], y+[0], color='black')\n",
" for i in range(len(x)):\n",
" ax.annotate(i, (x[i],y[i]))\n",
" for i,j in horizontal_chords:\n",
" ax.plot([x[i],x[j]],[y[i],y[j]],color='black')\n",
" for i,j in vertical_chords:\n",
" ax.plot([x[i],x[j]],[y[i],y[j]], color='black')\n",
" plt.show()\n",
" plt.clf()\n",
" for i in range(len(collinear_vertices)):\n",
" for j in range(len(concave_vertices)):\n",
" middles = []\n",
" if y[collinear_vertices[i]] == y[concave_vertices[j]]:\n",
" if collinear_vertices[i] < concave_vertices[j]:\n",
" for k in range(len(x)):\n",
" if y[k] == y[collinear_vertices[i]] and (x[k] < x[concave_vertices[j]] \\\n",
" and x[k] > x[collinear_vertices[i]] or x[k] > x[concave_vertices[j]] \\\n",
" and x[k] < x[collinear_vertices[i]]):\n",
" middles.append(k)\n",
" if collinear_vertices[i]+1 == concave_vertices[j]:\n",
" middles.append(0)\n",
" else:\n",
" for k in range(len(x)):\n",
" if y[k] == y[collinear_vertices[i]] and (x[k] > x[concave_vertices[j]] \\\n",
" and x[k] < x[collinear_vertices[i]] or x[k] < x[concave_vertices[j]] \\\n",
" and x[k] > x[collinear_vertices[i]]):\n",
" middles.append(k)\n",
" if collinear_vertices[i] == concave_vertices[j]+1:\n",
" middles.append(0)\n",
" if len(middles) == 0:\n",
" horizontal_chords.append((collinear_vertices[i],concave_vertices[j]))\n",
" middles = []\n",
" if x[collinear_vertices[i]] == x[concave_vertices[j]]:\n",
" if collinear_vertices[i] < concave_vertices[j]:\n",
" for k in range(len(x)):\n",
" if x[k] == x[collinear_vertices[i]] and (y[k] < y[concave_vertices[j]] \\\n",
" and y[k] > y[collinear_vertices[i]] or y[k] > y[concave_vertices[j]] \\\n",
" and y[k] < y[collinear_vertices[i]]):\n",
" middles.append(k)\n",
" if collinear_vertices[i]+1 == concave_vertices[j]:\n",
" middles.append(0)\n",
" else:\n",
" for k in range(len(x)):\n",
" if x[k] == x[collinear_vertices[i]] and (y[k] > y[concave_vertices[j]] \\\n",
" and y[k] < y[collinear_vertices[i]] or y[k] < y[concave_vertices[j]] \\\n",
" and y[k] > y[collinear_vertices[i]]):\n",
" middles.append(k)\n",
" if collinear_vertices[i] == concave_vertices[j]+1:\n",
" middles.append(0)\n",
" if len(middles) == 0:\n",
" vertical_chords.append((collinear_vertices[i],concave_vertices[j]))\n",
" \n",
" # displaying all attributes and important parameters involved\n",
"# print(\"p = \",p)\n",
"# print(\"vertex_Type = \",vertex_type)\n",
"# print (\"x = \", x)\n",
"# print (\"y = \", y)\n",
"# print(\"collinear_vertices = \", collinear_vertices)\n",
"# print(\"concave_vertices =\", concave_vertices)\n",
" print(\"horizontal_chords = \" ,horizontal_chords)\n",
" print(\"vertical_chords = \",vertical_chords)\n",
" # drawing the partitioned polygon \n",
" fig, ax = plt.subplots()\n",
" ax.plot(x+[0], y+[0], color='black')\n",
" ax.scatter(x+[0], y+[0], color='black')\n",
" for i in range(len(x)):\n",
" ax.annotate(i, (x[i],y[i]))\n",
" for i,j in horizontal_chords:\n",
" ax.plot([x[i],x[j]],[y[i],y[j]],color='black')\n",
" for i,j in vertical_chords:\n",
" ax.plot([x[i],x[j]],[y[i],y[j]],color='black')\n",
" plt.show()\n",
"\n",
"# Defining the keys function\n",
"wn.onkey(up, \"Up\")\n",
"wn.onkey(left, \"Left\")\n",
"wn.onkey(right, \"Right\")\n",
"wn.onkey(back, \"Down\")\n",
"wn.onkey(partition_polygon, \"Escape\")\n",
"wn.listen()\n",
"wn.mainloop()\n"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true,
"scrolled": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"y=[2.56422, 3.77284,3.52623,3.51468,3.02199]\n",
"z=[0.15, 0.3, 0.45, 0.6, 0.75]\n",
"n=[58,651,393,203,123]\n",
"\n",
"fig, ax = plt.subplots()\n",
"ax.scatter(z, y)\n",
"\n",
"for i, txt in enumerate(n):\n",
" ax.annotate(txt, (z[i],y[i]))\n",
"# plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"from matplotlib import cm\n"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\nAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x118f9cac8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x11fa65c88>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt8VIWZ//HPkwQiqQSUS4wJzKANBAIYCdeuS3Rt8LJa\nBXdRNnWxoGzp5acWcOHnesEWYaEUUAGXLli2mZfU26+4FqiXpci+2ghYAyIaxEsIF0ErIIJyy/P7\nI5N0CHMmkzAzZ+bwvF+veTFzZjLn+zBzHibnDOcRVcUYY4x3pbkdwBhjTHxZozfGGI+zRm+MMR5n\njd4YYzzOGr0xxnicNXpjjPE4a/TGGONx1uiNMcbjrNEbY4zHZbgdAKBz587q9/vdjmGMMSnlzTff\n/ExVuzT3uKRo9H6/n02bNrkdwxhjUoqI1ETzONt1Y4wxHmeN3hhjPM4avTHGeJw1ehNXtbW1XHXV\nVfTp04eioiIWLFgAwJQpUygsLKR///6MHDmSgwcPupzUmVMNzz77LEVFRaSlpdkxJpPUrNGbuMrI\nyGDu3Lls27aNyspKFi5cyLZt2ygrK2Pr1q1s2bKFnj17MnPmTLejOnKqoW/fvrzwwgsMHz7c7YjG\nRJQU37ox3pWbm0tubi4A7du3p3fv3uzevZsRI0Y0Pmbo0KE899xzbkVsllMNZWVlLiczJjr2id4k\nzMcff8xbb73FkCFDTlu+bNkyrrvuOpdStYxTDcYks2YbvYh0E5G1IrJNRN4RkbuDyx8Wkd0iUhW8\nXB/yM9NEZIeIVIvINfEswKSGL7/8kltuuYX58+eTnZ3duHzGjBlkZGRQXl7uYrroONVgTLKL5hP9\nSWCSqvYBhgI/FJE+wfvmqWpx8LIKIHjfbUARcC2wSETS45DdJKlAIIDf7yctLQ2/38/y5cu55ZZb\nKC8vZ9SoUY2P+9WvfsVLL71EIBBARFxMHF5oHT6fj29961tn1GBMKmh2H72q7gX2Bq8fFpF3gbwI\nP3ITsEJVjwEficgOYDDwpxjkNUkuEAgwYcIEjh49CkBNTQ3jx4/n29/+Nj/5yU8aH7dmzRpmz57N\nunXryMrKciuuo6Z17Ny5k4yMDHJyclxOZkzLiapG/2ARP/A60Bf4CfA94BCwifpP/QdE5AmgUlUr\ngj+zFFitqo5H2wYOHKj29TRv8Pv91NSc+b+yRaSxoffo0YMdO3agqmRk1H/WyM7OpmfPngnNGkll\nZSXHjh07Y3mbNm3o06cPjz76KMeOHePHP/4xn376KR07dqS4uJjf//73LqQ15yoReVNVBzb3uKi/\ndSMi5wPPA/eo6hcishj4KaDBP+cC41rwfBOACQDdu3eP9sdMktu5c2fY5arKwIF/fT926tQpUZFa\nJVyTBzh58iRVVVWNt0eOHJmoSMa0WlSNXkTaUN/kA6r6AoCq7gu5/5fAS8Gbu4FuIT+eH1x2GlVd\nAiyB+k/0rQlvkk/37t3DfqL3+Xz84Q9/SHygVnL6zcQ+lJhUFM23bgRYCryrqr8IWZ4b8rCRwNbg\n9ReB20QkU0R6AAXAhthFNslsxowZZ+xzz8rKYsaMGS4lah2v1GEMRPeJ/m+A24G3RaThd9b/C4wR\nkWLqd918DPwLgKq+IyLPANuo/8bOD1X1VKyDm+TU8DXJ8ePHc+zYMXw+HzNmzEiJr0+G8kodxkAL\nD8bGix2M9Z4rr7wSIKV214TjlTqMN0V7MNb+Z6wxxnicNXpjjPE4a/TGGONx1uiNMcbjrNEbY4zH\nWaM3xhiPs0ZvjDEeZ43exJXTvNUHHniA/v37U1xczIgRI9izZ4/LSZ19/fXXYWv4/PPPKSsro6Cg\ngLKyMg4cOOBy0uaNGzeOrl270rdv38ZlmzdvZtiwYfTr148bb7yRL774wsWEzQtXQ1VVFUOHDqW4\nuJiBAweyYUPy/2f8cHXceuutFBcXU1xcjN/vp7i4ODYrU1XXLyUlJWq8pbS0VEtLS3XPnj365ptv\nqqrqF198oQUFBfrOO+/ooUOHGh+7YMEC/Zd/+Re3okZUWlqqQ4cODVvDlClTdObMmaqqOnPmTL3v\nvvvcjBqVdevW6ZtvvqlFRUWNywYOHKh/+MMfVFV16dKl+m//9m9uxYtKuBrKysp01apVqqr6u9/9\nTktLS11KF71wdYT6yU9+otOnT4/4HMAmjaLH2id6E1e5ubkMGDAAOH3eauiEpiNHjiTl4JEGmZmZ\nYWtYuXIlY8eOBWDs2LH89re/dTNmVIYPH86FF1542rLt27c3DjgvKyvj+eefdyNa1MLVICKNv4kc\nOnSIiy++2I1oLRKujgaqyjPPPMOYMWNisi4bDm4Spum81fvvv5//+q//okOHDqxdu9bldNEJrWHf\nvn2NQ8Mvuugi9u3b18xPJ6eioiJWrlzJzTffzLPPPkttba3bkVps/vz5XHPNNUyePJm6ujr++Mc/\n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\nb4wxHvf/AUsvGHSPUueSAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11d572e48>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\ninrgUxdeCN/+dvTbJyKSJz5jMsD7gSU4Y/Fh4BPAx7wW7O6Gjo64trBmJ6S9AZHYs8fzyyfjnA7o\ntShwit96urqi2yYRkbzyGZOPAB8GpuBcVvszztHnHL/1GDwm2xHPxkbPL58JvAE8V/K139N7slAv\nTU2RbpaISC75jMl/BbYC/4Qz03YQMBNY67ceg8dkO+LZ0uJcXHY5Cec7nK/ifJfzG2ANMN1rHfX1\nMHp0jBspIpITPmPyYOAM4A6cA5tXgR8BLV7rMHxMtnq2LTjf6XwS+CXOdzkL8LjPE4yf2SUikhll\nxuSncCYN/R7oB1wMfBvo83A/w8dkO4483/IW57mIHk/9ORVYjXPkuRWfcBYK0Npq7E4SEcmUMmPy\neTh3PHThXPP8P3iEMwNjsh1HnuD7hKFAMvA0CxGRTLF8TLbjyBOcJ/EvWuT8Tw+j5zmKBu8kEZHM\nsXxMtuM+zx49DxK28An+IiKZY/GYbM9p21IbNjifHbd2rbNDSh9M3PPZca2tzmfHGf7djYhI5lk4\nJtsZzx67dzuPd+rocG62bWpypj7PmGH0hWgREStZNCbbHU8REZEY2DNhSEREJCGKp4iISEiKp4iI\nSEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiK\np4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iI\nSEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiK\np4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEiKp4iISEj/Hyj6FqCw52ZPAAAAAElF\nTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11d866cc0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAc8AAAFCCAYAAACXVlYtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFyJJREFUeJzt3X+QnHV9wPH3kmBy54+bKwSlgaaWDMWEXNshAUctPTtD\npzmLlhSc0RJJqliCVjtNmPasggx2ztKz2GJNtXY8ErFaipNhxlxFp5AWNZ1LEe/khxIdzRBaLx2P\nE5pNRsL2j+eWXDa7e/tNnt19nu/zfs1kNLvPPnzhmfm8d5997rlSpVKpIEmSWnZGtxcgSVLeGE9J\nkgIZT0mSAhlPSZICGU9JkgIZT0mSAhlPSZICGU9JkgIZT0mSAhlPSZICGU9JkgIZT0mSAhlPSZIC\nGU9JkgIZT0mSAhlPSZICGU9JkgIZT0mSAhlPSZICGU9JkgIZT0mSAhlPSZICGU9JkgIZT0mSAhlP\nSZICLe72AtpqehrGxmByEmZnoa8PBgZg82ZYtqzbq5OkYoloJpcqlUql24tI3cQEjIzA+Hjy9yNH\njj/X0wOVCqxfD8PDsG5dd9YoSUUR4UyOL57bt8O2bVAuJwekkVIpOWijo7BlS+fWJ0lFEulMjiue\n1YN0+HDrr+ntzc3BkqRciXgmxxPPiQkYHGx4kJ4E1gBXA5+rfbK3F/bsgbVr27pESSqMOjP5ZTWb\nlIEbgTtrX5uDmRzP1bYjI8lpgQbeAzQ8k14uJ6+XJKWjzkx+bt6f/wF6gGvqvTYHMzmOT57T07Bi\nxYlfQs/zBeBLwCpgP3U+eQIsXQoHDuTuii9JypwFZjLAXcCtwPeBUr0NMj6T4/jkOTbW8KmfAjcD\nf73QPkqlpvuRJLWohVl6F/AOGoQTMj+T44jn5GTDdzgfAt4JnLfQPsplmJpKeWGSVEBNZjLAj4A9\nwHXN9pHxmRzHTRJmZ+s+/AjwNeBbLe7mvp07ecvOnWmtSpIK6T7gyibP7wTeALx6oR3NzKS1pNTF\nEc++vroPPwj8EPiFub8/BxwDHgMerrP9mzdupLJjR/rrk6QiufZauPvuhk/vAP6slf3096e1otTF\ncdp2YCD5crnGu0m+jH5k7s8NwJuAr9TbR08PrFnTxkVKUkE0mMkA3wAO0uAq2/kyPpMLcbVt1Yfx\naltJarsmM/kPgcMkp26byvhMjuOT5znnJPdFLDW8bgtI4lk3nKUSDA1l9iBJUq40mcmfooVw5mAm\nx/HJExa8w1BTObibhSTlSuQzOY5PnpDciX90NPmPHqJ6H8UMHyRJyp3IZ3IcV9tWVW8kHOEd/CUp\ndyKeyfGctp1v377kvoi7dycHZP79Fau/O25oKPndcRl/dyNJuRfhTI4znlWHDiW3d5qaSn7Ytr8/\nufR506ZMfxEtSVGKaCbHHU9JktognguGJEnqEOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlS\nIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDj\nKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJ\nUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUqDF3V5AW01Pw9gY\nTE7C7Cz09cHAAGzeDMuWdXt1klQsEc3kUqVSqXR7EambmICRERgfT/5+5Mjx53p6oFKB9etheBjW\nrevOGiWpKCKcyfHFc/t22LYNyuXkgDRSKiUHbXQUtmzp3PokqUginclxxbN6kA4fbv01vb25OViS\nlCsRz+R44jkxAYODYQepqrcX9uyBtWtTX5YkFVLkMzmeq21HRpLTAjWuBV4FvAK4EPhMvdeWy8nr\nJUnpaDCTAb4AvAZ4KXAB8B+1G+RgJsfxyXN6GlasOPFL6DnfAX4J6AWeAAaBLwOX1G64dCkcOJC7\nK74kKXOazOSvAu8CvghcCvz33OPLazfM+EyO45Pn2FjDpy4mCSdAae7P9+ttWCo13Y8kqUVNZukt\nwM3Aa0kCtJw64YTMz+Q44jk5WfcdTtWNJAG9CDgXGKq3UbkMU1NtWZ4kFUqDmXwM2AccAlYC5wHv\nBeqe3M34TI7jJgmzs02f/iRwJ/BN4EFgSYPt7tu5k7fs3Jnq0iSpaO4Drqzz+I+BnwH/QvI955nA\nW4CPAH9Rb0czM21a4emLI559fQtusgh4A/A5YDvwvjrbvHnjRio7dqS7NkkqmmuvhbvvPunhnrn/\n/SOSs4AAf0KTePb3t2N1qYjjtO3AQPLlcguep8F3nj09sGZNmquSpGJqMJP7SU7VluY9VjppqzkZ\nn8lRX207Dfwb8Dsk73i+BmwA/gl4c+0+Mn5llyTlRpOrbW8Gxkl+6uFMklk8CNxWu2HGZ3IcnzzP\n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\nbWouFpqvvz/VZUlSITWYyT8BDgDvJbnS9ixgM7C70X4yPJPjiOfAQPLlco2XkrzDuZnkXc5DwH3A\nxnr76OmBNWvauEhJKogGM/ls4NXA35N8sHkGuAsYqLePjM/kqK+2heSdzh8AXyV5l/NR6vycJ2T+\nyi5Jyo0mM/kRkouGvg0sAn4TuBN4Ze2GGZ/JcXzyPOec5L6IpdJJT/0csIvkk+cBGoSzVIKhocwe\nJEnKlSYz+VdJfuJhhuQ7z3+mTjhzMJPj+OQJDe9m0ZIc3M1CknIl8pkcxydPSO7EPzqa/EcPUb2P\nYoYPkiTlTuQzOY6f86yq3kg4wjv4S1LuRDyT4zltO9++fcnvjtu9Ozkg5fLx56q/O25oKPndcRl/\ndyNJuRfhTI4znlWHDiW3d5qaSn7Ytr8/ufR506ZMfxEtSVGKaCbHHU9JktognguGJEnqEOMpSVIg\n4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMp\nSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlS\nIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDjKUlSIOMpSVIg4ylJUiDj\nKUlSIOMpSVKg/wdrzQW1t7Dt7QAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11f81c470>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"free_vertices = []\n",
"maximum matching = [(0, 9), (1, 5), (2, 8), (3, 6), (4, 7)]\n",
"H = {0, 1, 2, 3, 4}\n",
"V = {8, 9, 5, 6, 7}\n",
"p = [(0.00,0.00), (25.00,0.00), (25.00,25.00), (50.00,25.00), (50.00,50.00), (75.00,50.00), (100.00,50.00), (100.00,75.00), (100.00,100.00), (75.00,100.00), (75.00,125.00), (75.00,150.00), (100.00,150.00), (100.00,175.00), (75.00,175.00), (75.00,200.00), (100.00,200.00), (100.00,225.00), (75.00,225.00), (50.00,225.00), (25.00,225.00), (25.00,250.00), (0.00,250.00), (-0.00,225.00), (-0.00,200.00), (-25.00,200.00), (-25.00,175.00), (-50.00,175.00), (-50.00,150.00), (-25.00,150.00), (-25.00,125.00), (-50.00,125.00), (-50.00,100.00), (-25.00,100.00), (-0.00,100.00), (-0.00,75.00), (-25.00,75.00), (-25.00,50.00), (-0.00,50.00), (-0.00,25.00)]\n",
"vertex_Type = [0, 0, 1, 0, 1, -1, 0, -1, 0, 1, -1, 1, 0, 0, 1, 1, 0, 0, -1, -1, 1, 0, 0, -1, 1, 0, 1, 0, 0, 1, 1, 0, 0, -1, 1, 1, 0, 0, 1, -1]\n",
"x = [0, 25, 25, 50, 50, 75, 100, 100, 100, 75, 75, 75, 100, 100, 75, 75, 100, 100, 75, 50, 25, 25, 0, 0, 0, -25, -25, -50, -50, -25, -25, -50, -50, -25, 0, 0, -25, -25, 0, 0]\n",
"y = [0, 0, 25, 25, 50, 50, 50, 75, 100, 100, 125, 150, 150, 175, 175, 200, 200, 225, 225, 225, 225, 250, 250, 225, 200, 200, 175, 175, 150, 150, 125, 125, 100, 100, 100, 75, 75, 50, 50, 25]\n",
"collinear_vertices = [5, 7, 10, 18, 19, 23, 33, 39]\n",
"concave_vertices = [2, 4, 9, 11, 14, 15, 20, 24, 26, 29, 30, 34, 35, 38]\n",
"horizontal_chords = [(4, 38), (9, 34), (11, 29), (14, 26), (15, 24)]\n",
"vertical_chords = [(2, 20), (11, 14), (24, 34), (26, 29), (35, 38)]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11f7acd68>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x106b0efd0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"maximum independent = [4, 1, 3, 2, 0]\n",
"Unmatched concave vertices [2, 20, 30, 35]\n",
"nearest_chord [(2, 25), (20, -25), (30, -25), (35, -25)]\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x11fa39cc0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n/x9RiTpNLfoWUwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11d5293c8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"'Please make sure that the INPUT is A CLOSED RECTILINEAR POLYGON,'\n",
"'CONSTRUCTED WHILE GOING IN ANTI-CLOCKWISE ONLY'\n",
"# importing libraries\n",
"import networkx as nx\n",
"import turtle\n",
"import matplotlib.pyplot as plt\n",
"import warnings\n",
"from networkx.algorithms import bipartite\n",
"import math\n",
"import sys\n",
"\n",
"warnings.filterwarnings(\"ignore\")\n",
"# declaration list\n",
"wn = turtle.Screen()\n",
"# a turtle called gopu \n",
"gopu = turtle.Turtle() \n",
"# co-ordinate points\n",
"x = [] \n",
"y = []\n",
"# vertex-type := rectilinear = -1; convex = 0; concave = 1 \n",
"vertex_type = [] \n",
"# store the bipartite graph of chords\n",
"G = nx.Graph()\n",
"# the line below can be commented if one needs animation\n",
"gopu.speed(0)\n",
"# starts recording keys being pressed\n",
"gopu.begin_poly()\n",
"\n",
"# Event handlers\n",
"stride = 25\n",
"# Up = up() - vertex to be deleted = -1\n",
"def up():\n",
" vertex_type.append(-1)\n",
" gopu.forward(stride)\n",
" \n",
"# left = left() ; make vertex - convex = 0\n",
"def left():\n",
" vertex_type.append(0)\n",
" gopu.setheading(gopu.heading()+90)\n",
" gopu.forward(stride)\n",
" \n",
"# right = right() ; make vertex - concave = 1\n",
"def right():\n",
" vertex_type.append(1)\n",
" gopu.setheading(gopu.heading()-90)\n",
" gopu.forward(stride)\n",
" \n",
"# back = back() -- doing undo is allowed only once.\n",
"def back():\n",
" vertex_type.pop()\n",
" gopu.undo()\n",
"\n",
"# quits the screen and outputs the plots the partitioned polygon\n",
"def partition_polygon():\n",
" # closing the screen\n",
" wn.bye()\n",
" # stopped recording the polygon\n",
" gopu.end_poly()\n",
" p = gopu.get_poly()\n",
" p = list(p)\n",
" compute_partition(p) \n",
" \n",
"'''\n",
"The movements of the turtle are recorded and the rectilinear graph thus \n",
"obtained is converted into bipartite graph of chords\n",
"'''\n",
"def compute_partition(p):\n",
" # p now contains the list of coordinates of vertices\n",
" # last one is same as the origin\n",
" # and the origin is always going to be a convex vertex\n",
" if len(p) == 0:\n",
" print(\"No input\")\n",
" sys.exit()\n",
" p.pop()\n",
" vertex_type[0] = 0\n",
" \n",
" # x and y contain list of x and y coordinates respectively\n",
" for i,j in p:\n",
" x.append(i)\n",
" y.append(j)\n",
"\n",
" # this is done as there are very small errors in recording the \n",
" # position accurately by the turtle library\n",
" for i in range(len(x)):\n",
" x[i] = int(x[i])\n",
" y[i] = int(y[i])\n",
"\n",
" for i in range(len(x)):\n",
" if x[i] % stride != 0:\n",
" x[i] += (stride - x[i] % stride)\n",
" if y[i] % stride != 0:\n",
" y[i] += (stride - y[i] % stride)\n",
" \n",
" # deleting vertices that are on a straight line\n",
" collinear_vertices = [i for i,val in enumerate(vertex_type) if val == -1] \n",
" # Reverse order deletion is done so that the previous index does not \n",
" # overthrow the current one\n",
"\n",
" fig, ax = plt.subplots()\n",
" ax.plot(x+[0], y+[0], color='black')\n",
" ax.scatter(x+[0], y+[0], color='black')\n",
" for i in range(len(x)):\n",
" ax.annotate(i, (x[i],y[i]))\n",
" plt.show()\n",
" plt.clf()\n",
" # finding the chords inside the polygon\n",
" horizontal_chords = []\n",
" vertical_chords = []\n",
" concave_vertices = [i for i,val in enumerate(vertex_type) if val == 1]\n",
"\n",
" # middles is used because, there are cases when there is a chord between vertices\n",
" # and they intersect with external chords, hence if there is any vertex in between \n",
" # two vertices then skip that chord. \n",
" for i in range(len(concave_vertices)):\n",
" for j in range(i+1,len(concave_vertices)):\n",
" if concave_vertices[j] != concave_vertices[i] + 1:\n",
" middles = []\n",
" if y[concave_vertices[i]] == y[concave_vertices[j]]:\n",
" for k in range(len(x)):\n",
" if y[concave_vertices[i]] == y[k] and (x[concave_vertices[i]] < x[k] and x[concave_vertices[j]] > x[k] \\\n",
" or x[concave_vertices[i]] > x[k] and x[concave_vertices[j]] < x[k]):\n",
" middles.append(k)\n",
" if len(middles) == 0:\n",
" horizontal_chords.append((concave_vertices[i],concave_vertices[j]))\n",
" middles = []\n",
" if x[concave_vertices[i]] == x[concave_vertices[j]]:\n",
" for k in range(len(x)):\n",
" if x[concave_vertices[i]] == x[k] and (y[concave_vertices[i]] < y[k] and y[concave_vertices[j]] > y[k] \\\n",
" or y[concave_vertices[i]] > y[k] and y[concave_vertices[j]] < y[k]):\n",
" middles.append(k)\n",
" if len(middles) == 0:\n",
" vertical_chords.append((concave_vertices[i],concave_vertices[j]))\n",
" \n",
" fig, ax = plt.subplots()\n",
" ax.plot(x+[0], y+[0], color='black')\n",
" ax.scatter(x+[0], y+[0], color='black')\n",
" for i in range(len(x)):\n",
" ax.annotate(i, (x[i],y[i]))\n",
" for i,j in horizontal_chords:\n",
" ax.plot([x[i],x[j]],[y[i],y[j]],color='black')\n",
" for i,j in vertical_chords:\n",
" ax.plot([x[i],x[j]],[y[i],y[j]], color='black')\n",
" plt.show()\n",
" plt.clf()\n",
" # Creating a bipartite graph from the set of chords\n",
" for i,h in enumerate(horizontal_chords):\n",
" y1 = y[h[0]]\n",
" x1 = min(x[h[0]] ,x[h[1]] )\n",
" x2 = max(x[h[0]] ,x[h[1]])\n",
" G.add_node(i, bipartite=0)\n",
" for j,v in enumerate(vertical_chords):\n",
" x3 = x[v[0]]\n",
" y3 = min(y[v[0]],y[v[1]])\n",
" y4 = max(y[v[0]],y[v[1]])\n",
" G.add_node(j + len(horizontal_chords),bipartite=0)\n",
" if x1 <= x3 and x3 <=x2 and y3 <= y1 and y1 <= y4: \n",
" G.add_edge(i, j + len(horizontal_chords))\n",
" \n",
" if len(horizontal_chords) == 0:\n",
" for j,v in enumerate(vertical_chords):\n",
" x3 = x[v[0]]\n",
" y3 = min(y[v[0]],y[v[1]])\n",
" y4 = max(y[v[0]],y[v[1]])\n",
" G.add_node(j,bipartite=1)\n",
" \n",
" # finding the maximum matching of the bipartite graph, G.\n",
" M = nx.Graph()\n",
" maximum_matching = nx.bipartite.maximum_matching(G)\n",
" maximum_matching_list = []\n",
" for i,j in maximum_matching.items():\n",
" maximum_matching_list += [(i,j)]\n",
" M.add_edges_from(maximum_matching_list)\n",
" maximum_matching = M.edges()\n",
" # breaking up into two sets\n",
" H, V = bipartite.sets(G)\n",
" pos = dict()\n",
" pos.update((n, (1, i)) for i, n in enumerate(H))\n",
" pos.update((n,(2,i)) for i, n in enumerate(V))\n",
" nx.draw(G, pos=pos, with_labels = True)\n",
" plt.show()\n",
" plt.gcf().clear()\n",
" \n",
"# plotting the maximum matching of the bipartite graph\n",
" K = nx.Graph()\n",
" K.add_nodes_from(H, bipartite=0)\n",
" K.add_nodes_from(V, bipartite=1)\n",
" K.add_edges_from(maximum_matching)\n",
" nx.draw(K, pos=pos, with_labels = True)\n",
" plt.show()\n",
" plt.gcf().clear()\n",
" free_vertices = []\n",
" for u in H:\n",
" temp = []\n",
" for v in V:\n",
" if (u,v) in maximum_matching or (v,u) in maximum_matching:\n",
" temp += [v]\n",
" if len(temp) == 0:\n",
" free_vertices += [u]\n",
" for u in V:\n",
" temp = []\n",
" for v in H:\n",
" if (u,v) in maximum_matching or (v,u) in maximum_matching:\n",
" temp += [v]\n",
" if len(temp) == 0:\n",
" free_vertices += [u]\n",
" \n",
" print(\"free_vertices = \", free_vertices)\n",
" print(\"maximum matching = \", maximum_matching)\n",
" print(\"H = \", H)\n",
" print(\"V = \", V)\n",
" # finding the maximum independent set\n",
" max_independent = []\n",
" while len(free_vertices) != 0 or len(maximum_matching) != 0:\n",
" if len(free_vertices) != 0 :\n",
" u = free_vertices.pop()\n",
" max_independent += [u]\n",
" else:\n",
" u, v = maximum_matching.pop()\n",
" G.remove_edge(u,v)\n",
" max_independent += [u]\n",
"\n",
" for v in G.neighbors(u):\n",
" G.remove_edge(u, v)\n",
" for h in G.nodes():\n",
" if (v,h) in maximum_matching:\n",
" maximum_matching.remove((v,h))\n",
" free_vertices += [h]\n",
" if (h,v) in maximum_matching:\n",
" maximum_matching.remove((h,v))\n",
" free_vertices += [h]\n",
"\n",
" \n",
" # displaying all attributes and important parameters involved\n",
" print(\"p = \",p)\n",
" print(\"vertex_Type = \",vertex_type)\n",
" print (\"x = \", x)\n",
" print (\"y = \", y)\n",
" print(\"collinear_vertices = \", collinear_vertices)\n",
" print(\"concave_vertices =\", concave_vertices)\n",
" print(\"horizontal_chords = \" ,horizontal_chords)\n",
" print(\"vertical_chords = \",vertical_chords)\n",
" nx.draw(G)\n",
" plt.show()\n",
" plt.gcf().clear()\n",
" nx.draw(M)\n",
" plt.show()\n",
" plt.gcf().clear()\n",
" print(\"maximum independent = \", max_independent)\n",
"\n",
" # drawing the partitioned polygon \n",
" ind_chords = []\n",
" for i in max_independent:\n",
" if (i >= len(horizontal_chords)):\n",
" ind_chords += [vertical_chords[i-len(horizontal_chords)]]\n",
" else:\n",
" ind_chords += [horizontal_chords[i]]\n",
" unmatched_concave_vertices = [i for i in concave_vertices]\n",
" for i,j in ind_chords:\n",
" if i in unmatched_concave_vertices:\n",
" unmatched_concave_vertices.remove(i)\n",
" if j in unmatched_concave_vertices:\n",
" unmatched_concave_vertices.remove(j)\n",
" \n",
" print(\"Unmatched concave vertices\", unmatched_concave_vertices)\n",
" nearest_chord = []\n",
" for i in unmatched_concave_vertices:\n",
" dist = 0\n",
" nearest_distance = math.inf\n",
" for j in max_independent:\n",
" if j < len(horizontal_chords):\n",
" temp1, temp2 = horizontal_chords[j]\n",
" if abs(y[i] - y[temp1]) < nearest_distance and \\\n",
" (x[i] <= x[temp1] and x[i] >= x[temp2] or x[i] >= x[temp1] and x[i] <= x[temp2]) \\\n",
" and abs(temp1 - i) != 1 and abs(temp2 - i) != 1:\n",
" middles = []\n",
" for u in range(len(x)):\n",
" if x[i] == x[u] and (y[i] < y[u] and y[u] < y[temp1] or y[temp1] < y[u] and y[u] < y[i]):\n",
" middles.append(u)\n",
" if len(middles) == 0:\n",
" nearest_distance = abs(y[i] - y[temp1])\n",
" dist = y[temp1] - y[i]\n",
"\n",
" if nearest_distance != math.inf:\n",
" nearest_chord.append((i,dist)) \n",
" else:\n",
" for k in collinear_vertices:\n",
" if x[k] == x[i] and abs(y[k] - y[i]) < nearest_distance and abs(k-i) != 1:\n",
" middles = []\n",
" for u in range(len(x)):\n",
" if x[i] == x[u] and (y[i] < y[u] and y[u] < y[k] or y[k] < y[u] and y[u] < y[i]):\n",
" middles.append(u)\n",
" if len(middles) == 0:\n",
" nearest_distance = abs(y[i] - y[k])\n",
" dist = y[k] - y[i]\n",
" nearest_chord.append((i,dist)) \n",
" \n",
" print(\"nearest_chord\", nearest_chord)\n",
" fig, ax = plt.subplots()\n",
" ax.plot(x+[0], y+[0], color='black')\n",
" ax.scatter(x+[0], y+[0], color='black')\n",
" for i in range(len(x)):\n",
" ax.annotate(i, (x[i],y[i]))\n",
" for i,j in ind_chords:\n",
" ax.plot([x[i],x[j]],[y[i],y[j]],color='black')\n",
" for i,dist in nearest_chord:\n",
" ax.plot([x[i],x[i]],[y[i], y[i]+dist],color='black')\n",
" plt.show()\n",
"\n",
"# Defining the keys function\n",
"wn.onkey(up, \"Up\")\n",
"wn.onkey(left, \"Left\")\n",
"wn.onkey(right, \"Right\")\n",
"wn.onkey(back, \"Down\")\n",
"wn.onkey(partition_polygon, \"Escape\")\n",
"wn.listen()\n",
"\n",
"wn.mainloop()"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initial input rectillinear graph\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11fa26be0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"collinear_vertices = [1, 2, 15, 18, 22, 23, 26, 27]\n",
"concave_vertices = [4, 7, 8, 11, 12, 16, 20, 25]\n",
"horizontal_chords = [(8, 25), (16, 20), (22, 12), (23, 11), (26, 7), (27, 4)]\n",
"vertical_chords = [(4, 7), (8, 11), (20, 25), (2, 16), (15, 12)]\n",
"The maximum partitioned rectillinear polygon\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x118f75c50>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nG2OMy1mjd4EVK1YwbNgwvvzlLzNv3jyn48TV9OnTGTx4cNy+RLk3+fzzzxk7diwjRowgPz+fBQsW\nOB0prj7//HOuvvpqRo0aRX5+Pj/72c+cjuQa1uj7uBMnTvDjH/+YV155hbq6OhYtWkRdXZ3TseJm\n2rRprFixwukYPUJEqKqqoq6ujmAwyMKFC1393KampvLnP/+ZTZs2EQqFWLFiBcFg0OlYrmCNvo9b\nt24dX/7yl7niiivo378/N998M0uXLnU6VtyUlZUxcOBAp2P0iNTUVIqKigBIS0sjLy+PpqYmh1PF\nj4hw/vnnA3Ds2DGOHTtGyzeWmu6yRt/HNTU1cfnll7c+zsrKcnUzSFT19fVs3LiR0tJSp6PE1YkT\nJygsLGTw4MGMHz/e9fX2lLg1ehG5XkS2ish2EZkdr3mMcbvDhw9TUVHB/PnzSU9PdzpOXCUnJxMK\nhdi5cyfr1q1jy5YtTkdyhbg0ehFJBhYCXwdGAFNEZEQ85kpE//zP/8yaNWtYs2YNkydPZuXKla3L\ndu7cSWZmpoPpYq+mpgafz0dSUhI+n48lS5Y4HSmuampqCAaDrFmzBq/Xy1e/+lUqKyuZNGmS09Fi\nLrJWn89HTU0NABdeeCFjx45NmPMxcdeZbxA/1xswGvhTxON7gHvaWr+4uLhb34SeSGbNmqXAWbfK\nykptbm7WkSNH6pYtW5yOGTOBQEA9Hs9ptQ4YMECzsrKcjhYX0epNSUnRQCDgdLSYi1breeedp4FA\nQI8eParXXnut/vGPf3Q6Zq8G1GonerK0rBtbIvId4HpVvSX8+PtAqar+r2jrl5SUaG1tbcxzuFFK\nSgonTpyIumzAgAFceumleL3eHk4VP8FgkObm5qjL+vfvj8/nIyMjo4dTxU9b9YoIHo+HnJwcBg0a\n5ECy2Gur1n79+jF06FBuuukm/u3f/s2BZH2HiGxQ1ZKO1kvpiTDRiMhMYCZAdna2UzH6nLaaPODK\nE1dtNXmA0aNH92CSntFWvapKSUmH7+c+pa1ajx8/bsfmYyxejb4JuDzicVZ4rJWqVgPV0LJHH6cc\nrpOcnBy12ScnJ7N69eqeDxRnPp+PhoaGs8a9Xq/V28e1Vavt+MVevK66WQ/kikiOiPQHbgZejtNc\nCWXmzJnnNN7X+f1+PB7PaWMejwe/3+9QovhKpHoTqVbHdeZAflduwA3A+8AHwL3trWsnY8/NrFmz\nNDk5WQFNTk7WWbNmOR0prgKBgHq9XhUR9Xq9rjwxGSmR6k2kWuMBJ0/Gnis7GWuMMeeusydj7V/G\nGmOMy1mjN8YYl7NGb4wxLmeN3hhjXM4avTHGuJw1emOMcTlr9MYY43LW6I0xxuV6xT+YEpGPgbP/\n04v4uxj4xIF5Y8XyO6sv5+/L2cHyn+JV1Us6WqlXNHqniEhtZ/5VWW9l+Z3Vl/P35exg+c+VHbox\nxhiXs0ZvjDEul+iNvtrpAN1k+Z3Vl/P35exg+c9JQh+jN8aYRJDoe/TGGON6CdnoReQhEXlPRDaL\nyB9E5MKIZfeIyHYR2Soi1zmZsz0icn0443YRme10nvaIyOUiskpE6kTkHRG5LTw+UEReFZFt4T8v\ncjpre0QkWUQ2isiy8OM+k19ELhSR34df9++KyOi+kl9Ebg+/braIyCIRGdDbs4vI0yKyT0S2RIy1\nmTnefSchGz3wKlCgqiNp+RasewBEZAQtX3uYD1wP/FJEkh1L2YZwpoXA14ERwJRw9t7qOHCHqo4A\nrgF+HM47G3hdVXOB18OPe7PbgHcjHvel/AuAFao6HBhFSx29Pr+IZAL/GyhR1QIgmZb3aG/P/gwt\nPSRS1Mw90XcSstGr6kpVPR5+GKTly8sBvgU8p6rNqvoRsB242omMHbga2K6qH6rqF8BztGTvlVR1\nt6q+Fb7/GS1NJpOWzM+GV3sW+LYzCTsmIlnA/wT+I2K4T+QXkQuAMuApAFX9QlUP0kfyAynAeSKS\nAniAXfTy7Kr6BrD/jOG2Mse97yRkoz/DdOCV8P1MoDFi2c7wWG/TV3KeRUR8wFeA/wKGqOru8KI9\nwBCHYnXGfOBu4GTEWF/JnwN8DPw6fOjpP0TkS/SB/KraBPw7sAPYDXyqqivpA9mjaCtz3N/Prm30\nIvJa+JjembdvRaxzLy2HFWqcS5o4ROR84CXgJ6p6KHJZ+IuOe+UlYCJyI7BPVTe0tU5vzk/LHnER\n8ISqfgU4whmHOnpr/vBx7G/R8svqMuBLIvK9yHV6a/b29HTmlJ6aqKep6tfaWy4i04AbgXH639eY\nNgGXR6yWFR7rbfpKzlYi0o+WJl+jqovDw3tFJENVd4tIBrDPuYTt+h/AN0XkBmAAkC4iAfpO/p3A\nTlX9r/Dj39PS6PtC/q8BH6nqxwAishj4Kn0j+5nayhz397Nr9+jbIyLX0/Ix/JuqejRi0cvAzSKS\nKiI5QC6wzomMHVgP5IpIjoj0p+VEzssOZ2qTiAgtx4ffVdWHIxa9DEwN358KLO3pbJ2hqveoapaq\n+mj5u/6zqn6PvpN/D9AoIsPCQ+OAOvpG/h3ANSLiCb+OxtFyjqcvZD9TW5nj33dUNeFutJzsaARC\n4duvIpbdC3wAbAW+7nTWdmq4gZYrhj4A7nU6TwdZr6XlY+rmiL/zG4BBtFx9sA14DRjodNZO1DIG\nWBa+32fyA4VAbfg5WAJc1FfyA3OB94AtwG+B1N6eHVhEyzmFY7R8oprRXuZ49x37l7HGGONyCXno\nxhhjEok1emOMcTlr9MYY43LW6I0xxuWs0RtjjMtZozfGGJezRm+MMS5njd4YY1zu/wMrVysnqt59\nuQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11fa5d5c0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"The minimum partitioned rectillinear polygon\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x11f7f8da0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nMQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1200180b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"'Please make sure that the INPUT is A CLOSED RECTILINEAR POLYGON,'\n",
"'CONSTRUCTED WHILE GOING IN ANTI-CLOCKWISE ONLY'\n",
"# importing libraries\n",
"import networkx as nx\n",
"import turtle\n",
"import matplotlib.pyplot as plt\n",
"import warnings\n",
"from networkx.algorithms import bipartite\n",
"import math\n",
"\n",
"warnings.filterwarnings(\"ignore\")\n",
"# declaration list\n",
"wn = turtle.Screen()\n",
"# a turtle called gopu \n",
"gopu = turtle.Turtle() \n",
"# co-ordinate points\n",
"x = [] \n",
"y = []\n",
"# vertex-type := rectilinear = -1; convex = 0; concave = 1 \n",
"vertex_type = [] \n",
"# store the bipartite graph of chords\n",
"G = nx.Graph()\n",
"# the line below can be commented if one needs animation\n",
"gopu.speed(0)\n",
"# starts recording keys being pressed\n",
"gopu.begin_poly()\n",
"\n",
"# Event handlers\n",
"stride = 25\n",
"# Up = up() - vertex to be deleted = -1\n",
"def up():\n",
" vertex_type.append(-1)\n",
" gopu.forward(stride)\n",
" \n",
"# left = left() ; make vertex - convex = 0\n",
"def left():\n",
" vertex_type.append(0)\n",
" gopu.setheading(gopu.heading()+90)\n",
" gopu.forward(stride)\n",
" \n",
"# right = right() ; make vertex - concave = 1\n",
"def right():\n",
" vertex_type.append(1)\n",
" gopu.setheading(gopu.heading()-90)\n",
" gopu.forward(stride)\n",
" \n",
"# back = back() -- doing undo is allowed only once.\n",
"def back():\n",
" vertex_type.pop()\n",
" gopu.undo()\n",
"\n",
"# quits the screen and outputs the plots the partitioned polygon\n",
"def partition_polygon():\n",
" # closing the screen\n",
" wn.bye()\n",
" # stopped recording the polygon\n",
" gopu.end_poly()\n",
" p = gopu.get_poly()\n",
" p = list(p)\n",
" compute_partition(p) \n",
" \n",
"'''\n",
"The movements of the turtle are recorded and the rectilinear polygon thus \n",
"obtained is converted into bipartite graph of chords\n",
"'''\n",
"def compute_partition(p):\n",
" # p now contains the list of coordinates of vertices\n",
" # last one is same as the origin\n",
" # and the origin is always going to be a convex vertex\n",
" p.pop()\n",
" vertex_type[0] = 0\n",
" \n",
" # x and y contain list of x and y coordinates respectively\n",
" for i,j in p:\n",
" x.append(i)\n",
" y.append(j)\n",
"\n",
" # this is done as there are some very small errors in recording the \n",
" # position by the turtle library\n",
" for i in range(len(x)):\n",
" x[i] = int(x[i])\n",
" y[i] = int(y[i])\n",
"\n",
" for i in range(len(x)):\n",
" if x[i] % stride != 0:\n",
" x[i] += (stride - x[i] % stride)\n",
" if y[i] % stride != 0:\n",
" y[i] += (stride - y[i] % stride)\n",
"\n",
" # separating concave and collinear vertices\n",
" collinear_vertices = [i for i,val in enumerate(vertex_type) if val == -1]\n",
" concave_vertices = [i for i,val in enumerate(vertex_type) if val == 1]\n",
" \n",
" # finding the chords inside the polygon\n",
" horizontal_chords = []\n",
" vertical_chords = []\n",
"\n",
" # middles is used because, there are cases when there is a chord between vertices\n",
" # and they intersect with external chords, hence if there is any vertex in between \n",
" # two vertices then skip that chord. \n",
" for i in range(len(concave_vertices)):\n",
" for j in range(i+1,len(concave_vertices)):\n",
" if concave_vertices[j] != concave_vertices[i] + 1:\n",
" middles = []\n",
" if y[concave_vertices[i]] == y[concave_vertices[j]]:\n",
" for k in range(len(x)):\n",
" if y[concave_vertices[i]] == y[k] and (x[concave_vertices[i]] < x[k] and x[concave_vertices[j]] > x[k] \\\n",
" or x[concave_vertices[i]] > x[k] and x[concave_vertices[j]] < x[k]):\n",
" middles.append(k)\n",
" if len(middles) == 0:\n",
" horizontal_chords.append((concave_vertices[i],concave_vertices[j]))\n",
" middles = []\n",
" if x[concave_vertices[i]] == x[concave_vertices[j]]:\n",
" for k in range(len(x)):\n",
" if x[concave_vertices[i]] == x[k] and (y[concave_vertices[i]] < y[k] and y[concave_vertices[j]] > y[k] \\\n",
" or y[concave_vertices[i]] > y[k] and y[concave_vertices[j]] < y[k]):\n",
" middles.append(k)\n",
" if len(middles) == 0:\n",
" vertical_chords.append((concave_vertices[i],concave_vertices[j]))\n",
" \n",
"\n",
" temp_hori = horizontal_chords[:]\n",
" temp_verti = vertical_chords[:]\n",
"\n",
" for i in range(len(collinear_vertices)):\n",
" for j in range(len(concave_vertices)):\n",
" middles = []\n",
" if y[collinear_vertices[i]] == y[concave_vertices[j]]:\n",
" if collinear_vertices[i] < concave_vertices[j]:\n",
" for k in range(len(x)):\n",
" if y[k] == y[collinear_vertices[i]] and (x[k] < x[concave_vertices[j]] \\\n",
" and x[k] > x[collinear_vertices[i]] or x[k] > x[concave_vertices[j]] \\\n",
" and x[k] < x[collinear_vertices[i]]):\n",
" middles.append(k)\n",
" if collinear_vertices[i]+1 == concave_vertices[j]:\n",
" middles.append(0)\n",
" else:\n",
" for k in range(len(x)):\n",
" if y[k] == y[collinear_vertices[i]] and (x[k] > x[concave_vertices[j]] \\\n",
" and x[k] < x[collinear_vertices[i]] or x[k] < x[concave_vertices[j]] \\\n",
" and x[k] > x[collinear_vertices[i]]):\n",
" middles.append(k)\n",
" if collinear_vertices[i] == concave_vertices[j]+1:\n",
" middles.append(0)\n",
" if len(middles) == 0:\n",
" horizontal_chords.append((collinear_vertices[i],concave_vertices[j]))\n",
" middles = []\n",
" if x[collinear_vertices[i]] == x[concave_vertices[j]]:\n",
" if collinear_vertices[i] < concave_vertices[j]:\n",
" for k in range(len(x)):\n",
" if x[k] == x[collinear_vertices[i]] and (y[k] < y[concave_vertices[j]] \\\n",
" and y[k] > y[collinear_vertices[i]] or y[k] > y[concave_vertices[j]] \\\n",
" and y[k] < y[collinear_vertices[i]]):\n",
" middles.append(k)\n",
" if collinear_vertices[i]+1 == concave_vertices[j]:\n",
" middles.append(0)\n",
" else:\n",
" for k in range(len(x)):\n",
" if x[k] == x[collinear_vertices[i]] and (y[k] > y[concave_vertices[j]] \\\n",
" and y[k] < y[collinear_vertices[i]] or y[k] < y[concave_vertices[j]] \\\n",
" and y[k] > y[collinear_vertices[i]]):\n",
" middles.append(k)\n",
" if collinear_vertices[i] == concave_vertices[j]+1:\n",
" middles.append(0)\n",
" if len(middles) == 0:\n",
" vertical_chords.append((collinear_vertices[i],concave_vertices[j])) \n",
" # displaying all attributes and important parameters involved\n",
" # plotting the initial input given\n",
" print (\"Initial input rectillinear graph\")\n",
" fig, ax = plt.subplots()\n",
" ax.plot(x+[0], y+[0], color='black')\n",
" ax.scatter(x+[0], y+[0], color='black')\n",
" for i in range(len(x)):\n",
" ax.annotate(i, (x[i],y[i]))\n",
" plt.show()\n",
" plt.clf()\n",
" \n",
" print(\"collinear_vertices = \", collinear_vertices)\n",
" print(\"concave_vertices =\", concave_vertices)\n",
" print(\"horizontal_chords = \" ,horizontal_chords)\n",
" print(\"vertical_chords = \",vertical_chords)\n",
" \n",
" # drawing the maximum partitioned polygon \n",
" print(\"The maximum partitioned rectillinear polygon\")\n",
" fig, ax = plt.subplots()\n",
" ax.plot(x+[0], y+[0], color='black')\n",
" ax.scatter(x+[0], y+[0], color='black')\n",
" for i in range(len(x)):\n",
" ax.annotate(i, (x[i],y[i]))\n",
" for i,j in horizontal_chords:\n",
" ax.plot([x[i],x[j]],[y[i],y[j]],color='black')\n",
" for i,j in vertical_chords:\n",
" ax.plot([x[i],x[j]],[y[i],y[j]],color='black')\n",
" plt.show()\n",
" plt.clf()\n",
" # MAXIMUM PARTITION CODE ENDS ---------------------------------\n",
"\n",
" # MINIMUM PARTITION CODE STARTS -------------------------------\n",
" horizontal_chords = temp_hori[:]\n",
" vertical_chords = temp_verti[:]\n",
"\n",
" # Creating a bipartite graph from the set of chords\n",
" for i,h in enumerate(horizontal_chords):\n",
" y1 = y[h[0]]\n",
" x1 = min(x[h[0]] ,x[h[1]] )\n",
" x2 = max(x[h[0]] ,x[h[1]])\n",
" G.add_node(i, bipartite=1)\n",
" for j,v in enumerate(vertical_chords):\n",
" x3 = x[v[0]]\n",
" y3 = min(y[v[0]],y[v[1]])\n",
" y4 = max(y[v[0]],y[v[1]])\n",
" G.add_node(j + len(horizontal_chords),bipartite=0)\n",
" if x1 <= x3 and x3 <=x2 and y3 <= y1 and y1 <= y4: \n",
" G.add_edge(i, j + len(horizontal_chords))\n",
" \n",
" if len(horizontal_chords) == 0:\n",
" for j,v in enumerate(vertical_chords):\n",
" x3 = x[v[0]]\n",
" y3 = min(y[v[0]],y[v[1]])\n",
" y4 = max(y[v[0]],y[v[1]])\n",
" G.add_node(j,bipartite=0)\n",
" \n",
" # finding the maximum matching of the bipartite graph, G.\n",
" M = nx.Graph()\n",
" maximum_matching = nx.bipartite.maximum_matching(G)\n",
" maximum_matching_list = []\n",
" for i,j in maximum_matching.items():\n",
" maximum_matching_list += [(i,j)]\n",
" M.add_edges_from(maximum_matching_list)\n",
" maximum_matching = M.edges()\n",
" # breaking up into two sets\n",
" H, V = bipartite.sets(G)\n",
" free_vertices = []\n",
" for u in H:\n",
" temp = []\n",
" for v in V:\n",
" if (u,v) in maximum_matching or (v,u) in maximum_matching:\n",
" temp += [v]\n",
" if len(temp) == 0:\n",
" free_vertices += [u]\n",
" for u in V:\n",
" temp = []\n",
" for v in H:\n",
" if (u,v) in maximum_matching or (v,u) in maximum_matching:\n",
" temp += [v]\n",
" if len(temp) == 0:\n",
" free_vertices += [u]\n",
" \n",
" # finding the maximum independent set\n",
" max_independent = []\n",
" while len(free_vertices) != 0 or len(maximum_matching) != 0:\n",
" if len(free_vertices) != 0 :\n",
" u = free_vertices.pop()\n",
" max_independent += [u]\n",
" else:\n",
" u, v = maximum_matching.pop()\n",
" G.remove_edge(u,v)\n",
" max_independent += [u]\n",
"\n",
" for v in G.neighbors(u):\n",
" G.remove_edge(u, v)\n",
" for h in G.nodes():\n",
" if (v,h) in maximum_matching:\n",
" maximum_matching.remove((v,h))\n",
" free_vertices += [h]\n",
" if (h,v) in maximum_matching:\n",
" maximum_matching.remove((h,v))\n",
" free_vertices += [h]\n",
"\n",
" \n",
" # drawing the partitioned polygon \n",
" independent_chords = []\n",
" for i in max_independent:\n",
" if (i >= len(horizontal_chords)):\n",
" independent_chords += [vertical_chords[i-len(horizontal_chords)]]\n",
" else:\n",
" independent_chords += [horizontal_chords[i]]\n",
" unmatched_concave_vertices = [i for i in concave_vertices]\n",
" for i,j in independent_chords:\n",
" if i in unmatched_concave_vertices:\n",
" unmatched_concave_vertices.remove(i)\n",
" if j in unmatched_concave_vertices:\n",
" unmatched_concave_vertices.remove(j)\n",
" \n",
" nearest_chord = []\n",
" for i in unmatched_concave_vertices:\n",
" dist = 0\n",
" nearest_distance = math.inf\n",
" for j in max_independent:\n",
" if j < len(horizontal_chords):\n",
" temp1, temp2 = horizontal_chords[j]\n",
" if abs(y[i] - y[temp1]) < nearest_distance and \\\n",
" (x[i] <= x[temp1] and x[i] >= x[temp2] or x[i] >= x[temp1] and x[i] <= x[temp2]) \\\n",
" and abs(temp1 - i) != 1 and abs(temp2 - i) != 1:\n",
" middles = []\n",
" for u in range(len(x)):\n",
" if x[i] == x[u] and (y[i] < y[u] and y[u] < y[temp1] or y[temp1] < y[u] and y[u] < y[i]):\n",
" middles.append(u)\n",
" if len(middles) == 0:\n",
" nearest_distance = abs(y[i] - y[temp1])\n",
" dist = y[temp1] - y[i]\n",
"\n",
" if nearest_distance != math.inf:\n",
" nearest_chord.append((i,dist)) \n",
" else:\n",
" for k in collinear_vertices:\n",
" if x[k] == x[i] and abs(y[k] - y[i]) < nearest_distance and abs(k-i) != 1:\n",
" middles = []\n",
" for u in range(len(x)):\n",
" if x[i] == x[u] and (y[i] < y[u] and y[u] < y[k] or y[k] < y[u] and y[u] < y[i]):\n",
" middles.append(u)\n",
" if len(middles) == 0:\n",
" nearest_distance = abs(y[i] - y[k])\n",
" dist = y[k] - y[i]\n",
" nearest_chord.append((i,dist)) \n",
" \n",
" print(\"The minimum partitioned rectillinear polygon\")\n",
" fig, ax = plt.subplots()\n",
" ax.plot(x+[0], y+[0], color='black')\n",
" ax.scatter(x+[0], y+[0], color='black')\n",
" for i in range(len(x)):\n",
" ax.annotate(i, (x[i],y[i]))\n",
" for i,j in independent_chords:\n",
" ax.plot([x[i],x[j]],[y[i],y[j]],color='black')\n",
" for i,dist in nearest_chord:\n",
" ax.plot([x[i],x[i]],[y[i], y[i]+dist],color='black')\n",
" plt.show()\n",
" # MAXIMUM PARTITION CODE ENDS\n",
"# Defining the keyboard keys function\n",
"wn.onkey(up, \"Up\")\n",
"wn.onkey(left, \"Left\")\n",
"wn.onkey(right, \"Right\")\n",
"wn.onkey(back, \"Down\")\n",
"wn.onkey(partition_polygon, \"Escape\")\n",
"wn.listen()\n",
"wn.mainloop()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [gopumental]",
"language": "python",
"name": "Python [gopumental]"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment