Skip to content

Instantly share code, notes, and snippets.

@nghia1991ad
Last active November 10, 2022 06:48
Show Gist options
  • Save nghia1991ad/dcaa6c2cc80eb5b5edce4fdaa3daed22 to your computer and use it in GitHub Desktop.
Save nghia1991ad/dcaa6c2cc80eb5b5edce4fdaa3daed22 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "9ee30705",
"metadata": {},
"source": [
"### Write a function is_inside_polygon(), with the following signature:\n",
"\n",
"def is_inside_polygon(polygon, px,py)\n",
"\n",
"\"polygon is a Nx2 array, contains N points of (x,y)pairs. These points form a non-intersection polygon in 2D.\n",
"\n",
"(px, py) is the test point.\n",
"\n",
"Returns True or False (whether the test point is inside the polygon). \n",
"\"\n",
"\n",
"Test your function with a square polygon = ((0,0), (0,0.5), (0.5,0.5), (0.5, 0)), and 10 random (px, py).\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "141a0c6b",
"metadata": {},
"source": [
"## To solve this problem:\n",
"\n",
"Step 1: You should install a package named shapely\n",
"https://pypi.org/project/shapely/\n",
"\n",
"Step 2: Change the example from https://stackoverflow.com/questions/36399381/whats-the-fastest-way-of-checking-if-a-point-is-inside-a-polygon-in-python to your work \n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "b34fe052",
"metadata": {},
"source": [
"### Step 1. Install a package\n",
"\n",
"1. Open Anaconda prompt.\n",
"\n",
"2. Use pip <name of package>\n",
" \n",
"E.g: pip install shapely"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "32289470",
"metadata": {},
"outputs": [],
"source": [
"# Make sure you install the program\n",
"\n",
"from shapely.geometry import Point\n",
"\n",
"# You have successfully installed a package (program)"
]
},
{
"cell_type": "markdown",
"id": "1ef78106",
"metadata": {},
"source": [
"### Step 2: Make the function (or modify the example)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "d418d25b",
"metadata": {},
"outputs": [],
"source": [
"# Now we can modify the example\n",
"from shapely.geometry import Point\n",
"from shapely.geometry.polygon import Polygon"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "fdf6bfa2",
"metadata": {},
"outputs": [],
"source": [
"# We are making this function\n",
"def is_inside_polygon(polygon, px, py):\n",
" polygon = Polygon(polygon)\n",
" point = Point(px,py)\n",
" return polygon.contains(point)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "12cc06d5",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3\n"
]
}
],
"source": [
"# Example of a function\n",
"\n",
"\n",
"def plus_n (a,b):\n",
" return a + b\n",
"plus_n(1,2)\n",
"#print(\"Today is a good day\")\n",
"c = plus_n(1,2)\n",
"print(c)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "df34ef71",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# We test on just any example ---- just to make sure the function works\n",
"is_inside_polygon([(0,0), (0,0.5), (0.5,0.5), (0.5, 0)], 0.4,0.2)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "e22aa314",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAd2klEQVR4nO3dcWyc9X348Y9jxzbJD3slAROEMYZRJyFdCZcVHJpGFDBLq0qbNjUiIqFSouEBK8aqqmRBS4imZUgQsqokEArtKEtqsTBtVaOBpzXUNFRVjCOVhZaqS3EU7KbJqJ22wybO8/sji1djB3yO7S9nXi/pJO7x89x97ouVe+u5811RlmVZAAAkMi31AADAh5sYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApEpSDzAap06dijfffDPOP//8KCoqSj0OADAKWZbFiRMn4pJLLolp085+/qMgYuTNN9+M6urq1GMAAGNw+PDhuPTSS8/684KIkfPPPz8iTj+YioqKxNMAAKPR29sb1dXVg8/jZ1MQMXLmpZmKigoxAgAF5v3eYuENrABAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJjipFt27ZFbW1tlJeXRy6Xi7a2trPuu3fv3igqKhp2+fGPfzzmoQGAqSPvGGlpaYmmpqZYv359dHR0xJIlS2LZsmXR2dn5nsf95Cc/ia6ursHLVVddNeahAYCpoyjLsiyfA6677rq49tprY/v27YPb5s2bF3/8x38cmzdvHrb/3r1748Ybb4y33norfu/3fm9MQ/b29kZlZWX09PSM63fTZFkW//POwLjdHgAUovOmF7/v98eMxWifv/P6orz+/v5ob2+PtWvXDtne0NAQ+/bte89jFy5cGG+//XbMnz8/7r///rjxxhvPum9fX1/09fUNXu/t7c1nzFHJsiz+7LGXo/2Nt8b9tgGgkCyq+Ug821g/IUEyGnm9THPs2LEYGBiIqqqqIdurqqqiu7t7xGPmzJkTO3bsiN27d8dzzz0XdXV1cdNNN8X3vve9s97P5s2bo7KycvBSXV2dz5ij8j/vDAgRAIiI/W+8lfSVgrzOjJzx7nLKsuysNVVXVxd1dXWD1+vr6+Pw4cPx0EMPxac+9akRj1m3bl00NzcPXu/t7Z2QIDlj//03x4zS4gm7fQD4IPpt/0As+pt/Tz1GfjEye/bsKC4uHnYW5OjRo8POlryX66+/Pp555pmz/rysrCzKysryGe2czCgtjhmlY+oyAOAc5fUyTWlpaeRyuWhtbR2yvbW1NRYvXjzq2+no6Ig5c+bkc9cAwBSV9+mA5ubmWLlyZSxatCjq6+tjx44d0dnZGY2NjRFx+iWWI0eOxNNPPx0REVu3bo3LL788rr766ujv749nnnkmdu/eHbt37x7fRwIAFKS8Y2T58uVx/Pjx2LRpU3R1dcWCBQtiz549UVNTExERXV1dQz5zpL+/P770pS/FkSNH4rzzzourr746vvOd78RnPvOZ8XsUAEDByvtzRlKYiM8Z+W3/yZj/189HRMTBTbd6zwgAHzoT/Vw42udv300DACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkNaYY2bZtW9TW1kZ5eXnkcrloa2sb1XHf//73o6SkJK655pqx3C0AMAXlHSMtLS3R1NQU69evj46OjliyZEksW7YsOjs73/O4np6eWLVqVdx0001jHhYAmHryjpEtW7bE6tWrY82aNTFv3rzYunVrVFdXx/bt29/zuDvvvDNWrFgR9fX1Yx4WAJh68oqR/v7+aG9vj4aGhiHbGxoaYt++fWc97utf/3r87Gc/iw0bNozqfvr6+qK3t3fIBQCYmvKKkWPHjsXAwEBUVVUN2V5VVRXd3d0jHvPTn/401q5dG//4j/8YJSUlo7qfzZs3R2Vl5eCluro6nzEBgAIypjewFhUVDbmeZdmwbRERAwMDsWLFinjggQfiox/96Khvf926ddHT0zN4OXz48FjGBAAKwOhOVfyv2bNnR3Fx8bCzIEePHh12tiQi4sSJE7F///7o6OiIe+65JyIi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uVy0trYO2d7a2hqLFy8e8Zj6+vph+7/wwguxaNGimD59+oTNWsjGss6MzVjXeteuXfGFL3whdu7cGZ/97GcnesyCN16/01mWRV9f33iPN2Xku84VFRXxox/9KA4cODB4aWxsjLq6ujhw4EBcd911kzV6QRmv3+eOjo6JfavCpL1VNoEzf8705JNPZgcPHsyampqymTNnZj//+c+zLMuytWvXZitXrhzc/8yf9t53333ZwYMHsyeffNKf9o5CvuucZVnW0dGRdXR0ZLlcLluxYkXW0dGR/ed//meK8QtKvmu9c+fOrKSkJHv00UeH/Iner371q1QPoSDku85f/epXs3/913/NXn/99ez111/PnnrqqayioiJbv359qodQEMbyb8fv8tc0o5PvOj/yyCPZP//zP2evv/569uqrr2Zr167NIiLbvXv3hM04pWMky7Ls0UcfzWpqarLS0tLs2muvzV588cXBn91xxx3Z0qVLh+y/d+/ebOHChVlpaWl2+eWXZ9u3b5/kiQtTvuscEcMuNTU1kzt0gcpnrZcuXTriWt9xxx2TP3iByWedv/KVr2RXX311NmPGjKyioiJbuHBhtm3btmxgYCDB5IUl3387fpcYGb181vnBBx/Mrrzyyqy8vDz7yEc+kn3yk5/MvvOd70zofEVZ9r/v0AQASGDKvmcEACgMYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACCp/w8jXqFEzgOuYwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Draw to see, no need to include in your howework\n",
"# Optional, I don't think the professor requires you to do this\n",
"import matplotlib.pyplot as plt\n",
"plt.plot([0,0,0.5,0.5,0],[0,0.5,0.5,0,0])\n",
"plt.scatter(0.4,0.2)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 73,
"id": "4c4ea927",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Point number # 1: 0.92 0.86\n",
"Point number # 2: 0.15 0.68\n",
"Point number # 3: 0.21 0.38\n",
"Point number # 4: 0.81 0.16\n",
"Point number # 5: 0.13 0.02\n",
"Point number # 6: 0.84 0.75\n",
"Point number # 7: 0.11 0.98\n",
"Point number # 8: 0.02 0.02\n",
"Point number # 9: 0.28 0.09\n",
"Point number # 10: 0.37 0.44\n"
]
}
],
"source": [
"# Test the program with 10 random points\n",
"\n",
"# Import the function\n",
"from random import random\n",
"\n",
"#make a list\n",
"testpoint = []\n",
"# loop from 0 to 10 - making 10 points\n",
"for i in range(0,10):\n",
" # px, py = some random number\n",
" px, py = random(),random()\n",
" #add to the list\n",
" testpoint.append([px,py])\n",
" # print to see if it works\n",
" print(\"Point number # {}: {:.2f} {:.2f}\".format(i+1,px, py))"
]
},
{
"cell_type": "code",
"execution_count": 74,
"id": "cbd1e70f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Point px: 0.92 py: 0.86 is inside the square False\n",
"Point px: 0.15 py: 0.68 is inside the square False\n",
"Point px: 0.21 py: 0.38 is inside the square True\n",
"Point px: 0.81 py: 0.16 is inside the square False\n",
"Point px: 0.13 py: 0.02 is inside the square True\n",
"Point px: 0.84 py: 0.75 is inside the square False\n",
"Point px: 0.11 py: 0.98 is inside the square False\n",
"Point px: 0.02 py: 0.02 is inside the square True\n",
"Point px: 0.28 py: 0.09 is inside the square True\n",
"Point px: 0.37 py: 0.44 is inside the square True\n"
]
}
],
"source": [
"# Use the function is_inside_polygon and check the 10 points\n",
"square = [(0,0), (0,0.5), (0.5,0.5), (0.5, 0)]\n",
"for i in range(0,10):\n",
" px, py = testpoint[i][0], testpoint[i][1]\n",
" print(\"Point px: {:.2f} py: {:.2f} is inside the square {}\".format(px, py, is_inside_polygon(square, px, py)))\n",
" #print(is_inside_polygon(square, px, py))"
]
},
{
"cell_type": "code",
"execution_count": 75,
"id": "54b64619",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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beG+4Zrad6qGdBwiSVq5cqXL++/UqZPDeT+SHO4L9FMDBgzQ119/7dB29dg+ffpo06ZNLtcDAGgYTt9ZOjU1Vb/+9a+VkJCgfv36admyZcrPz9f48eMlXV7WOnnypN5++21ZrVbFxcU5jA8LC5O3t3elduCKLce2KHVrqgw5ho2iC0VK3ZqqhQMX2sMQAADXw+kgNHr0aJ0+fVpz5sxRQUGB4uLitGHDBnXs2FHS5ZNKr3VPIaA6FbYK/e6r31UKQZJkyJBFFr361asaFDXIYZkMAABXuHSy9FNPPaW8vDyVlZUpKytLt99+u/251atXa+vWrdWOnTVrVqWrboAr9hbtdVgOu5ohQ4UXCrW3aG89VgUAaK74rjE0Kv+68C+39gMAoCYEITQqob6hbu0HAEBNCEJoVHqH9Va4b7gsqnxfKkmyyKII3wj1Dutdz5UBAJojghAaFQ+rh6b2vfwVLleHoSuPp/SdwonSAAC3IAih0RnScYgWDlyoMN8wh/Zw33AunQcAuJXTl88D9WFIxyEaFDWoxjtLAwBwvQhCaLQ8rB7qE9GnocsAADRjLI0BAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTIggBAADTcikILVmyRNHR0fL29lZ8fLy2b99ebd9169bprrvuUmhoqAICAtSvXz99/vnnLhcMAADgLk4HobVr12rSpEmaPn269u3bp8TERA0bNkz5+flV9s/IyNBdd92lDRs2KCsrS4MGDdLw4cO1b9++6y4eAADgejgdhBYuXKjHHntMjz/+uGJjY7Vo0SJFRUUpLS2tyv6LFi3Sb37zG/Xp00cxMTF65ZVX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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Optional, I don't think the professor requires you to do this\n",
"import matplotlib.pyplot as plt\n",
"plt.plot([0,0,0.5,0.5,0],[0,0.5,0.5,0,0])\n",
"for i in range(0,10):\n",
" px, py = testpoint[i][0], testpoint[i][1]\n",
" plt.scatter(px,py)\n",
" s = \"{} {}\".format(i+1, is_inside_polygon(square, px, py))\n",
" plt.text(px+0.01,py+0.01,s)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cdfafdb8",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"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.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment