{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Measuring the distance to shape surfaces" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The distance from the center of a shape to its surface is a useful quantity in various situations.\n", "For instance, when the shape represents a vacancy in a crystal, we may wish to know how far the vacancy extends in certain directions.\n", "Another useful example is perturbative theories that treat various geometries relative to their inscribed spheres.\n", "Here we'll see how **coxeter** can be used to compute this quantity for a shape." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from matplotlib import patches\n", "from matplotlib import pyplot as plt\n", "\n", "import coxeter" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "def plot_distances(shape, vectors, colors):\n", " \"\"\"Plot vectors from the center of a shape with suitable labeling.\"\"\"\n", " fig, ax = plt.subplots(figsize=(4, 4))\n", "\n", " for v, c in zip(vectors, colors):\n", " ax.add_patch(\n", " patches.FancyArrow(\n", " x=shape.center[0],\n", " y=shape.center[1],\n", " dx=v[0],\n", " dy=v[1],\n", " width=0.02,\n", " color=c,\n", " length_includes_head=True,\n", " label=f\"{np.linalg.norm(v):0.2f}\",\n", " )\n", " )\n", "\n", " ax.legend(fontsize=18, bbox_to_anchor=(1.05, 0.75))\n", "\n", " # Pad the extent so the shapes edges aren't cut off.\n", " extent = shape.minimal_bounding_circle.radius + 0.02\n", " ax.set_xlim([-extent, extent])\n", " ax.set_ylim([-extent, extent])\n", " for spine in ax.spines.values():\n", " spine.set_visible(False)\n", " ax.tick_params(labelbottom=False, labelleft=False, bottom=False, left=False)\n", " return fig, ax" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the handy plotting function defined above, we visualize distance vectors computed using coxeter.\n", "We'll show how this works for both pentagons and ellipses." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "# These are the directions in which we'll find distances to the shape surfaces.\n", "random_angles = np.array([0.75 * np.pi, 1.5 * np.pi, 0])\n", "unit_vectors = np.vstack((np.cos(random_angles), np.sin(random_angles))).T\n", "colors = (\"r\", \"b\", \"g\")\n", "\n", "# Create a pentagon.\n", "pentagon = coxeter.families.RegularNGonFamily.get_shape(5)\n", "\n", "# Create a unit area ellipse.\n", "ellipse = coxeter.shapes.Ellipse(3, 4)\n", "ellipse.area = 1" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAADnCAYAAAA3gRxRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAA3xElEQVR4nO3deVxU5f4H8M8My8wAsgqikkAqhaJssinmgoJLqaNdENHE1NTUvHjLPYsWzetNbr/MrCwFU5RujmKoYCgoJoqyKEqZ5pILoOzLMMPMnN8fEydQUJSBMzN8369Xr+w8w8wHoQ/Dc85zHh7DMCCEEKK9+FwHIIQQ8nhU1IQQouWoqAkhRMtRURNCiJajoiaEEC1n+IRxuiSEEG7wuA5AtAe9oyaEEC1HRU0IIVqOipoQQrQcFTUhhGg5KmpCCNFyVNSEEKLlqKhJuykvL0d6ejrXMQjReVTURKPu3buHrVu3IiQkBLa2thg+fDgSExO5jkWITuM94TantOCFPNHVq1chkUggkUiQmZmJh7+nrKyskJOTA0dHR44S6iRa8EJYVNTkqTEMg9zcXLac8/Pz2TGBQIDg4GCIxWK8/PLLmDVrFpKSkuDv748TJ07AyMiIw+Q6hYqasKioSasolUqcOnUKEokE+/fvx40bN9gxc3NzvPzyyxCLxRgzZgzMzMzYsZKSEnh4eOD27dtYtmwZNmzYwEF6nURFTVhU1KRFMpkMP//8MyQSCRITE3H//n12zN7eHhMnToRYLMaIESNgbGzc4vNkZGRg+PDhUCqVSEpKwrhx4zoivq6joiYsKmrSRGVlJQ4dOgSJRIJDhw6hurqaHevduzfEYjHEYjH8/f3B57f+XPT69euxatUq2NjYIDc3Fw4ODu0RX59QURMWFTVBcXExDhw4AIlEgtTUVMjlcnbMw8ODLWc3NzfweM/WHyqVCuPGjUNycjICAwNx/PhxGBo+6eaNnRoVNWFRUXdS169fZ08Gnjp1ir1Sg8fjITAwEGKxGJMmTYKzs7PGXrO4uBgeHh64d+8eVq1ahY8//lhjz62HqKgJi4q6k2AYBvn5+ZBIJNi3bx/y8vLYMWNjY4waNQpisRgTJkyAnZ1du+VIT0/HyJEjwTAMjhw5guDg4HZ7LR1HRU1YVNR6TKVSITMzk33nfO3aNXbMzMwM48ePh1gsxtixY2Fubt5huT788EOsXbsWtra2yM3NRY8ePTrstXUIFTVhUVHrGblcjuPHj0MikeDAgQMoLCxkx2xtbdkrNYKCgiAQCDjJqFQqERISgtTUVAwfPhw///wzDAwMOMmixaioCYuKWg9UV1fjyJEjkEgkSEpKQkVFBTvm6OgIsViMyZMnY/DgwVpTiEVFRXB3d0dRURHWrl2L6OhoriNpGypqwqKi1lEPHjzAwYMHIZFIkJKSAplMxo65ubmxV2p4eHg885Ua7S01NRWjR48GABw9ehRBQUEcJ9Iq2vlFI5ygotYht27dwv79+yGRSHDixAmoVCp2LCAggC3nPn36cJjy6bz33nv44IMP0K1bN+Tm5sLe3p7rSNqCipqwqKi1GMMwKCgoYE8Gnj9/nh0zNDTEyJEjIRaLMXHiRHTv3p3DpM9OqVRi1KhRSEtLQ1BQEJKTk7VmeoZjVNSERUWtZVQqFbKysthyvnLlCjtmYmKCsWPHQiwWY/z48bC0tOQuqAbdvXsXHh4euH//Pj744AO8++67XEfSBlTUhEVFrQXq6+tx4sQJ7Nu3DwcOHMCdO3fYMWtra0yYMAFisRijR4+GSCTiMGn7SUlJQUhICPh8Po4dO4Zhw4ZxHYlrVNSERUXNkdraWqSkpEAikeDgwYMoKytjxxwcHNj55qFDh3aapdarVq3C+vXr0aNHD+Tm5sLW1pbrSFyioiYsKuoOVFZWhp9++gkSiQRHjhyBVCplx1xdXdly9vb21torNdqTQqHAiBEjkJGRgZCQEBw6dOipbvykZzrfNwBpERV1O7tz5w57w6O0tDQoFAp2zMfHhy3nF198kcOU2uP27dvw8PBASUkJ1q9fjxUrVnAdiStU1IRFRd0Orly5wp4MPHPmDHvcwMAAw4YNY294RLf6bN6hQ4cwfvx4GBgYIC0tDYGBgVxH4gIVNWFRUWsAwzDIzs5my/ny5cvsmFAoREhICLs1lY2NDYdJdceyZcuwceNGODg4IDc3tzP+vVFRExYV9TNSKBTIyMhgt6a6desWO2ZpacluTRUSEgJTU1MOk+qm+vp6DBs2DKdPn8b48eORmJjY2earqagJi4r6KdTV1eHo0aPs1lQlJSXsWPfu3TFp0iSIxWIMHz6cNnHVgFu3bsHDwwNlZWXYuHEj3n77ba4jdSQqasKion6CiooKJCUlQSKR4PDhw6ipqWHH+vbty54M9PX17Wzv+DpEYmIiJk6cCENDQ5w8eRL+/v5cR+ooVNSERUXdjMLCQvZKjWPHjqG+vp4d8/LyYsu5X79+nfIyuo62dOlSxMTEoFevXsjJyYG1tTXXkToCfWMRFhX1X65du8aeDDx9+jS7NRWfz8fQoUPZKzUcHR05Ttr5yOVyDB06FGfPnsWECROwf//+zvADUu8/QdJ6nbaoGYZBXl4eW84XL15kxwQCAUaPHg2xWIxXXnmls6+Q0wrXr1+Hp6cnKioqEBMTg3/+859cR2pvVNSE1amKWqlU4vTp02w5X79+nR0zNzdnt6YaM2YMunTpwmFS0px9+/ZhypQpMDIywqlTp+Dj48N1pPZERU1Yel/UMpkMx44dY7emKi4uZsfs7OzYralGjhzJ2dZUpPUWL16MzZs3w9nZGdnZ2XpzB8FmUFETll4WdVVVFQ4fPsxuTVVVVcWOOTs7sycDAwIC6N7HOkYmk2Hw4MHIzs7GlClT8MMPP+jrfLVeflLk2ehNUd+/fx+JiYmQSCT4+eefm2xNNXDgQLacBw4cqK//Y3caV69ehZeXF6qqqrB582YsXLiQ60jtgb5JCUuni/rmzZvq+eZ9+5Bx6hS7NRWPx8PgwYPZcn7++ec5Tko0LSEhAWFhYTA2Nsbp06fh5eXFdSRNo6ImLJ0qaoZhcOnSJfZkYE5ODjtmxOcjKDAQ4ogITJgwgfbe6wQWLFiArVu3onfv3sjOzoa5uTnXkTSJipqwtL6oVSoVzpw5w5bz1atX2TFTU1OMGzcO4suXMe7SJVgIhcDLLwMffQS88AKHqUlHqKurg7+/P/Ly8hAWFob4+Hh9mtbSm0+EtJ1WFrVcLkdaWhp7pca9e/fYsa5du7JbU40aNQpCoRDIywMCAgCpFDAwAIyMgFGjgPXrATc3Lj4F0kGuXLkCb29vVFdXY+vWrZg3bx7XkTSFipqwtKaoa2pqkJyczG5NVVFRwY716tWLnW8eMmRI81tTjR8PHDkC/DVPDT4fEAiAwEDgk08A/ZvDJH/ZvXs3IiIiIBAIcObMGbi7u3MdSROoqAmL06IuLS3FwYMHIZFIkJycjLq6OnasX79+mDx5MsRiMTw9PZ/8K+3ly4C3N9DoOQAAPB4gEgGDBgEbNgCd56Y+ncrcuXOxbds2uLi44Ny5c/qwYImKmrA4K+q5c+di+/btUCqV7DE/Pz/2nbOLi8vTP+mUKcCBA0Cj52zCxAQYMEBd2LTLtV6pra2Fn58f8vPzERERgZ07d+r6fLVOhyeaxVlR+/n54ezZswgMDER4eDgmTpyInj17tu1Jr15VF/HD76ofZmoKuLgA//0v8NJLbXtNojUKCgowaNAg1NbWYtu2bZg9ezbXkdqCipqwOC/qzMxM+Pn5ae6Jp00DfvgBaLSJbLP4fGDoUCAtTXOvTTgXFxeHmTNnQiQS4ezZs3DT3ZPJVNSEpX93ul+3DmjuZGNjRkaAkxOQkNAhkUjHee211zBz5kxIpVKEhoY22eiBEF2lf0Xt5ASEh6vL+HHS0wE7uw6JRDrWF198AVdXVxQUFGDRokVcxyGkzfSvqAHgww/V11O3xMAACA0Fams7LhPpMKampkhISIBIJMKOHTsQFxfHdSRC2kQ/i7pnT2DWLMDY+O9jja8AqKsDcnLUV35UV3d8PtLu3Nzc8PnnnwNQLzUvKCjgOBEhz04/ixoA3nvv73fVQiHQp4/6euoGdXXAxYvqBTGNFtcQ/fH6668jIiICtbW1CA0NRS39BkV0lP4WdbduwPz56rL28FC/g96xo2lZy2RAQQEweDBQVsZVUtJOeDwevvzyS7i4uCA/Px9LlizhOhIhz0R/ixoA1qxRXwVy7Jj62unQUGD37qZlLZerr7/29wdKSrjLStpFly5dkJCQAIFAgG3btmH37t1cRyLkqel3UVtbA8uWNS3mSZOA//1PvUqxgVwOXL8O+PoCjbbqIvrB3d0dn332GQBg3rx5uHLlCseJCHk6+l3ULRk3Dti/v2lZ19cDt24BPj5Ao7v1Ef3wxhtvICwsDNXV1QgNDW1yXxlCtF3nLGoAGD0aOHSoaVkrFMDdu+qyvn2bu2xE43g8Hr7++mv06dMHeXl5iIqK4joSIa3WeYsaUF+el5Kinr9uoFAAhYXqsr55k7tsROPMzc2RkJAAY2NjbN26FQm0MpXoiM5d1AAwZAiQmgqYmf19TKlUz1X7+AB//MFdNqJxnp6e2LRpEwBgzpw5uHbtGseJCHkyKmoA8PNTLylvvOeeSgU8eKA+wUgnn/TKm2++iSlTpqCqqgqhoaFNdqwnRBtRUTfw8gJOngQsLP4+xjBAaan60r3Ll7nLRjSKx+Nh27ZtcHZ2RnZ2Nt555x2uIxHyWFTUjQ0cCJw6BVhZ/b3knGHUi2EGDwYuXOA2H9EYS0tL7N27F0ZGRvj888+xb98+riMR0iL9ux+1Jvz229+rFRv//ZibA8eP0/6LeuS///0voqKiYGFhgZycHDg7O3MdqUG73I86Ozs7xNDQ8D2GYexBb9S0gYrH4xUqFIpoLy+v5JYeREXdkmvX1Dubl5T8vWEuoD7pmJqqnrsmOo9hGIjFYhw4cAA+Pj7IyMiAceObeXFH40WdnZ0dIhAINjs5OclFIlEdn8/vsM2rSfNUKhVPKpUKb9y4YSyTyRa1VNb0E7UlvXsDZ88CtrZNb5laXQ2MHAn88gt32YjG8Hg8fPfdd+jVqxeysrKwYsUKriO1G0NDw/ecnJzkpqamUipp7cDn8xlTU1Opk5OT3NDQ8L0WH9eRoXSOkxOQlQXY2zfdNaamBggOVl8pQnSetbU19u7dC0NDQ8TExCAxMZHrSO2CYRh7kUhESzK1kEgkqvtrOqpZVNRP8txz6rLu0ePRsh43Djh6lLtsRGP8/f2xfv16AEBkZCRu6udiJz69k9ZOf31dWuxjKurW6N5dPQ3y3HNNt/iqrVXf5OnwYc6iEc1ZunQpxo8fj7KyMkydOhX19fVcRyIEABV163Xrpi5rJ6emO8fU1gKvvgro6a/LnQmfz0dsbCwcHByQmZmJ1atXcx2JEABU1E+na1fgzBn1bjEPl/XUqcAPP3CXjWiEjY0N9uzZAwMDA2zcuBFJSUlcRyIEhk9+CGnCykp9xcdLL6mvt25YfiyVAjNnqu9tHRHBbUbSJkOGDMFHH32ElStXYubMmcjNzYWDgwPXsdpX167uKCnRnj6wsVHgwYM8rmNoC3pH/SwsLICMDMDNTb0fYwOpFJg7F9i+nbtsRCOWLVuGkJAQlJSUIDw8HAqFgutI7UubShpocx6lUono6Gg7Z2fn/gKBwMve3n7g3LlzHSorK1vVeTwez7u5f0xMTDybe/x3331n5enp+aJIJPI0NTX19Pb2fmHv3r0WzT32WWjXF0eXdOmivjwvKAjIy1Nvlguoy3rhQvU763nzuM1Inhmfz0dcXBw8PDyQkZGB9957Dx9//DHXsUgrzZkz57kdO3bYjR49unzRokVFBQUFwu3bt9tdvHjR5NSpU1cMGq+NaIG3t3f166+/fr/xMSMjo0eumlm9erX9unXrerq6utYuX778LgAkJCRYh4eH9yktLb2+YMGC0rZ+PlTUbWFqql5SHhICnDunLmlA/e+lS9XTIm+9xW1G8szs7OwQHx+PkSNHYv369Rg2bBiCg4O5jkWe4Ny5c8LY2Fi74ODg8uTkZPY+ts7OzvI1a9Y8980331jPnz//ieXp6Ogoe/PNNx/7uD///NNw48aNPfr27SvNycn5VSAQMACwcuXK4gEDBriuWLGiV1hYWLm1tbXqcc/zJDT10VYikXrzgYCApnsz1tYCK1cC//kPd9lImw0bNgzvv/8+GIbB9OnTcffuXa4jkSeIi4uzZhgGUVFRRY2PR0VF3RcKhar4+Hjr1j5XXV0dr6KiosWePH78uFl9fT3v1VdfLW0oaQAQCATMlClTSisrKw3i4+Mtn+kTaYSKWhOEQvW11MOGPVrW770HfPQRd9lIm61atQpBQUG4f/8+IiIioFQquY5EHiM7O9uUz+dj2LBhNY2Pm5iYMK6urtILFy6YtvSxjR0+fNjKzMzMy9LS0tPa2tp95syZz5WUlDSZM6mrq+P99dyPvGNuOJaZmWn28NjToqLWFGNj9bXUwcFN92GsrQXWrwfWruUuG2kTAwMD7Nq1C926dUNaWho++OADriORxyguLjaytLRUiESiR+aT7e3t5eXl5YYNBduSAQMG1Lz99tt3t2/ffu3zzz+/MXjw4Kq4uDi7gICAFxq/w/bw8KgDgLS0tC4PP0d6enoXALhz506b7/JFRa1JRkbA//6nXlr+cFl/+imwfHnT26YSndGtWzfs2rULPB4PH374IVJTU7mORFoglUr5xsbGzc4JCwQCFQBUV1c/tvsuXLjw6wcffFA0Y8aM8kWLFpX89NNPfyxfvvzO77//Llq3bp1dw+N8fX2lgwcPrkxNTbWcP3++Q3Z2tjA7O1u4YMGCnidOnLAAgLq6ujb3LBW1phkaAnv2qJeWP1zWmzcD//wnlbWOCgoKwrvvvguGYRAREYHCwkKuI5FmiEQilVwub7bbZDIZHwDMzMye+uRedHR0kZGREZOSkmLZ+Pj+/fv/CA4OLv/666+7eXt79/f29u6fmJho/cknn9z667XaPFdGRd0eDAyAnTuBsLBHy3rbNmDBAiprHbV27VoMHz4cRUVFmD59Os1XayE7O7v68vJyQ6lU+sj0RmFhobGlpaVCKBQ+9f+AAoGAsbW1rS8rK2tytZytra0yOTn52s2bN/MOHz78W0ZGxuVbt25d7NmzZz0AuLi4tPmOhVTU7YXPB779FnjttUfLeudO4PXXm25IQHRCw3y1ra0tUlNTsW7dOq4jkYd4eXnVqFQqpKenNzlpWFtbyysoKBANGDCg9lmet7a2lldUVGRkY2PT7N26nnvuOcWYMWOqhwwZIjUwMEBSUpIFALzyyisVz/J6jVFRtyceD9iyRb1a8eGyTkgApk8H6B2ZzunRowe+//578Hg8vP/++0in+5JrlenTp5fxeDzExMR0a3w8JibGtq6ujj916tSShmOXLl0S5OTkCBs/rrCwsNnVMFFRUT2VSiVv7Nix5U/KcOLECZO9e/d29fHxqQ4JCal+xk+FRQte2huPB8TEAAKBeo669q8f5rW1wIED6ps5xcc3vdc10XrBwcFYuXIl1q1bh/DwcOTm5sLOzu7JH0jana+vr3TGjBnFcXFxdsHBwb3HjBlT0bAy0cfHp3revHnsIpbg4GCXu3fvGjMMc77h2OrVq3ucP3/eNDAwsKpXr17y6upqfkpKisWZM2e6DBw4sGbFihXFjV9vyZIlPa5duyYcNGhQjYWFhTI7O9vkf//7n42dnZ189+7df2jic6J26Ag8HrBhg7qsP/20aVkfOgRMngz8+GPTe10TrRcdHY0TJ04gIyMDr732Gg4dOgQ+X0d/SbWxUWjV/T5sbNp0c5Vvv/32TycnJ3lsbKxtWlqahaWlpSIyMrL4008/vfuk5eMjRoyo+u2334QJCQk2FRUVhnw+n3F0dJQtX778ztq1a4tMTEyazG97e3vXnjhxwvzkyZPmdXV1/O7du8sjIyOLP/zww8KuXbtq5Fdm2ty2o338sfqfhuXmgHqRzEsvqa/D1o6NVUkr3b59Gx4eHigpKcH69es1ueeixje3zcvLu+Hu7v5A089LNCMvL6+ru7u7U3NjOvrjX4etXg188EHTOWupFDhxAhg79u+bOxGd4ODggLi4OADAmjVrkJGRwXEioo+oqLnw9tvAJ580XW4ulQKnTwOjRzd9t0203rhx4/DOO+9AqVQiPDwcJSUlT/4gQp4CFTVXFi9Wn2R8uKzPnQNGjFBvnkt0xscff4yAgADcvn0bM2fOhIouvSQaREXNpXnz1JfvNS7rujogN1c9Z11VxVk08nSMjIywZ88eWFlZISkpCZs2beI6EtEjVNRci4xUr1ZsXNYyGXDpEhAYCFS0+Vp50kF69eqFHTt2AABWrlyJzMxMbgMRvUFFrQ2mTQNiYx8t619/Vd/nurTNG0SQDjJhwgRERUVBoVAgLCwMpfS1IxpARa0t/vEP9cKXxmUtlwNXrwL+/sADuqpKV3zyySfw9fXFrVu3MGvWLDzhElhCnoiKWptMnKhe+NK4rOvrgRs3AF9foKioxQ8l2sPY2Bh79uyBhYUFEhMT8dlnn3Edieg4KmptM3aseuFL4+us6+uBP/8EfHwA2gpKJzg7O2P7X7vRL1u2DFlZWRwnIrqMilobjRqlXlreuKwVCnVJ+/ioS5toPbFYjMWLF6O+vh6hoaEoLy/nOhLRUVTU2mrYMODoUfVO5w2USvX0h4+PejqEaL2NGzfCy8sLN27cwJw5c2i+mjwTKmptNngwcOwY0KXRdmxKJXD/vrqsr13jLhtpFYFAgL1796JLly748ccfsWXLFq4jER2kPXfLIs3z9QXS0tSrFSsr1cdUKqCkRD32yy/ACy9wGpE8Xp8+fbBt2zaEhYVh6dKlCAgIgJeXF9exmujaFe4lJdrTBzY2UDx4gDyuc2gLeketC7y8gIwMwMLi72MMA5SVqS/du3SJu2ykVUJDQzF//nzI5XKEhoaisuGHrpbQppIG2p5HqVQiOjraztnZub9AIPCyt7cfOHfuXIfKyspWdR6Px/Nu7h8TExPPhx+7dOnSHi09fu3atd2ae/6npVVfHPIYAwao3z0HBgLl5eqiZhj1n4cMAdLTAXd3rlOSx4iJicHp06eRl5eHN954A/Hx8eDxNH43UwJgzpw5z+3YscNu9OjR5YsWLSpq2Djg4sWLJqdOnbrypHtSA4C3t3f166+/fr/xMSMjoxZPMkRHR//ZtWvXJvfR9vf3f6Ztvx5GRa1L+vUDMjPVc9elpX9vkFtRAQwdChw/Dnh7c5uRtEgoFCIhIQHe3t7Yu3cvRowYgXnz5nEdS++cO3dOGBsbaxccHFyenJzMnshxdnaWr1mz5rlvvvnGev78+U9cMuro6Ch78803W720NCwsrPyFF16QP2vux6GpD13j4gKcOQN07areQLdBVRUwfLh6jHBCoVLg1we/PvbKDhcXF3z11VcAgCVLliAvj6ZhNS0uLs6aYRhERUU1WSEWFRV1XygUquLj461b+1x1dXW8ioqKVvdkaWkpv76+2b1v24SKWhf17g1kZQF2dkDjX+Gqq4GgIPV8NulwX5z9Av2+6Ieem3ri7ZS3ce7uuWZLe9q0aZgzZw5kMhlCQ0NRRXdJ1Kjs7GxTPp+PYcOGNblXsImJCePq6iq9cOGCaUsf29jhw4etzMzMvCwtLT2tra3dZ86c+VxJSUmLcybe3t79bWxsPEUikbenp+eLCQkJ5m39XBrQ1IeucnRUl7W/v/raasVfU2M1NcCYMcBPP6nfYZMOI1PKYMAzwL3qe/gs8zN8df4rCA2FmNp/KsIHhMPfwR98nvq90WeffYbMzEzk5+djwYIF2LlzJ81Xa0hxcbGRpaWlQiQSPfJT0t7eXp6Tk2NaV1fHEwqFLf7qM2DAgJpJkyaV9e3bV1ZRUWFw5MgRi7i4OLvTp093ycrK+tXCwoK94bilpaUiPDz8QUBAQLW1tbXi119/FX711Vfdpk6d2rewsPDGW2+91eadJKiodZmDw99lffduk7JWvjwO0h/i1e+wSYeQKWTsnxWMAtXyalTLq7Hl3BbE5sXCgG+AKa5TEDEgAkMdhyIhIQGDBg3Crl27MGLECMyePZvD9PpDKpXyjY2Nm925QSAQqACgurqaLxQKW9x49sKFC782/u9FixaVrFixwn7Dhg09161bZ7dhw4bChrG1a9cWP/ThFQsXLnwwYMCA/mvWrHlu5syZZY2L/VlQUeu67t3VZR0QoF5a/tf82MwQKfZkTgI/y1C9CzrpEErm0f/3VYwKVXL19MZ3Od8h4VICGDCY+MJEvPn+m/jPsv9g8eLF8PPzg5ubW0dH1jsikUhVUlJi1NyYTCbjA4CZmdlTF2d0dHTRpk2beqSkpFg2Lurm2NvbK1977bX7mzZt6pGammo2efLkNl2PSUWtD+zsgLNngcGDUXO9GLH14ci02A8l/x6UjKId95InT4sBw5b2rou70MW4Cwy8DCDNlmLyq5ORcz4HpqatmkIlLbCzs6u/du2aSCqV8h6e/igsLDS2tLRUPG7aoyUCgYCxtbWtLysra1VvOjk5yQGguLi4zT1LJxP1hY0NkJmJ/9ktwFJswh94nutEpBUUKgUYc3VnlJWVoYb2ymwzLy+vGpVKhfT09CY/8Wpra3kFBQWiAQMGPNO1zbW1tbyioiIjGxubVl3W8fvvvwsAoHv37m2+DITeUesTKytgzbswXAzIZOaA3ARQGTVZ0EjaV4XsyVunmRiaQMko8ULXFzC4fjC+Sv8KPB4Pe3bvgZ2dXQek1G/Tp08v27x5c/eYmJhuY8aMqW44HhMTY1tXV8efOnUqe3Lv0qVLArlczvP09KxrOFZYWGhgb2//yBxWVFRUT6VSyRs7dmx5w7H6+npUVlYa2NjYNHn81atXjeLi4uwsLS0VQUFB1Q8/19OiotY3IhEgALBvF2B9FQYGwNHTXIfqHOLy4rD13FYoGMUjY6ZGpqhX1cO9mzsiPSIx2XUyUA14eHiAYRisXbsWQXTiVyN8fX2lM2bMKI6Li7MLDg7uPWbMmIqGlYk+Pj7V8+bNYxexBAcHu9y9e9eYYZjzDcdWr17d4/z586aBgYFVvXr1kldXV/NTUlIszpw502XgwIE1K1asYE8eVlRUGDz//PMDgoODy1988UWplZWV8rfffhPGx8d3lUqlBl9//fUfZmZmbZ58pKLWV3VWwF0f8AwBn55ch+kcjt843uS/zYzNIFfK4dPDB7M8ZmHiixPR1aQrAPW9KEImhaCoqAjDhw/H2rVruYjMsrGBQpvu92Fjg0d/2j2Fb7/99k8nJyd5bGysbVpamoWlpaUiMjKy+NNPP737pOXjI0aMqPrtt9+ECQkJNhUVFYZ8Pp9xdHSULV++/M7atWuLTExM2OI1NTVVjR07tiwnJ8c0JSXFsra2lm9lZaUYMmRI5fLlywtHjBhBS8gJ0To8QMAXILBXICI9IvGyy8uwFFo+8rB169YhNTUVtra22LVrF1pz74n2pG93qjM0NER0dHRRdHT0Y/evu3PnzsWHj02fPr18+vTp5a15HZFIxOzdu/fmM8ZsNSpqQjTkDe830Ne6L0b3Hg0zY7MWH5eeno73338fPB4P33//PXr06NGBKYkuoqImREMshZYQu4of+5ji4mKEh4dDpVJh1apVCA4O7qB0RJfR5XmEdBCVSoUZM2bg3r17GDp0KKKjo7mORHQEFTUhHWTDhg1ISUmBjY0Ndu/eDUND+oWWtA4VNSEdICMjA++++y4AYOfOnXBwcOA4EdElVNSEtLMHDx5g6tSpUCqVWLZsGcaOHct1JKJjqKgJaUcqlQozZ87EnTt3MHjwYHz00UdcRyI6iIqakHa0adMmHDp0CFZWVoiPj4eRUbM3dSPksaioCWknmZmZWLlyJQBgx44d6NWrF8eJiK6ioiakHZSWliIsLAwKhQJRUVGYMGEC15GIDqOiJkTDGIbBrFmzcOvWLfj6+uKTTz7hOhLRcVTUhGjYZ599hsTERFhYWGDPnj0wNjbmOhLRcXTFPSEalJWVhWXLlgEAtm/fDmdnZ44TtU7Xf3d1L5GWaE0f2IhsFA+WPdCrG0W1Bb2jJkRDysvLERoaivr6eixevBhi8ePv+6FNtKmkgbbnUSqViI6OtnN2du4vEAi87O3tB86dO9ehsrKy1Z1XVFRk8MYbbzj06tXLTSAQeFlZWbn7+fm5HDlypMkdt6ZMmeLE4/G8m/tn+/btVm35PBpo1ReHEF3FMAxmz56NGzduwNvbGxs3buQ6Uqc2Z86c53bs2GE3evTo8kWLFhU1bBxw8eJFk1OnTl150m1lr1y5YjxixIgXamtr+eHh4Q9cXFzqKioqDC5evGhy69atZq+x/OKLL64/fCwwMFAje6tRUROiAV988QX27dsHc3Nz7N27FwKBgOtInda5c+eEsbGxdsHBweXJycnXGo47OzvL16xZ89w333xjPX/+/NLHPUd4eLizUqnk5ebmXnZ0dGzVnodvvvnmY5+zLWjqg5A2ys7Oxr/+9S8AwLZt29C7d2+OE3VucXFx1gzDICoqqsmmAVFRUfeFQqEqPj7e+nEff/jwYbPs7GyzxYsXFzo6OtbLZDJeVVXVE7tSpVKhtLSUr1Q+st1im1FRE9IGlZWVCA0NhVwux4IFC/CPf/yD60idXnZ2timfz8ewYcOaTDuYmJgwrq6u0gsXLpi29LEAcPDgQQsAcHR0lI8cObKPqampl7m5uaeTk5Pbli1bWix5c3NzTxsbG0+RSOQ1ePDgvseOHXvs6zwNmvog5BkxDIO5c+fi2rVrcHd3x6ZNm7iORAAUFxcbWVpaKkQi0SObytrb28tzcnJM6+rqeEKhsNlNZ3///XchALz11luOTk5Oss8///y6XC7nbd682X7hwoXO9fX1vCVLlrA7mXfr1q1+9uzZRd7e3rVmZmaq3Nxc0TfffNMtJCTkhR9++OH3SZMmVbX1c6KiJuQZff3110hISICZmRkSEhIgFAq5jkQASKVSvrGxsaq5MYFAoAKA6upqvlAobHaOoqamxgAATE1Nlb/88stvDYU+bdq08t69ew/46KOPei5atKik4YTkli1b7jT++BkzZpRHRkaW+vr69luyZInjpEmT8tv6OdHUByHPIC8vD0uWLAEAfPXVV3BxceE4EWkgEolUcrm82W6TyWR8ADAzM2u2yAFAKBSqAEAsFpc2ftdta2urHDVqVPmDBw+M8vLyHvtTecCAAbLx48eX3bp1S3DhwoU2n1mmoibkKVVVVSE0NBQymQxz5szBtGnTuI5EGrGzs6svLy83lEqlvIfHCgsLjS0tLRUtTXsAQPfu3eUAYG9v/8jVHg3HSkpKnrhtvKOjowwAioqK2jxzQUVNyFNgGAYLFizAlStX4Obmhs8++4zrSOQhXl5eNSqVCunp6U1O5tXW1vIKCgpEAwYMqH3cx/v6+tYAwO3btx9Z+3/nzh1jAOjevbviSTmuXr0qBIAePXo88bFPQkVNyFP47rvvsGvXLpiYmCAhIQEmJiZcRyIPmT59ehmPx0NMTEy3xsdjYmJs6+rq+FOnTmVPBF66dEmQk5PTZBpj2rRp5aampqoff/zRpqKigu3ImzdvGh09etTS0dFR5ubmJgOAyspKfm1t7SPv3E+dOiU6fPiw1fPPP1/Xv39/WVs/JzqZSEgr5efnY/HixQCAL7/8Eq6urhwnIs3x9fWVzpgxozguLs4uODi495gxYyoaVib6+PhUz5s3j12YEhwc7HL37l1jhmHONxyztbVVvv/++3++8847joMGDXKNiIh4IJfLeTt27LCtr6/nbdq06VbDY/Pz8wUTJ07sGxwcXN63b1+ZqampMi8vz+SHH37oamBgwGzZsuWmJj4nKmpCWqGmpgahoaGQSqWIjIzEa6+9xnUkjbIR2Si06X4fNiKbNk0XfPvtt386OTnJY2NjbdPS0iwsLS0VkZGRxZ9++undJy0fB4C33377ga2trWLTpk32GzZs6MHn8+Hh4VG9Y8eOP4KDg9nrsx0cHOqHDBlS9csvv3Q5cOCATV1dHc/W1rZ+/Pjxpe+++26hp6dnXVs+jwY8hmlxTh0AHjvYFn5+fjh79iwyMzPh5+fXXi/T6cTGAgsXAjV/fSsZGgL1rVoASx4nMjISsbGx6NevH86ePQtTU42tZWjJI79Ot1VeXt4Nd3f3B5p+XqIZeXl5Xd3d3Z2aG6M5akKeIDY2FrGxsRCJREhISOiIkiakCSpqQh7j8uXLePPNNwEAmzdvRv/+/TlORDojKmpCWlBbW4uwsDDU1tZi+vTpmDVrFteRSCdFRU1IC5YsWYL8/Hy4uLhgy5Yt4PE0Pm1MSKtQURPSjN27d2Pbtm0QCARISEhAly5duI5EOjEqakIecuXKFcybNw+AeqNad3d3jhORzo6KmpBG6urqEBoaiurqaoSFheGNN97gOpImqVQqFc3faKG/vi4t3iiKipqQRqKiopCXl4c+ffrg66+/1qt5aR6PVyiVSulerFpIKpUKeTxeYUvjVNSE/CUhIQFbt26FsbExEhISYG5uznUkjVIoFNE3btwwrqmpEdE7a+2gUql4NTU1ohs3bhgrFIrolh6nNUtGCeHS1atXMWfOHADApk2b4OnpyXEizfPy8krOzs5edO3atfcYhrEHvVHTBioej1eoUCiivby8klt6EBU16fRkMhnCwsJQVVWFV199lV3goo/+KoMWC4FoJ/qJSjq9t99+G9nZ2XB2dsa2bdv0al6a6AcqatKp/fjjj9i8eTOMjIyQkJAACwsLriMR8ggqatJpXb9+HbNnzwYAbNy4EYMGDeI4ESHNo6ImnZJcLkdYWBgqKiowceJEvPXWW1xHIqRFVNSkU1qxYgWysrLQq1cvfPfddzQvTbQaFTXpdBITExETEwNDQ0Ps3bsX1tbWXEci5LGoqEmncvPmTURGRgIA1q9fD39/f24DEdIKVNSk06ivr8fUqVNRVlaG8ePHY+nSpVxHIqRVqKhJp7F69WpkZmbCwcEBsbGx4PPp25/oBvpOJZ1CUlISNm7cCAMDA+zZswc2NjZcRyKk1aioid67ffs2Zs6cCQD46KOPMGTIEI4TEfJ0qKiJXlMoFAgPD0dJSQnGjBmDZcuWcR2JkKdGRU302tq1a5GRkYEePXogLi6O5qWJTqLvWqK3kpOTsX79evD5fMTHx8PW1pbrSIQ8Eypqopfu3r2LGTNmAACio6Px0ksvcZyIkGdHRU30jlKpREREBO7fv4+goCCsXLmS60iEtAkVNdE7H3zwAdLS0tCtWzfs2rULBgYGXEcipE2oqIleSU1NxYcffggej4ddu3ahW7duXEcipM04L+rNmzfj2LFjUCgUXEchOq6wsBARERFgGAbvvvsugoKCuI5EiEZwVtQNO2l8//33CAoKQrdu3RAZGYkDBw5AKpVyFYvoKKVSienTp6OoqAjDhw/H2rVruY5EiMZwVtRHjhzBmTNnsGLFCrzwwgsoLS1FbGwsJk2ahK5du2LKlCnYtWsXysvLuYpIdMi6deuQmpoKW1tbmpcmeofHMMzjxh87qEkFBQWQSCSQSCQ4d+4ce9zQ0BAjR46EWCzGxIkT0b17946KpJNiY4GFC4GaGvV/GxoC9fXcZmpv6enpGDlyJBiGwZEjRxAcHMx1JE2gnQwIS2uKurE///wT+/fvh0QiQXp6OlQqFQCAx+PB398fYrEYYrEYffr04SKeVutsRV1cXAwPDw/cu3cPq1atwscff8x1JE2hoiYsrSzqxh48eICDBw9CIpEgJSUFMpmMHXNzc2NL28PDg7ZTQucqapVKhbFjxyIlJQVDhw7FsWPHYGhoyHUsTaFvZsLS+qJurLq6GkeOHIFEIsFPP/2EyspKdszJyQmTJk2CWCzGkCFDOu0cZWcq6vXr12PVqlWwsbFBbm4uHBwcuI6kSVTUhKVTRd2YXC7H8ePHIZFIcODAARQWFrJjtra2mDBhAsRiMYKCgiAUCjlM2rE6S1FnZGRg+PDhUCqVSEpKwrhx47iOpGlU1ISls0XdmEqlQmZmJnsy8tq1a+yYmZkZxo0bB7FYjHHjxsHc3JzDpO2vMxR1SUkJPDw8cPv2bbzzzjv497//zXWk9kBFTVh6UdSNMQyD/Px8trRzc3PZMWNjYwQFBbFXkNjZ2XEXtJ3oe1GrVCpMmDABSUlJCAgIQHp6OoyMjLiO1R6oqAlL74r6YdevX2evIMnIyEDD58vj8TBkyBD2ZKSzszPHSTVD34v6P//5D9555x1YWVkhNzcXvXr14jpSe6GiJiy9L+rGiouLkZiYCIlEgp9//hlyuZwdc3d3x+TJkyEWi+Hm5qazV5Doc1FnZmZi6NChUCgUOHDgACZMmMB1pPakm9+ApF10qqJurLKyEocPH4ZEIkFSUhKqq6vZsd69e7PvtP39/XVqVxB9LerS0lJ4enri1q1biIqKwqZNm7iO1N6oqAmr0xZ1YzKZDKmpqdi3bx8SExNx//59dsze3h4TJ06EWCzGiBEjYGxszGHS5v35J/DLL+o/p6cDcXF/FzWfD+zerf6zsTEwaRKga78sMAyDSZMmITExEb6+vjh58qRWfh00TMe+SqQ9UVE/RKlU4tSpU+zJyJs3b7JjFhYWGD9+PMRiMcaMGQMzMzMOk/5t3jxgxw5AIFD/d00N8NdiTgiFQMO5tupq4OJFoH9/TmI+s//+97+IioqChYUFcnJy9OZ8whNQURMWFfVjMAyD3NxctrTz8/PZMYFAgODgYIjFYrzyyivo2rUrZzmTk4F//AOoqnr847p2BYqLdesddVZWFoYMGYL6+nrs27cPYrGY60gdRYe+SqS9UVE/hatXr7Klffr0afY4n8/HSy+9BLFYjEmTJnX4lQj19YC1tfodc0sMDYFFi4CYmI7L1Vbl5eXw9PTEjRs3sHjxYvzf//0f15E6EhU1YVFRP6N79+7hwIEDkEgkj2x84O3tzZ6MdHV17ZArSGbOBHbuBFr6cpqaAidPAp6e7R5FIxiGwauvvop9+/bB29sbp06dgqBhbqdzoKImLCpqDSgvL0dSUhIkEgkOHz6M2tpadszFxYUtbR8fn3a7guT4cWDixJanP7p3B+7c0Z1pjy+++AKLFi1Cly5dkJOTg969e3MdqaPpyFeKdAQqag2TSqU4evQoJBIJEhMTUVpayo717NkTEydOxOTJk/HSSy9pdEWdUgnY2AAVFY+OGRkB//oXsH69xl6uXWVnZyMgIAByuRx79+5FaGgo15G4QEVNWFTU7UihUODkyZPsvPbt27fZMSsrK7zyyisQi8UIDg6GiYlJm19v3jxg27a/r/hoYGICZGUB/fq1+SXaXWVlJby8vHDt2jXMnz8fX375JdeRuEJFTVhU1B2EYRicP3+eLe2CggJ2TCQSYcyYMRCLxXj55ZdhZWX1TK/xyy9ASMijJxUdHYEbN9oQvoMwDIPw8HDs3bsX7u7uyMzM7FR3PnwIFTVhUVFz5Ndff2VLOysriz1uaGiI4cOHszeO6tmzZ6ufU6UC7OyAkpK/jxkbA6tXA7qw1+tXX32F+fPnw8zMDOfPn4eLiwvXkbhERU1YVNRa4Pbt2022HlMqleyYn58fezKyNcW1ZAnwxRfqOWsAEImACxcAbd+1LC8vD35+fpDJZNi1axemTZvGdSSuUVETFhW1likpKcFPP/0EiUSC5ORk1NXVsWP9+vVjS9vLy6vZy/7OnweGDft7CXnfvsCVKx2V/tlUVVVh0KBBuHLlCubMmYNvvvmG60jagIqasKiotVhNTQ2Sk5PZrcfKy8vZsV69erFbjwUGBrJ7BTKM+lK8oiL18vH33weWL+cmf2swDIMZM2Zg165dcHNzw5kzZzRyYlUPUFETFhW1jqivr0daWhokEgn279+Pe/fusWM2Njbs1mOjR4/Ge+8JsWmTejXir7+qTyZqq2+//RZz5syBiYkJzp07B1dXV64jaQsqasKiotZBKpUKZ8+eZU9G/v777+yYqakpBg8ei6NHxXB1HY/Lly04TPp4+fn58PX1hVQqRWxsLF577TWuI2kTKmrCoqLWcQzD4PLly2xpZ2dns2MGBkYYNWokewWJvb09h0mbqqmpgY+PDwoKChAZGYnt27dzHUnbUFETFhW1nrl58yZ7BcnJkyeh+mv1C4/HQ0BAAHsykusl2bNmzcKOHTvg6uqKrKwsmJqacppHC1FRExYVtR67f/8+Dh48CIlEgqNHj0Imk7FjAwcOZEt74MCBHbr1WFxcHGbOnAmRSISzZ8/Czc2tw15bh1BRExYVdSdRVVWFI0eOsFuPVVZWsmPOzs5saQcEBMDAwKDdchQUFGDQoEGora3Ftm3bMHv27HZ7LR1HRU1YVNSdkEwmw/HjxyGRSHDgwAEUFRWxY3Z2duzWYyNHjtTorUVra2vh5+eH/Px8REREYOfOnTq7iXAHoL8YwqKi7uSUSiVOnz7Nnoy8fv06O9alSxd267GxY8eiS5cubXqtuXPnYtu2bXBxccG5c+fa/Hx6joqasKioCYthGFy4cIEt7QsXLrBjAoEAo0aNglgsxoQJE2Bra/tUz717925ERERAIBDgzJkzcHd313R8fUNFTVhU1KRFf/zxB1vav/zyCxq+V/h8PgIDA9l5bccnrKi5cuUKvL29UV1dja1bt2LevHkdEV/XUVETFhU1aZXCwkIkJiZCIpEgNTUV9fX17Jinpydb2v37928y71xXVwd/f3/k5eUhLCwM8fHxNC/dOvSXRFhU1OSpVVRU4NChQ5BIJDh06BBqGu4ABaBPnz5safv5+WHhwoXYunUr+vTpg/Pnz8Pc3JzD5DqFipqwqKhJm9TV1eHnn39mtx578OABO2ZnZ4fi4mIYGxsjMzMTnrqys652oKImLCpqojEKhQKnTp1i57Vv3boFANi8eTMWLlzIcTqdQ0VNWFTUpF0wDIOcnBxkZWXhjTfeoHnpp0d/YYRFRU2IdqKiJiw+1wEIIYQ8HhU1IYRoOSpqQgjRclTUhBCi5aioCSFEy1FRE0KIljN8wjhdIkQIIRyjd9SEEKLlqKgJIUTLUVETQoiWo6ImhBAtR0VNCCFajoqaEEK03P8Dc7LhuLT9hKcAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "vectors = unit_vectors * pentagon.distance_to_surface(random_angles)[:, np.newaxis]\n", "fig, ax = plot_distances(pentagon, vectors, colors)\n", "ax.add_patch(\n", " patches.Polygon(pentagon.vertices[:, :2], fill=False, linewidth=2, edgecolor=\"k\")\n", ")" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "vectors = unit_vectors * ellipse.distance_to_surface(random_angles)[:, np.newaxis]\n", "fig, ax = plot_distances(ellipse, vectors, colors)\n", "ax.add_patch(\n", " patches.Ellipse(\n", " (0, 0), 2 * ellipse.a, 2 * ellipse.b, fill=False, linewidth=2, edgecolor=\"k\"\n", " )\n", ")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }