Skip to content

Instantly share code, notes, and snippets.

@smidm
Last active March 26, 2023 04:27
Show Gist options
  • Save smidm/b398312a13f60c24449a2c7533877dc0 to your computer and use it in GitHub Desktop.
Save smidm/b398312a13f60c24449a2c7533877dc0 to your computer and use it in GitHub Desktop.
Compute bounding box for an ellipse.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pylab as plt\n",
"from matplotlib.patches import Ellipse\n",
"from ipywidgets import interact, interactive, fixed, interact_manual\n",
"import ipywidgets as widgets"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"def get_ellipse_bb(x, y, major, minor, angle_deg):\n",
" \"\"\"\n",
" Compute tight ellipse bounding box.\n",
" \n",
" see https://stackoverflow.com/questions/87734/how-do-you-calculate-the-axis-aligned-bounding-box-of-an-ellipse#88020\n",
" \"\"\"\n",
" t = np.arctan(-minor / 2 * np.tan(np.radians(angle_deg)) / (major / 2))\n",
" [min_x, max_x] = sorted([x + major / 2 * np.cos(t) * np.cos(np.radians(angle_deg)) -\n",
" minor / 2 * np.sin(t) * np.sin(np.radians(angle_deg)) for t in (t + np.pi, t)])\n",
" t = np.arctan(minor / 2 * 1. / np.tan(np.radians(angle_deg)) / (major / 2))\n",
" [min_y, max_y] = sorted([y + minor / 2 * np.sin(t) * np.cos(np.radians(angle_deg)) +\n",
" major / 2 * np.cos(t) * np.sin(np.radians(angle_deg)) for t in (t + np.pi, t)])\n",
" return min_x, min_y, max_x, max_y"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"def plot_ellipse(x=50, y=50, major=30, minor=10, angle_deg=45):\n",
" plt.figure(2)\n",
" plt.clf()\n",
" ax = plt.gca()\n",
" ax.add_patch(Ellipse((x, y), major, minor, -angle_deg, \n",
" edgecolor='r',\n",
" facecolor='none'))\n",
" min_x, min_y, max_x, max_y = get_ellipse_bb(x, y, major, minor, angle_deg)\n",
" assert min_x <= max_x\n",
" assert min_y <= max_y\n",
" plt.vlines([max_x, min_x], 0, 100)\n",
" plt.hlines([max_y, min_y], 0, 100)\n",
" plt.axis('square')\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_ellipse()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "6728e686f5bd4262adfb00f3c1dc0f55",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(IntSlider(value=30, description='major', max=40), IntSlider(value=10, description='minor…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"interactive_plot = interactive(plot_ellipse, \n",
" x=fixed(50), \n",
" y=fixed(50),\n",
" major=(0, 40),\n",
" minor=(0, 40),\n",
" angle_deg=(-180, 180),\n",
" )\n",
"output = interactive_plot.children[-1]\n",
"output.layout.height = '350px'\n",
"interactive_plot "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "python (ferda3)",
"language": "python",
"name": "ferda3"
},
"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.6.12"
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": false,
"skip_h1_title": false,
"toc_cell": false,
"toc_position": {},
"toc_section_display": "block",
"toc_window_display": false
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"state": {
"01376b89433f45a983860bc1ca3562a4": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"0245599a6d1342b4bd38638b58f11809": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"028b3961504e49169a4067b92f8ec942": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"039c8d946c8b40df8bb5747772873f18": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"05667087659a4f43a0f639e10cb6d9b9": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"05cab14f0f5f407ebc5079eedab5f46e": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"height": "350px"
}
},
"06df24e690f945ba84a610fbc0002d8e": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"08a9242559e241d1a4c1e8a2e546731e": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"0c4160622c1b4582a528eaf813bc0725": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"height": "350px"
}
},
"105e563f9ba344f2ab2a3d95bb0d4bee": {
"model_module": "@jupyter-widgets/output",
"model_module_version": "1.0.0",
"model_name": "OutputModel",
"state": {
"layout": "IPY_MODEL_985d1977d51c446089248ca9d6dac283",
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
}
},
"164a49f24af446969aa46bd5bea707fc": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"1d0a3c502ec2421cbf7f4e97f46c6e5e": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"height": "350px"
}
},
"1d95891f34e94781b49c425b5a1b0f46": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"1e87edbd9ade46f3a62efe73e635584e": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "angle_deg",
"layout": "IPY_MODEL_405f895d616140698095274f8f83852a",
"max": 180,
"min": -180,
"style": "IPY_MODEL_028b3961504e49169a4067b92f8ec942",
"value": 45
}
},
"1fb17a4e51b34b8e90d81ba16adb8604": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"230e8f403f8b417a8ba24640b828200b": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"height": "350px"
}
},
"245dc7d6eb744fe7b06125f49bdb2571": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"28baa47c06c64c2382bbac2795b04814": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"370c8e4f02d743cbb9a1f4479602b9cc": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"37c652a71f4e445d822e11f961c7e535": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"39e64e6cff98464e93ab39b6ffb7b25d": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "angle_deg",
"layout": "IPY_MODEL_b2615161b0ea41a39fb33f8498e37109",
"max": 180,
"min": -180,
"style": "IPY_MODEL_e8629c9e8c5a49c8a78ea410906e2338",
"value": 45
}
},
"3a1d96fa2bb54dd08a86ca2f0d70023f": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"3b82a8d545194c15bea7e44c9604ca94": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"3d6e421349bf4e8eb042a5b51e5c489a": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"3df2fe7e4ebf43e6915f25f6e3afe1bf": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"405f895d616140698095274f8f83852a": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"426369c83f53414bb8de63b9ceeb4dfa": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"42d67a4f7ebe4298847d93702abc3316": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"445f8a04419041658632467a384f5f52": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"4cc0bd74a9b3425ab5a1c45304c6372e": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"507a4c1b8a4b4899aac9e9bebe164148": {
"model_module": "@jupyter-widgets/output",
"model_module_version": "1.0.0",
"model_name": "OutputModel",
"state": {
"layout": "IPY_MODEL_230e8f403f8b417a8ba24640b828200b",
"outputs": [
{
"ename": "AssertionError",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m~/local/conda/envs/ferda3/lib/python3.6/site-packages/ipywidgets/widgets/interaction.py\u001b[0m in \u001b[0;36mupdate\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 254\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwidget\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_interact_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 255\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mwidget\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_kwarg\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 256\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 257\u001b[0m \u001b[0mshow_inline_matplotlib_plots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mauto_display\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-6-0efdde3ad5a0>\u001b[0m in \u001b[0;36mplot_ellipse\u001b[0;34m(x, y, major, minor, angle_deg)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mmin_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmin_y\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmax_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmax_y\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_ellipse_bb\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmajor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mminor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mangle_deg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mmin_x\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mmax_x\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0;32massert\u001b[0m \u001b[0mmin_y\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mmax_y\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvlines\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmax_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmin_x\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhlines\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmax_y\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmin_y\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mAssertionError\u001b[0m: "
]
}
]
}
},
"52cb287c233248618a290dad049d47aa": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "angle_deg",
"layout": "IPY_MODEL_05667087659a4f43a0f639e10cb6d9b9",
"max": 180,
"min": -180,
"style": "IPY_MODEL_870e59a9c52f475eb12733fadc048c21",
"value": 180
}
},
"57b8d8578d524cf58bb20d0cdf1c6060": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "major",
"layout": "IPY_MODEL_bec973d1d6354f3885cf098216f2427f",
"max": 40,
"style": "IPY_MODEL_a18c5e26cfb54cf8ae2acbafdab63ffc",
"value": 30
}
},
"5f300660c6ee442084d84e882b8e6a51": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"60cc8d4b00684da484cb309d0e8b7e69": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "minor",
"layout": "IPY_MODEL_b28e5020f938460e84990086bfe868cf",
"max": 40,
"style": "IPY_MODEL_eeafe6c59cb74837b9eb4a4eb479580c",
"value": 10
}
},
"6728e686f5bd4262adfb00f3c1dc0f55": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "VBoxModel",
"state": {
"_dom_classes": [
"widget-interact"
],
"children": [
"IPY_MODEL_a03c2ad09e804f06a9572ecdd3ab4239",
"IPY_MODEL_ccaed4e91d464a06ab2e47dbf3365685",
"IPY_MODEL_39e64e6cff98464e93ab39b6ffb7b25d",
"IPY_MODEL_77062796858f457e9d81e649ac836b87"
],
"layout": "IPY_MODEL_fc75908ca075400f99724277a8785705"
}
},
"6a232dda83124c9bac91f63e47e11ff7": {
"model_module": "@jupyter-widgets/output",
"model_module_version": "1.0.0",
"model_name": "OutputModel",
"state": {
"layout": "IPY_MODEL_a14d0dd9266948dc849a87109dccab4b",
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
}
},
"6b4276c09e7545f78c832f9d733ba42f": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"70367a04f6294776b8bd66306575f072": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "major",
"layout": "IPY_MODEL_3b82a8d545194c15bea7e44c9604ca94",
"max": 40,
"style": "IPY_MODEL_0245599a6d1342b4bd38638b58f11809",
"value": 30
}
},
"727d639324124258b2e55f1defa1131d": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "minor",
"layout": "IPY_MODEL_426369c83f53414bb8de63b9ceeb4dfa",
"max": 40,
"style": "IPY_MODEL_5f300660c6ee442084d84e882b8e6a51",
"value": 10
}
},
"77062796858f457e9d81e649ac836b87": {
"model_module": "@jupyter-widgets/output",
"model_module_version": "1.0.0",
"model_name": "OutputModel",
"state": {
"layout": "IPY_MODEL_1d0a3c502ec2421cbf7f4e97f46c6e5e",
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
}
},
"77bc5fae895b45429c5c7c988d448086": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "VBoxModel",
"state": {
"_dom_classes": [
"widget-interact"
],
"children": [
"IPY_MODEL_d87fb90f0ba4442d867a63103c2cf7b6",
"IPY_MODEL_b66b5aa72b8a443388f481a6f83f858d",
"IPY_MODEL_52cb287c233248618a290dad049d47aa",
"IPY_MODEL_fa7fd7b9a97b4c8b80faebc8d5c4d019"
],
"layout": "IPY_MODEL_efc94701c386469399fc5b14e6253833"
}
},
"782a86cd9b1d4a0da1136b4053d9372a": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "minor",
"layout": "IPY_MODEL_3a1d96fa2bb54dd08a86ca2f0d70023f",
"max": 40,
"style": "IPY_MODEL_245dc7d6eb744fe7b06125f49bdb2571",
"value": 10
}
},
"78bb527c333e4280bbcc13e06d96214f": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "angle_deg",
"layout": "IPY_MODEL_819c7192e0da4380ba7be5ad4c016029",
"max": 180,
"min": -180,
"style": "IPY_MODEL_a4a5f822fc7e4557bc79c1f92ae96aa2",
"value": 76
}
},
"7bafa886f3c94b37968e39c51b36bb6c": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"815441ebf45e485abe67111349e0bce8": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "major",
"layout": "IPY_MODEL_37c652a71f4e445d822e11f961c7e535",
"max": 40,
"style": "IPY_MODEL_164a49f24af446969aa46bd5bea707fc",
"value": 30
}
},
"819c7192e0da4380ba7be5ad4c016029": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"84f3abdd5ef24135a20efb72d8ebb672": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"height": "350px"
}
},
"852c519f4a8e497981b533f025c7b402": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "angle_deg",
"layout": "IPY_MODEL_42d67a4f7ebe4298847d93702abc3316",
"max": 180,
"min": -180,
"style": "IPY_MODEL_06df24e690f945ba84a610fbc0002d8e",
"value": -34
}
},
"870e59a9c52f475eb12733fadc048c21": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"8b9a4f29aba14e19be608511079dcc96": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "VBoxModel",
"state": {
"_dom_classes": [
"widget-interact"
],
"children": [
"IPY_MODEL_a895d7f7d18d4d8b8098fc76f4db07c3",
"IPY_MODEL_60cc8d4b00684da484cb309d0e8b7e69",
"IPY_MODEL_78bb527c333e4280bbcc13e06d96214f",
"IPY_MODEL_948908bad8d543dc91b704ced7d56adc"
],
"layout": "IPY_MODEL_445f8a04419041658632467a384f5f52"
}
},
"948908bad8d543dc91b704ced7d56adc": {
"model_module": "@jupyter-widgets/output",
"model_module_version": "1.0.0",
"model_name": "OutputModel",
"state": {
"layout": "IPY_MODEL_05cab14f0f5f407ebc5079eedab5f46e",
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD4CAYAAAAXUaZHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAS/0lEQVR4nO3deaxedZ3H8fe397ZgW4lluNTawhSwsrpfHdAJYVjrEkqC2CJLUUwxdAY1Rq2CEhcMGoNLRKVhsY7KTgZEwmIBiQnBuRUclgplREtLpVeJskNLv/PHOYyXckvbZ+39Pe9X0pznnOec8/v+0qef5/T3nCUyE0lSWcZ1uwBJUusZ7pJUIMNdkgpkuEtSgQx3SSpQf7cLANhpp51y5syZ3S5DksaUZcuW/SUzB0Z7b5sI95kzZzI0NNTtMiRpTImIP23qPYdlJKlAhrskFchwl6QCGe6SVCDDXZIKtNlwj4gLI2JtRNwzYtmOEXFTRKyop1NGvPe5iHgwIu6PiCPaVbgkadO25Mj9R8DsjZYtApZm5ixgaT1PROwDzAP2rbf5fkT0taxaSdIW2Wy4Z+ZtwGMbLZ4DLKlfLwGOGrH8ksx8LjMfAh4E3tmaUiVJW6rRMfepmbkGoJ7uXC+fDjw8Yr1V9bKXiYgFETEUEUPDw8MNliG93Nzzbmfuebd3u4yX2BZrUtla/YNqjLJs1KeBZObizBzMzMGBgVGvnpUkNajRcH80IqYB1NO19fJVwC4j1psBPNJ4eZKkRjQa7tcA8+vX84GrRyyfFxHbRcRuwCzgN82VKEnaWpu9cVhEXAwcBOwUEauAM4Gzgcsi4mRgJXAMQGbeGxGXAfcB64GFmflCm2qXJG3CZsM9M4/dxFuHbGL9s4CzmilKktQcr1CVpAIZ7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLcJalAhrskFchwl6QCGe6SVCDDXZIKZLhLUoEMd0kqkOEuSQUy3CWpQIa7JBXIcJekAhnuklQgw12SCmS4S1KBDHdJKpDhLkkFMtwlqUCGuyQVyHCXpAIZ7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLcJalATYV7RHwyIu6NiHsi4uKI2D4idoyImyJiRT2d0qpiJUlbpuFwj4jpwGnAYGbuB/QB84BFwNLMnAUsreclSR3U7LBMP/CqiOgHJgKPAHOAJfX7S4CjmmxDkrSVGg73zFwNfBNYCawB/p6ZNwJTM3NNvc4aYOfRto+IBRExFBFDw8PDjZYhSRpFM8MyU6iO0ncDXgdMiojjt3T7zFycmYOZOTgwMNBoGZKkUTQzLHMo8FBmDmfmOuAq4F3AoxExDaCerm2+TEnS1mgm3FcC+0fExIgI4BBgOXANML9eZz5wdXMlSpK2Vn+jG2bmHRFxBfBbYD1wJ7AYmAxcFhEnU30BHNOKQiVJW67hcAfIzDOBMzda/BzVUbwkqUu8QlWSCmS4S1KBDHdJKpDhLkkFMtwlqUCGuyQVyHCXpAIZ7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLcJalAhrskFchwl6QCGe6SVCDDXZIKZLhLUoEMd0kqkOEuSQUy3CWpQIa7JBXIcJekAvV3u4BWmHve7d0uQduQ+9Y8DrzC5+KZp+HZ54CEya+G8eO7X5N61qWnHNCW/RYR7tJmZcLDD8Oqh6GvH161PSTw5JPQ1wc77AAzZlRTqQBFhHu7vvk0Nr14dPz/n4u774b582FgAL73PZg16x8rZ8If/gA33ADfOAVe/3r44hfhwAPbW5PUZo65q2zDwzB7NixcCNdf/9JgB4iAPfaAU0+FFSvgQx+CD38Y5s6Fxx/vTs1SCxjuKlcmfOQjcMIJcPLJVZC/kvHjq/XvvRemTIHBQfjd7zpTq9RihrvKtWQJrFkDX/7y1m23/fbwwx/CmWfCoYfCBRe0pz6pjYoYc5dGtXhxFewTJjS2/XHHwdveBkcdBatXV2Px0hjR1JF7RLwmIq6IiN9HxPKIOCAidoyImyJiRT2d0qpipS327LPwwANw2GHN7WfvveG22+Cyy+ALX2hNbVIHNDss8x3g+szcC3gzsBxYBCzNzFnA0npe6qzhYTj66Nacwz51KtxyC1x1FZx9dvP7kzqg4XCPiB2AA4ELADLz+cz8GzAHWFKvtgQ4qrkSpQY89hjMmdO6/Q0MwI03VkM9ixe3br9SmzRz5L47MAxcFBF3RsT5ETEJmJqZawDq6c6jbRwRCyJiKCKGhoeHmyhDGsXTT8N++7V2n9OnVwF/xhlwu1eaatvWTLj3A28DfpCZbwWeYiuGYDJzcWYOZubgwMBAE2VIG9mwAdavq644bbXXvx7OP786D96DEm3Dmgn3VcCqzLyjnr+CKuwfjYhpAPV0bXMlSlvp+edh/AQY16YzfY88srrY6bjj4IUX2tOG1KSGP/2Z+Wfg4YjYs150CHAfcA0wv142H7i6qQqlrbVuHUxo883AvvrVqp2tPYde6pBmz3P/D+CnETEB+APwYaovjMsi4mRgJXBMk21IWyeiuilYO/X3w8UXV+fBz54NB3jPGG1bmgr3zLwLGBzlrUOa2a/UlHHjYEMHhkte+1o45xz42Mdg2bIq8KVthLcfUHn6+uCFDZ1pa+7c6jz47363M+1JW8hwV3nGjevcD50RcO658LWvVfeLl7YRhrvK09dXhfuGDh29z5oFp51W/ZG2EYa7yjNuXHXbgU4eSX/2s3DPPbB0aefalF6B4a4yTZoE993Xufa22666a6SnRmobYbirTJMmVg/d6KRjj4VHHoFbb+1su9IoDHeVaWKHj9yhOhXy9NPhS1/qbLvSKAx3lWliF47cobolwcqV1T3gpS4y3FWmyZOrcH/yyc62O348fP7z8JWvdLZdaSOGu8rU11c94Lob498nnAB33w3339/5tqWa4a5yHXFEdf/1TpswAU46yYd6qKsMd5XriCPghhu60/aCBfDjH8Nzz3WnffU8w13lestb4G9/gz/+sfNt77579SSoX/yi821LGO4q2bhxcPjh3QvYE0+sjt6lLjDcVbYPfhB+9rPutH300XDLLdX/HqQOM9xVttmzYcUKePDBzre9ww7VQzxuvrnzbavnGe4q2/jx1fNOlyzpTvvd/FFXPc1wV/k++lG48EJYv77zbR9+uOGurjDcVb799oOZM+Haazvf9j77VF8qzzzT+bbV0wx39YZTT4Vvfavz7UZUQzOPPdb5ttXTDHf1hrlzYfVq+NWvOt/2QQfB43/vfLvqaYa7esOLt+PtxsM09t0Xnnq68+2qpxnu6h3HHw8PPQS//nVn291rr2rMPbOz7aqnGe7qHS/ejrfTD9OYOLG6mdizz3a2XfU0w1295cQTq4uaOv0wjUmT4KmnOtumeprhrt4yYQJ84xuwcCGsW9e5didO9HRIdZThrt5zzDEwfTp8+9uda7O/vzsXUalnGe7qPRFw7rnw9a/Dn/7UmTbHjYMNGzrTloThrl61xx7wiU/Aaad1pr2+Pnjhhc60JWG4q5d9+tPwwANw+eXtb8sjd3WY4a7etd121cM0Tj21OoOmnSIMd3VU0+EeEX0RcWdEXFvP7xgRN0XEino6pfkypTZ5xzuqq1aPPhqebuNVpOvXV+fZSx3SiiP3jwPLR8wvApZm5ixgaT0vbbs+9jF405uqI/h2XUX6/PPVaZhShzQV7hExA3gfcP6IxXOAF5+MsAQ4qpk2pLaLgPPOg6EhOP/8za/fiGeege23b8++pVH0N7n9t4HPAK8esWxqZq4ByMw1EbHzaBtGxAJgAcCuu+7aZBlSkyZNgiuvhAMPrM6Bf+97W7v/p5+GGdNbu0/pFTR85B4R7wfWZuayRrbPzMWZOZiZgwMDA42WIbXOnnvC1VfDSSe19vYEq1dX95WZPLl1+5Q2o5lhmXcDR0bEH4FLgIMj4ifAoxExDaCerm26SqlT9t8fLrkEPvABuPXW1uzz8sthp50gPDlNndPwpy0zP5eZMzJzJjAPuDkzjweuAebXq80Hrm66SqmTDj4YLr20uk3Bz3/e/P4uuQR2HnV0UmqbdhxKnA0cFhErgMPqeWls+bd/q4J94UJYtKjx+8L88pfVsMxrXtPS8qTNaUm4Z+atmfn++vVfM/OQzJxVT314pMam/feHZcvgrruqo/nVq7du+7/+tRq/v+ii6owcqYMcBJReycAAXHcdHH44vP3tcM45W3Zf9ieeqO4dP28eHHpo++uUNmK4S5szbhyccQbceCPcfnt107Gvf706Mh/NDTfAG98IU6fCWWd1tlapFrkNPNdxcHAwh4aGGt5+7nm3t7AajXX3rXkcgH2m7dCeBp56ClaurMJ9/Hh49eTqAqXn11VH7Bs2wBveAFP+ceeNttekMevSUw5oeNuIWJaZg6O91+xFTFLvmTQJ9t67ev3M0/DEk/DcczBxEsyYUb3vGLu6rIhwb+abT+V58X9y29LnYlusSWVzzF2SCmS4S1KBDHdJKpDhLkkFMtwlqUCGuyQVyHCXpAIZ7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLcJalAhrskFchwl6QCGe6SVCDDXZIKZLhLUoEMd0kqkOEuSQUy3CWpQIa7JBXIcJekAhnuklQgw12SCtRwuEfELhFxS0Qsj4h7I+Lj9fIdI+KmiFhRT6e0rlxJ0pZo5sh9PfCpzNwb2B9YGBH7AIuApZk5C1haz0uSOqjhcM/MNZn52/r1E8ByYDowB1hSr7YEOKrJGiVJW6klY+4RMRN4K3AHMDUz10D1BQDsvIltFkTEUEQMDQ8Pt6IMSVKt6XCPiMnAlcAnMvPxLd0uMxdn5mBmDg4MDDRbhiRphKbCPSLGUwX7TzPzqnrxoxExrX5/GrC2uRIlSVurmbNlArgAWJ6Z54x46xpgfv16PnB14+VJkhrR38S27wZOAO6OiLvqZZ8HzgYui4iTgZXAMU1VKEnaag2He2b+GohNvH1Io/uVJDXPK1QlqUCGuyQVyHCXpAIZ7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLcJalAhrskFchwl6QCGe6SVCDDXZIKZLhLUoEMd0kqkOEuSQUy3CWpQIa7JBXIcJekAhnuklQgw12SCmS4S1KBDHdJKpDhLkkFMtwlqUCGuyQVyHCXpAIZ7pJUIMNdkgpkuEtSgQx3SSpQ28I9ImZHxP0R8WBELGpXO5Kkl2tLuEdEH3Au8B5gH+DYiNinHW1Jkl6uXUfu7wQezMw/ZObzwCXAnDa1JUnaSH+b9jsdeHjE/CrgX0auEBELgAUAu+66a5vKUC+69JQDul3Cy2yLNals7Tpyj1GW5UtmMhdn5mBmDg4MDLSpDEnqTe0K91XALiPmZwCPtKktSdJG2hXu/w3MiojdImICMA+4pk1tSZI20pYx98xcHxH/DtwA9AEXZua97WhLkvRy7fpBlcy8DriuXfuXJG2aV6hKUoEMd0kqkOEuSQUy3CWpQJGZm1+r3UVEDAN/amIXOwF/aVE5Y0Gv9Rfsc6+wz1vnnzNz1KtAt4lwb1ZEDGXmYLfr6JRe6y/Y515hn1vHYRlJKpDhLkkFKiXcF3e7gA7rtf6Cfe4V9rlFihhzlyS9VClH7pKkEQx3SSrQmA73XngId0TsEhG3RMTyiLg3Ij5eL98xIm6KiBX1dEq3a22liOiLiDsj4tp6vuj+AkTEayLiioj4ff33fUDJ/Y6IT9af6Xsi4uKI2L60/kbEhRGxNiLuGbFsk32MiM/VeXZ/RBzRTNtjNtx76CHc64FPZebewP7Awrqfi4ClmTkLWFrPl+TjwPIR86X3F+A7wPWZuRfwZqr+F9nviJgOnAYMZuZ+VLcGn0d5/f0RMHujZaP2sf53PQ/Yt97m+3XONWTMhjs98hDuzFyTmb+tXz9B9Q9+OlVfl9SrLQGO6kqBbRARM4D3AeePWFxsfwEiYgfgQOACgMx8PjP/Rtn97gdeFRH9wESqp7UV1d/MvA14bKPFm+rjHOCSzHwuMx8CHqTKuYaM5XAf7SHc07tUS0dExEzgrcAdwNTMXAPVFwCwcxdLa7VvA58BNoxYVnJ/AXYHhoGL6uGo8yNiEoX2OzNXA98EVgJrgL9n5o0U2t+NbKqPLc20sRzum30Id0kiYjJwJfCJzHy82/W0S0S8H1ibmcu6XUuH9QNvA36QmW8FnmLsD0lsUj3OPAfYDXgdMCkiju9uVV3X0kwby+HeMw/hjojxVMH+08y8ql78aERMq9+fBqztVn0t9m7gyIj4I9VQ28ER8RPK7e+LVgGrMvOOev4KqrAvtd+HAg9l5nBmrgOuAt5Fuf0daVN9bGmmjeVw74mHcEdEUI3DLs/Mc0a8dQ0wv349H7i607W1Q2Z+LjNnZOZMqr/TmzPzeArt74sy88/AwxGxZ73oEOA+yu33SmD/iJhYf8YPofo9qdT+jrSpPl4DzIuI7SJiN2AW8JuGW8nMMfsHeC/wAPC/wOndrqdNffxXqv+a/Q9wV/3nvcA/Uf3SvqKe7tjtWtvQ94OAa+vXvdDftwBD9d/1fwFTSu438CXg98A9wH8C25XWX+Biqt8U1lEdmZ/8Sn0ETq/z7H7gPc207e0HJKlAY3lYRpK0CYa7JBXIcJekAhnuklQgw12SCmS4S1KBDHdJKtD/AWfT122hLQiBAAAAAElFTkSuQmCC\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
}
},
"985d1977d51c446089248ca9d6dac283": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"height": "350px"
}
},
"9c10a7dc3d6e447bab5af6e6753f8318": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"9c2ec7e6993345dd9e41cc6570913572": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"a03c2ad09e804f06a9572ecdd3ab4239": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "major",
"layout": "IPY_MODEL_039c8d946c8b40df8bb5747772873f18",
"max": 40,
"style": "IPY_MODEL_9c2ec7e6993345dd9e41cc6570913572",
"value": 30
}
},
"a14d0dd9266948dc849a87109dccab4b": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {
"height": "350px"
}
},
"a18c5e26cfb54cf8ae2acbafdab63ffc": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"a4a5f822fc7e4557bc79c1f92ae96aa2": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"a78da18cecfb4b58a7c5d46f8364bcc0": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"a895d7f7d18d4d8b8098fc76f4db07c3": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "major",
"layout": "IPY_MODEL_9c10a7dc3d6e447bab5af6e6753f8318",
"max": 40,
"style": "IPY_MODEL_c526b6b06c334cfeb30dcd9f86fd5ebf",
"value": 30
}
},
"aae6daff10f648b78742163bc8177108": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "angle_deg",
"layout": "IPY_MODEL_4cc0bd74a9b3425ab5a1c45304c6372e",
"max": 180,
"min": -180,
"style": "IPY_MODEL_cd992d1a86a047bcbd594248f3462f1f",
"value": 45
}
},
"ac912497cc9f4797a1f40a8501a50a0c": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "VBoxModel",
"state": {
"_dom_classes": [
"widget-interact"
],
"children": [
"IPY_MODEL_f1e0bc07ab2145af865d55e87a587194",
"IPY_MODEL_e4dc3fa1694c4d8b813470839e940ffb",
"IPY_MODEL_aae6daff10f648b78742163bc8177108",
"IPY_MODEL_c738f3e3afae4d64902dc3720b85b541"
],
"layout": "IPY_MODEL_3d6e421349bf4e8eb042a5b51e5c489a"
}
},
"b2615161b0ea41a39fb33f8498e37109": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"b28e5020f938460e84990086bfe868cf": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"b66b5aa72b8a443388f481a6f83f858d": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "minor",
"layout": "IPY_MODEL_1fb17a4e51b34b8e90d81ba16adb8604",
"max": 40,
"style": "IPY_MODEL_6b4276c09e7545f78c832f9d733ba42f"
}
},
"bec973d1d6354f3885cf098216f2427f": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"c3634fcd20484d7d87a643c4b9796dd1": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"c526b6b06c334cfeb30dcd9f86fd5ebf": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"c738f3e3afae4d64902dc3720b85b541": {
"model_module": "@jupyter-widgets/output",
"model_module_version": "1.0.0",
"model_name": "OutputModel",
"state": {
"layout": "IPY_MODEL_84f3abdd5ef24135a20efb72d8ebb672",
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
}
},
"c87c884de7f648bfaf1bd2e5c6dd2576": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"ccaed4e91d464a06ab2e47dbf3365685": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "minor",
"layout": "IPY_MODEL_1d95891f34e94781b49c425b5a1b0f46",
"max": 40,
"style": "IPY_MODEL_7bafa886f3c94b37968e39c51b36bb6c",
"value": 10
}
},
"cd992d1a86a047bcbd594248f3462f1f": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"cfa91d0f76684dc0b8c9cc5c330f9415": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "VBoxModel",
"state": {
"_dom_classes": [
"widget-interact"
],
"children": [
"IPY_MODEL_815441ebf45e485abe67111349e0bce8",
"IPY_MODEL_ea139590f8224918bd63c09da89d6505",
"IPY_MODEL_1e87edbd9ade46f3a62efe73e635584e",
"IPY_MODEL_105e563f9ba344f2ab2a3d95bb0d4bee"
],
"layout": "IPY_MODEL_a78da18cecfb4b58a7c5d46f8364bcc0"
}
},
"d87fb90f0ba4442d867a63103c2cf7b6": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "major",
"layout": "IPY_MODEL_eec85f67af2a45328daf6005b77fde83",
"max": 40,
"style": "IPY_MODEL_c87c884de7f648bfaf1bd2e5c6dd2576",
"value": 30
}
},
"d9450c7102e040b7b3041ef06f3f3285": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "VBoxModel",
"state": {
"_dom_classes": [
"widget-interact"
],
"children": [
"IPY_MODEL_57b8d8578d524cf58bb20d0cdf1c6060",
"IPY_MODEL_727d639324124258b2e55f1defa1131d",
"IPY_MODEL_852c519f4a8e497981b533f025c7b402",
"IPY_MODEL_507a4c1b8a4b4899aac9e9bebe164148"
],
"layout": "IPY_MODEL_28baa47c06c64c2382bbac2795b04814"
}
},
"e4dc3fa1694c4d8b813470839e940ffb": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "minor",
"layout": "IPY_MODEL_ed436e597cc647f8afa1c3bc9aa5b064",
"max": 40,
"style": "IPY_MODEL_c3634fcd20484d7d87a643c4b9796dd1",
"value": 23
}
},
"e8130b8f1e3748889eca4a321fcd33b8": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"e8629c9e8c5a49c8a78ea410906e2338": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"ea139590f8224918bd63c09da89d6505": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "minor",
"layout": "IPY_MODEL_3df2fe7e4ebf43e6915f25f6e3afe1bf",
"max": 40,
"style": "IPY_MODEL_370c8e4f02d743cbb9a1f4479602b9cc",
"value": 17
}
},
"ecb6a111d5f64b89a7dc8fd51e671831": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"ed436e597cc647f8afa1c3bc9aa5b064": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"eeafe6c59cb74837b9eb4a4eb479580c": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "SliderStyleModel",
"state": {
"description_width": ""
}
},
"eec85f67af2a45328daf6005b77fde83": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"efc94701c386469399fc5b14e6253833": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"f1e0bc07ab2145af865d55e87a587194": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "major",
"layout": "IPY_MODEL_e8130b8f1e3748889eca4a321fcd33b8",
"max": 40,
"style": "IPY_MODEL_01376b89433f45a983860bc1ca3562a4",
"value": 27
}
},
"f1e5fc3e3ad0465484df3b41f64d2161": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
},
"f4d0e324ddff4ebba73370ca91815960": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "VBoxModel",
"state": {
"_dom_classes": [
"widget-interact"
],
"children": [
"IPY_MODEL_70367a04f6294776b8bd66306575f072",
"IPY_MODEL_782a86cd9b1d4a0da1136b4053d9372a",
"IPY_MODEL_f5abb97079bb40fca34785b75e62cbd6",
"IPY_MODEL_6a232dda83124c9bac91f63e47e11ff7"
],
"layout": "IPY_MODEL_ecb6a111d5f64b89a7dc8fd51e671831"
}
},
"f5abb97079bb40fca34785b75e62cbd6": {
"model_module": "@jupyter-widgets/controls",
"model_module_version": "1.5.0",
"model_name": "IntSliderModel",
"state": {
"description": "angle_deg",
"layout": "IPY_MODEL_f1e5fc3e3ad0465484df3b41f64d2161",
"max": 180,
"min": -180,
"style": "IPY_MODEL_08a9242559e241d1a4c1e8a2e546731e",
"value": -51
}
},
"fa7fd7b9a97b4c8b80faebc8d5c4d019": {
"model_module": "@jupyter-widgets/output",
"model_module_version": "1.0.0",
"model_name": "OutputModel",
"state": {
"layout": "IPY_MODEL_0c4160622c1b4582a528eaf813bc0725",
"outputs": [
{
"ename": "AssertionError",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m~/local/conda/envs/ferda3/lib/python3.6/site-packages/ipywidgets/widgets/interaction.py\u001b[0m in \u001b[0;36mupdate\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 254\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwidget\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_interact_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 255\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mwidget\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_kwarg\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 256\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 257\u001b[0m \u001b[0mshow_inline_matplotlib_plots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 258\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mauto_display\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-22-0dc9d484d5d8>\u001b[0m in \u001b[0;36mplot_ellipse\u001b[0;34m(x, y, major, minor, angle_deg)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mmin_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmin_y\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmax_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmax_y\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_ellipse_bb\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmajor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mminor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mangle_deg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mmin_x\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mmax_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34mf'{min_x} {max_x}'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0;32massert\u001b[0m \u001b[0mmin_y\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mmax_y\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvlines\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmax_x\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmin_x\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhlines\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmax_y\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmin_y\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mAssertionError\u001b[0m: "
]
}
]
}
},
"fc75908ca075400f99724277a8785705": {
"model_module": "@jupyter-widgets/base",
"model_module_version": "1.2.0",
"model_name": "LayoutModel",
"state": {}
}
},
"version_major": 2,
"version_minor": 0
}
}
},
"nbformat": 4,
"nbformat_minor": 4
}
@drscotthawley
Copy link

drscotthawley commented Jun 29, 2021

This can return min values that are greater than their corresponding max values, e.g. when a negative angle is supplied. Recommend you wrap these lines in sorted(), e.g.

    [max_x, min_x] = sorted([x + major / 2 * np.cos(t) * np.cos(np.radians(angle_deg)) -
                      minor / 2 * np.sin(t) * np.sin(np.radians(angle_deg)) for t in (t, t + np.pi)],reverse=True)
    t = np.arctan(minor / 2 * 1. / np.tan(np.radians(angle_deg)) / (major / 2))
    [max_y, min_y] = sorted([y + minor / 2 * np.sin(t) * np.cos(np.radians(angle_deg)) +
                      major / 2 * np.cos(t) * np.sin(np.radians(angle_deg)) for t in (t, t + np.pi)],reverse=True)

@smidm
Copy link
Author

smidm commented Jul 12, 2021

Thanks @drscotthawley! I fixed the notebook with slightly modified code.

@drscotthawley
Copy link

@smidm what happens if angle_dim==0? I get NaNs with a warning:

RuntimeWarning: invalid value encountered in double_scalars
  t = np.arctan(-minor / 2 * np.tan(np.radians(angle_deg)) / (major / 2))

To avoid this, I just added a little fudge factor above that line:

    if 0==angle_deg: angle_deg = 1e-8      # slight fudge to avoid division by zero

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment