formelsammlung/scripts/other/crystal_lattices.ipynb

566 lines
1.1 MiB
Plaintext
Raw Permalink Normal View History

2025-02-02 22:59:33 +01:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "eaed683c-c6f1-45e4-aaee-ae4e57209f5f",
"metadata": {},
"outputs": [],
"source": [
"import scipy as scp\n",
"from scipy.spatial import Voronoi, voronoi_plot_2d\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.mplot3d import Axes3D\n",
"from mpl_toolkits.mplot3d.art3d import Poly3DCollection\n",
"%matplotlib widget"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "efd84ecd-9fb3-4d2f-9f7a-47cd1ff09eea",
"metadata": {},
"outputs": [],
"source": [
"class Lattice:\n",
" def __init__(self, *vecs):\n",
" # if the vecs were put in an iterable\n",
" if len(vecs) == 1:\n",
" vecs = vecs[0]\n",
" if len(vecs) == 3:\n",
" pass\n",
" elif len(vecs) == 2:\n",
" pass\n",
" else: raise ValueError(\"Vecs must contain either 2 or 3 vectors\")\n",
" self.dim = len(vecs)\n",
" self.vecs = list(vecs)\n",
" for i, v in enumerate(self.vecs):\n",
" if type(v) != np.ndarray:\n",
" self.vecs[i] = np.array(v)\n",
" if self.vecs[i].shape != (self.dim,):\n",
" raise ValueError(f\"Got {self.dim} vectors, therefore all vectors must be {self.dim} dimensional but vector {i+1} has shape {self.vecs[i].shape}\")\n",
" self.vecs = np.array(self.vecs)\n",
" self.vec_lengths = np.array([np.linalg.norm(v) for v in self.vecs])\n",
" self.center = np.zeros(self.dim)\n",
"\n",
" def get_point(self, *ns):\n",
" if len(ns) != len(self.vecs): raise ValueError(f\"Requires one index for each lattice vector {len(self.vecs)}, but got only {ns}\")\n",
" point = self.center.copy()\n",
" for i, n in enumerate(ns):\n",
" point += n * self.vecs[i]\n",
" return point\n",
"\n",
" \n",
" def get_points_around_center(self, n):\n",
" points = []\n",
" import itertools\n",
" ns = [i for i in range(-n, n+1)]\n",
" for n in itertools.product(*[ns for _ in range(self.dim)]):\n",
" # print(n)\n",
" points.append(self.get_point(*n))\n",
" return points"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "515b9133-233b-4a6a-8b2f-a2fca10fea3d",
"metadata": {},
"outputs": [],
"source": [
"def rot_mat_2D(rad):\n",
" return np.array([[np.cos(rad), -np.sin(rad)], [np.sin(rad), np.cos(rad)]])\n",
"\n",
"\n",
"def get_reciprocal_lattice(lattice: Lattice):\n",
" if lattice.dim == 2:\n",
" rot_90_deg = rot_mat_2D(np.pi / 2)\n",
" a1, a2 = lattice.vecs\n",
" b1 = 2 * np.pi * rot_90_deg @ a2 / (np.dot(a1, rot_90_deg @ a2))\n",
" b2 = 2 * np.pi * rot_90_deg @ a1 / (np.dot(a2, rot_90_deg @ a1))\n",
" return Lattice(b1, b2)\n",
" elif lattice.dim == 3:\n",
" a1, a2, a3 = lattice.vecs\n",
" V = np.dot(a1, np.cross(a2, a3))\n",
" b1 = 2 * np.pi/V * np.cross(a2, a3)\n",
" b2 = 2 * np.pi/V * np.cross(a3, a1)\n",
" b3 = 2 * np.pi/V * np.cross(a1, a2)\n",
" return Lattice(b1, b2, b3)\n",
" else: raise NotImplementedError(f\"Dim must be 2 or 3, but is {lattice.dim}\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "2855d08e-70d8-4ef7-ba19-2c06316caf15",
"metadata": {},
"outputs": [],
"source": [
"\n",
"def get_elementary_cell(lattice: Lattice):\n",
" points = lattice.get_points_around_center(1)\n",
" return points\n",
"\n",
"def get_orthogonal_2D(vec):\n",
" return np.array((vec[1], -vec[0]))\n",
"\n",
"def get_unit_cell_vertices(lattice: Lattice, voronoi: Voronoi):\n",
" \"\"\"regard only voronoi vertices which are closest to the center <=> their norm is <= 0.5*(norm of the unit vectors added together\n",
" \"\"\"\n",
" lattice_vec_norm = np.sqrt(np.sum(lattice.vec_lengths**2))\n",
" return voronoi.vertices[np.linalg.norm(voronoi.vertices, axis=1) <= 0.5 * lattice_vec_norm]\n",
" \n",
"def plot_unit_cell(lattice, fig_ax=None, vec_label=\"a\", subplot_kw={}):\n",
" # get voronoi of the points around the center\n",
" points = get_elementary_cell(lattice)\n",
" voronoi = Voronoi(points)\n",
"\n",
" if fig_ax:\n",
" fig, ax = fig_ax\n",
" else:\n",
" if lattice.dim == 3:\n",
" fig = plt.figure()\n",
" ax = fig.add_subplot(1,1,1, projection=\"3d\") \n",
" else:\n",
" fig, ax = plt.subplots(**subplot_kw) \n",
"\n",
" # unit cell vertices\n",
" cell_points = get_unit_cell_vertices(lattice, voronoi)\n",
" # sort by polar angle for the fill function\n",
" cell_points = list(cell_points)\n",
" # print(cell_points)\n",
" # print([i for i in map(lambda p: np.arctan2(p[1],p[0]), cell_points)])\n",
" if lattice.dim == 2:\n",
" cell_points.sort(key=lambda p: np.arctan2(p[1],p[0]))\n",
" x_cell, y_cell = zip(*cell_points)\n",
" ax.fill(x_cell, y_cell, color=\"#4444\")\n",
" ax.scatter(x_cell, y_cell, color=\"orange\")\n",
" \n",
" # lattice points\n",
" x_lat, y_lat = zip(*lattice.get_points_around_center(3))\n",
" ax.scatter(x_lat, y_lat, color=\"blue\")\n",
" \n",
" # lattice vectors\n",
" arrowprops = dict(arrowstyle=\"-|>,head_width=0.4,head_length=0.8\", color=\"black\", shrinkA=0,shrinkB=0)\n",
" for i, vec in enumerate(lattice.vecs):\n",
" ax.annotate(f\"\", xy=lattice.vecs[i], xytext=lattice.center, arrowprops=arrowprops)\n",
" if vec_label is not None:\n",
" # add name of vector at a perpendicular offset starting at half length\n",
" ax.annotate(r\"$\\vec{\"+f\"{vec_label}}}_{i+1}$\", xy=0.7*lattice.vecs[i], xytext=0.7*lattice.vecs[i] + 0.06*get_orthogonal_2D(lattice.vecs[i]))\n",
" elif lattice.dim == 3:\n",
" # todo filter so that only\n",
" ridges = voronoi.ridge_vertices\n",
" lattice_vec_norm = np.sqrt(np.sum(lattice.vec_lengths**2))\n",
" for ridge in ridges:\n",
" # ATOMS\n",
" verts = voronoi.vertices[ridge]\n",
" # TODO: doesnt seem to work\n",
" \"\"\"regard only voronoi vertices which are closest to the center <=> their norm is <= 0.5*(norm of the unit vectors added together\n",
" \"\"\"\n",
" verts = verts[np.linalg.norm(verts, axis=1) <= 0.5 * lattice_vec_norm]\n",
" x_lat, y_lat, z_lat = zip(*lattice.get_points_around_center(1))\n",
" ax.scatter(x_lat, y_lat, z_lat, color=\"red\", marker=\".\")\n",
" # print(verts, type(verts), verts.shape, verts.ndim)\n",
" ax.add_collection3d(Poly3DCollection([voronoi.vertices[ridge]], edgecolor=\"black\", alpha=0.5))\n",
" # UNIT VECTORS \n",
" for vec in lattice.vecs:\n",
" ax.plot(*[i for i in zip([0,0,0], vec)])\n",
" ax.set_xlim(-2, 2)\n",
" ax.set_ylim(-2, 2)\n",
" ax.set_zlim(-2, 2)\n",
" \n",
" else: raise NotImplementedError(f\"Dim must be 2 or 3, but is {lattice.dim}\")\n",
"\n",
" # limit to 2*lattice vectors\n",
" def calc_lim(axis):\n",
" lim = 2.05 * np.max(np.abs(lattice.vecs[axis,:]))\n",
" return -lim, lim\n",
" ax.set_xlim(*calc_lim(0))\n",
" ax.set_ylim(*calc_lim(1))\n",
" if lattice.dim == 3: ax.set_zlim(*calc_lim(2))\n",
" fig.tight_layout()\n",
" return fig"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "c2faef81-5f2a-4950-b986-e891ddfa7da8",
"metadata": {},
"outputs": [],
"source": [
"sphere_point = lambda rad: np.array([np.cos(rad), np.sin(rad)])\n",
"\n",
"square_lattice = Lattice([1, 0], [0, 1])\n",
"tilted_lattice = Lattice([1, 0.5], [0, 1])\n",
"honeycomb_lattice = Lattice(sphere_point(0), sphere_point(np.pi * 2/3))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "a6b6ccf4-34c7-419d-8bcc-f3ce2870ba25",
"metadata": {},
"outputs": [],
"source": [
"# fig, axs = plt.subplots(3, figsize=(4, 12))\n",
"# plot_unit_cell(square_lattice, fig_ax=(fig, axs[0]))\n",
"# plot_unit_cell(tilted_lattice, fig_ax=(fig, axs[1]))\n",
"# plot_unit_cell(honeycomb_lattice, fig_ax=(fig,axs[2]));"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "5314dd3a-17a7-402d-b3ee-ddbf69a6c4ed",
"metadata": {},
"outputs": [],
"source": [
"def plot_lattice(lattice: Lattice):\n",
" reci = get_reciprocal_lattice(lattice)\n",
" print(reci.vecs)\n",
" if lattice.dim == 3:\n",
" fig = plt.figure()\n",
" axs = [fig.add_subplot(1,2,i, projection=\"3d\") for i in [1,2]]\n",
" fig.suptitle(\"3D Lattice\")\n",
" \n",
" else:\n",
" fig, axs = plt.subplots(1, 2)\n",
" plot_unit_cell(lattice, fig_ax=(fig, axs[0]))\n",
" plot_unit_cell(reci, fig_ax=(fig, axs[1]), vec_label=\"b\")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "39a49d00-fc93-4f2a-8645-d5e440e7a092",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 6.28318531e+00 -3.84734139e-16]\n",
" [ 3.84734139e-16 6.28318531e+00]]\n",
"[[ 6.28318531e+00 -3.84734139e-16]\n",
" [-3.14159265e+00 6.28318531e+00]]\n",
"[[6.28318531e+00 3.62759873e+00]\n",
" [4.44252717e-16 7.25519746e+00]]\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "03f1538170914d43ab528487e51297c3",
"version_major": 2,
"version_minor": 0
},
"image/png": "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
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,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
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e300070748334ea8b857f0747956546d",
"version_major": 2,
"version_minor": 0
},
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAW8dJREFUeJzt3Xt8E1XeP/BPkrbpPaXQpi2ttMhdrlbFItUiPIsoVWRBXS+ID7ILC65cdKXPTyl4Q2FVvO2i6y7o43pBKIro48qWW5UCilQELAIWW0rTAqUJvbfJ/P4IiU2btilNMsmcz/v1Gmsmk+R7cjqHb2fmzFclSZIEIiIiIhKGWu4AiIiIiMi7mAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgAuQOwBssFgtOnz6NiIgIqFQqucMhIi+SJAkXLlxAQkIC1Gpl/c3LsY1IXN0d24RIAE+fPo2kpCS5wyAiGZWUlCAxMVHuMNyKYxsRXerY5vUEcMWKFcjJyUFhYSFCQkIwZswYPP/88xg4cGCHr/voo4/wxBNP4OTJk+jfvz+ef/553HzzzS59ZkREBADg5MkSHDoUCYMBiIsDxowBNJpuN4l8mNkM7N4N9rlAWvf50KEmJCcn2ccBJeHYJu4+Lmq7AXHb7vaxTfKyiRMnSmvXrpUOHTokFRQUSDfffLN02WWXSdXV1e2+5uuvv5Y0Go20cuVK6ciRI9Ljjz8uBQYGSj/88INLn2k0GiUAUkKCUQIk+5KYKEkbN7qrZeRrNm609jH7XBzO+ty630MyGo1yh+d2oo9tou7jorZbksRtuyfGNq8ngK1VVFRIAKSdO3e2u80dd9wh3XLLLQ7rRo8eLf3hD39w6TNsgyTgOEiqVNZF6b84Itq40dq3Lfubfa5s7fW5db9XdgIo4tgm6j4uarslSdy2e2psk/2KaKPRCACIjo5ud5v8/HxMmDDBYd3EiRORn5/frc+WJOvPBQush1ZJGcxm4OGHf+3fltjnytRRn4tI6b/nou7jorYbELftnhzbZE0ALRYLFixYgOuuuw5Dhw5tdzuDwQC9Xu+wTq/Xw2AwON2+oaEBJpPJYWmPJAElJUBe3qW1gXxPXh5w6lT7z7PPlaezPheRkn/PRd3HRW03IG7bPTm2yZoAzps3D4cOHcIHH3zg1vddsWIFdDqdfXFlllxZmVtDIBm52pfsc+VgX7ZPid+NqPu4qO0GxG27J9sjWwI4f/58bNmyBdu3b+90+nJcXBzKy8sd1pWXlyMuLs7p9llZWTAajfalpKSk03ji412PnXybq33JPlcO9mX7lPjdiLqPi9puQNy2e7I9Xk8AJUnC/PnzsWnTJmzbtg0pKSmdviYtLQ25ubkO67Zu3Yq0tDSn22u1WkRGRjos7VGpgKQkID29a+0g35WeDiQmWvvWGfa58nTW5yJS8u+5qPu4qO0GxG27J8c2ryeA8+bNw7vvvov33nsPERERMBgMMBgMqKurs28zY8YMZGVl2R8//PDD+OKLL/DCCy+gsLAQy5Ytw7fffov58+d3KxbbF7p6tRj3EBKFRgO8/LL1/1vvNOxzZeqoz0Wk9N9zUfdxUdsNiNt2j45t7p2s3DkATpe1a9fat7nhhhuk+++/3+F169evlwYMGCAFBQVJV1xxhfTZZ5+5/Jnt3SsrKUm508bJ+X2T2OfK5qzPe/dW/m1gRB3bRN3HRW23JInbdk+MbSpJUv6NE0wmE3Q6HSorjfj++0iUlVnPq6enK++vBXJkNltnUbHPxdG6z0eMMCE6Wgej0djh5SD+iGObuPu4qO0GxG27u8c2oRJAJf4DQEQdU/L+r+S2EVHHurv/y34jaCIiIiLyLiaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhE5CG7du1CZmYmEhISoFKp8PHHHzs8L0kSli5divj4eISEhGDChAk4duyYPMESkVCYABIReUhNTQ1GjBiB119/3enzK1euxCuvvII1a9Zg7969CAsLw8SJE1FfX+/lSIlINAFyB0BEpFSTJk3CpEmTnD4nSRJWr16Nxx9/HLfddhsA4J133oFer8fHH3+Mu+66y5uhEpFgeASQiEgGRUVFMBgMmDBhgn2dTqfD6NGjkZ+fL2NkRCQCHgEkIpKBwWAAAOj1eof1er3e/lxrDQ0NaGhosD82mUyeC5CIFI1HAImI/MSKFSug0+nsS1JSktwhEZGfYgJIRCSDuLg4AEB5ebnD+vLycvtzrWVlZcFoNNqXkpISj8dJRMrEBJCISAYpKSmIi4tDbm6ufZ3JZMLevXuRlpbm9DVarRaRkZEOCxHRpeA1gEREHlJdXY3jx4/bHxcVFaGgoADR0dG47LLLsGDBAjz99NPo378/UlJS8MQTTyAhIQFTpkyRL2giEgITQCIiD/n2228xbtw4++NFixYBAO6//36sW7cOf/7zn1FTU4Pf//73qKqqwtixY/HFF18gODhYrpCJSBAqSZIkb37grl27sGrVKuzfvx9lZWXYtGlTh3/t7tixw2EAtSkrK2v3OpnWTCYTdDodjEajsKdMzGYgLw8oKwPi44H0dECjkTsq8iT2uZWS938lt42IOtbd/d/r1wB2dmf89hw9ehRlZWX2JTY21kMRKk9ODpCcDIwbB9x9t/VncrJ1PSkT+5yIiDri9VPAHd0ZvyOxsbGIiopyf0AKl5MDTJsGtD7OW1pqXb9hAzB1qjyxkWewz4mIqDN+Mwt45MiRiI+Px3/913/h66+/ljscv2A2Aw8/3DYRAH5dt2CBdTtSBvY5ERG5wucTwPj4eKxZswYbN27Exo0bkZSUhIyMDHz33XftvqahoQEmk8lhEVFeHnDqVPvPSxJQUmLdjpSBfU5ERK7w+VnAAwcOxMCBA+2Px4wZgxMnTuCll17C//7v/zp9zYoVK7B8+XJvheizysrcux35PvY5ERG5wuePADpzzTXXONxbqzXeLd8qPt6925HvY58TEZErfP4IoDMFBQWI7+BfMK1WC61W68WIfFN6OpCYaL3439k1YSqV9fn0dO/HRp7BPiciIld4PQHs7M74WVlZKC0txTvvvAMAWL16NVJSUnDFFVegvr4eb731FrZt24Yvv/zS26H7HY0GePll68xPlcoxIVCprD9Xrxbz3nBKxT4nIiJXeP0U8LfffotRo0Zh1KhRAKx3xh81ahSWLl0KwHqD5+LiYvv2jY2NWLx4MYYNG4YbbrgB33//Pf7zn/9g/Pjx3g7dL02dar3tR+/ejusTE3k7EKVinxMRUWe8XglEDrxbPqtCiIh9bqXk/V/JbSOijnV3//fLawCp6zQaICND7ijIm9jnRETUHr+cBUxEREREl44JIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAA
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAW8dJREFUeJzt3Xt8E1XeP/BPkrbpPaXQpi2ttMhdrlbFItUiPIsoVWRBXS+ID7ILC65cdKXPTyl4Q2FVvO2i6y7o43pBKIro48qWW5UCilQELAIWW0rTAqUJvbfJ/P4IiU2btilNMsmcz/v1Gmsmk+R7cjqHb2fmzFclSZIEIiIiIhKGWu4AiIiIiMi7mAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgAuQOwBssFgtOnz6NiIgIqFQqucMhIi+SJAkXLlxAQkIC1Gpl/c3LsY1IXN0d24RIAE+fPo2kpCS5wyAiGZWUlCAxMVHuMNyKYxsRXerY5vUEcMWKFcjJyUFhYSFCQkIwZswYPP/88xg4cGCHr/voo4/wxBNP4OTJk+jfvz+ef/553HzzzS59ZkREBADg5MkSHDoUCYMBiIsDxowBNJpuN4l8mNkM7N4N9rlAWvf50KEmJCcn2ccBJeHYJu4+Lmq7AXHb7vaxTfKyiRMnSmvXrpUOHTokFRQUSDfffLN02WWXSdXV1e2+5uuvv5Y0Go20cuVK6ciRI9Ljjz8uBQYGSj/88INLn2k0GiUAUkKCUQIk+5KYKEkbN7qrZeRrNm609jH7XBzO+ty630MyGo1yh+d2oo9tou7jorZbksRtuyfGNq8ngK1VVFRIAKSdO3e2u80dd9wh3XLLLQ7rRo8eLf3hD39w6TNsgyTgOEiqVNZF6b84Itq40dq3Lfubfa5s7fW5db9XdgIo4tgm6j4uarslSdy2e2psk/2KaKPRCACIjo5ud5v8/HxMmDDBYd3EiRORn5/frc+WJOvPBQush1ZJGcxm4OGHf+3fltjnytRRn4tI6b/nou7jorYbELftnhzbZE0ALRYLFixYgOuuuw5Dhw5tdzuDwQC9Xu+wTq/Xw2AwON2+oaEBJpPJYWmPJAElJUBe3qW1gXxPXh5w6lT7z7PPlaezPheRkn/PRd3HRW03IG7bPTm2yZoAzps3D4cOHcIHH3zg1vddsWIFdDqdfXFlllxZmVtDIBm52pfsc+VgX7ZPid+NqPu4qO0GxG27J9sjWwI4f/58bNmyBdu3b+90+nJcXBzKy8sd1pWXlyMuLs7p9llZWTAajfalpKSk03ji412PnXybq33JPlcO9mX7lPjdiLqPi9puQNy2e7I9Xk8AJUnC/PnzsWnTJmzbtg0pKSmdviYtLQ25ubkO67Zu3Yq0tDSn22u1WkRGRjos7VGpgKQkID29a+0g35WeDiQmWvvWGfa58nTW5yJS8u+5qPu4qO0GxG27J8c2ryeA8+bNw7vvvov33nsPERERMBgMMBgMqKurs28zY8YMZGVl2R8//PDD+OKLL/DCCy+gsLAQy5Ytw7fffov58+d3KxbbF7p6tRj3EBKFRgO8/LL1/1vvNOxzZeqoz0Wk9N9zUfdxUdsNiNt2j45t7p2s3DkATpe1a9fat7nhhhuk+++/3+F169evlwYMGCAFBQVJV1xxhfTZZ5+5/Jnt3SsrKUm508bJ+X2T2OfK5qzPe/dW/m1gRB3bRN3HRW23JInbdk+MbSpJUv6NE0wmE3Q6HSorjfj++0iUlVnPq6enK++vBXJkNltnUbHPxdG6z0eMMCE6Wgej0djh5SD+iGObuPu4qO0GxG27u8c2oRJAJf4DQEQdU/L+r+S2EVHHurv/y34jaCIiIiLyLiaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhEREQkGCaARERERIJhAkhE5CG7du1CZmYmEhISoFKp8PHHHzs8L0kSli5divj4eISEhGDChAk4duyYPMESkVCYABIReUhNTQ1GjBiB119/3enzK1euxCuvvII1a9Zg7969CAsLw8SJE1FfX+/lSIlINAFyB0BEpFSTJk3CpEmTnD4nSRJWr16Nxx9/HLfddhsA4J133oFer8fHH3+Mu+66y5uhEpFgeASQiEgGRUVFMBgMmDBhgn2dTqfD6NGjkZ+fL2NkRCQCHgEkIpKBwWAAAOj1eof1er3e/lxrDQ0NaGhosD82mUyeC5CIFI1HAImI/MSKFSug0+nsS1JSktwhEZGfYgJIRCSDuLg4AEB5ebnD+vLycvtzrWVlZcFoNNqXkpISj8dJRMrEBJCISAYpKSmIi4tDbm6ufZ3JZMLevXuRlpbm9DVarRaRkZEOCxHRpeA1gEREHlJdXY3jx4/bHxcVFaGgoADR0dG47LLLsGDBAjz99NPo378/UlJS8MQTTyAhIQFTpkyRL2giEgITQCIiD/n2228xbtw4++NFixYBAO6//36sW7cOf/7zn1FTU4Pf//73qKqqwtixY/HFF18gODhYrpCJSBAqSZIkb37grl27sGrVKuzfvx9lZWXYtGlTh3/t7tixw2EAtSkrK2v3OpnWTCYTdDodjEajsKdMzGYgLw8oKwPi44H0dECjkTsq8iT2uZWS938lt42IOtbd/d/r1wB2dmf89hw9ehRlZWX2JTY21kMRKk9ODpCcDIwbB9x9t/VncrJ1PSkT+5yIiDri9VPAHd0ZvyOxsbGIiopyf0AKl5MDTJsGtD7OW1pqXb9hAzB1qjyxkWewz4mIqDN+Mwt45MiRiI+Px3/913/h66+/ljscv2A2Aw8/3DYRAH5dt2CBdTtSBvY5ERG5wucTwPj4eKxZswYbN27Exo0bkZSUhIyMDHz33XftvqahoQEmk8lhEVFeHnDqVPvPSxJQUmLdjpSBfU5ERK7w+VnAAwcOxMCBA+2Px4wZgxMnTuCll17C//7v/zp9zYoVK7B8+XJvheizysrcux35PvY5ERG5wuePADpzzTXXONxbqzXeLd8qPt6925HvY58TEZErfP4IoDMFBQWI7+BfMK1WC61W68WIfFN6OpCYaL3439k1YSqV9fn0dO/HRp7BPiciIld4PQHs7M74WVlZKC0txTvvvAMAWL16NVJSUnDFFVegvr4eb731FrZt24Yvv/zS26H7HY0GePll68xPlcoxIVCprD9Xrxbz3nBKxT4nIiJXeP0U8LfffotRo0Zh1KhRAKx3xh81ahSWLl0KwHqD5+LiYvv2jY2NWLx4MYYNG4YbbrgB33//Pf7zn/9g/Pjx3g7dL02dar3tR+/ejusTE3k7EKVinxMRUWe8XglEDrxbPqtCiIh9bqXk/V/JbSOijnV3//fLawCp6zQaICND7ijIm9jnRETUHr+cBUxEREREl44JIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERERCYYJIBEREZFgmAASERE
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "cdc6b7727b904332874e154196f49c43",
"version_major": 2,
"version_minor": 0
},
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWANJREFUeJzt3Xt8E3W+P/5Xml6g9MalTdOLUC6C3FkEBCkW7IoIVazIrrsr4M/VrYsKgih8j4KXxSp4Kbi4uLvngJ4966pQUTwebyBYpaCgFSiX5VLsPaWUJrSFXpL5/RESSJu2aZvJZObzej4eWTaTT5L3eybz8d2Z+cxHJ0mSBCIiIiISRoDSARARERGRb7EAJCIiIhIMC0AiIiIiwbAAJCIiIhIMC0AiIiIiwbAAJCIiIhIMC0AiIiIiwbAAJCIiIhIMC0AiIiIiwbAAJCIiIhIMC0AiIiIiwbAAJCIiIhIMC0AiIiIiwQQqHYAv2Gw2lJaWIjw8HDqdTulwiMiHJEnChQsXEBcXh4AAbf3Ny76NSFxd7duEKABLS0uRmJiodBhEpKCioiIkJCQoHYZXsW8jos72bUIUgOHh4QCA2NgilJdHOJfHxQEvvQTcfrtSkfnGRx8BTz4JlJZeWSZC7qLmDYibu7u8Y2MtKC9PdPYDWiJ63yYqUfdvkcnRt+kkSZK8FJ/fslgsiIyMBGAGcKWTdJwx2bIFSE9XJDTZZWcDc+YAzbey1nMXNW9A3NxbyxuwAIiE2WxGRESEm3eql8h9m6hE3b9FJlffJnQBCNh3moQEoKAA0OsVCU82VivQrx9QXOz+da3mLmregLi5t523eAUgoN1tLTJR92+Rydm3aeuK6E6QJKCoCMjJUToS78vJab2jALSbu6h5A+Lm3l7eItLqthaZqPu3yOTs24QvAB3KypSOwPs8zUlruYuaNyBu7lrLx5u4brRD1P1bZHJuSxaAlxmNSkfgfZ7mpLXcRc0bEDd3reXjTVw32iHq/i0yObclrwHU8DUTjmsHSkrcXTyq3dxFzRsQN/e28+Y1gFra1iITdf8WmZx9m9BHAB2jprKytLmz6PXAunX2/9/8HrFazl3UvAFxc28rbxFpeVuLTNT9W2Ry9m1CFYBxca7PExK0P2Q+Pd2eY3y863Kt5y5q3oC4ubeWd/PnWiRi3yYqUfdvkcnVtwl1CriqyoyffopAWZn9vHpysjh/KVmt9tFEouUuat6AuLk3z3vUKAt69dL2KWCR+zZRibp/i8zbfZtQBaAW/wNARG3T8v6v5dyIqG1d3f+FOgVMRERERCwAiYiIiITDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMD4vAL/++mukpaUhLi4OOp0O27Zta7P9rl27oNPpWjzKy8t9EzARERGRxvi8AKytrcWoUaOwYcOGDr3v+PHjKCsrcz5iYmJkipCIiIhI2wJ9/YUzZszAjBkzOvy+mJgYREVFeT8gIiIiIsGo5hrA0aNHw2g04pe//CW+/fbbNtvW19fDYrG4PIiIiIjIzu8LQKPRiI0bN2Lr1q3YunUrEhMTkZKSgh9++KHV92RmZiIyMtL5SExM9GHERERERP5NJ0mSpNiX63T44IMPMHv27A6976abbsI111yD//7v/3b7en19Perr653PLRYLEhMTYTabERER0ZWQiUhlLBYLIiMjNbn/azk3ImpbV/d/n18D6A3jx4/HN9980+rrISEhCAkJ8WFEREREROrh96eA3cnLy4PRaFQ6DCIiIiJV8vkRwJqaGpw8edL5vKCgAHl5eejVqxeuueYarFixAiUlJXj77bcBAFlZWUhKSsKwYcNw6dIl/P3vf8fOnTvx+eef+zp0IiIiIk3weQG4f/9+TJ061fl8yZIlAID58+dj8+bNKCsrQ2FhofP1hoYGLF26FCUlJQgNDcXIkSPx5ZdfunwGEREREXlO0UEgvsILpYnEpeX9X8u5EVHburr/q/IaQCIiIiLqPBaARERERIJhAUhEREQkGBaARERERIJhAUhEREQkGBaARERERIJhAUhEREQkGBaARERERIJhAUhEREQkGBaARERERIJhAUhEREQkGBaARERERIIJVDoAIiKizrJagZwcoKwMMBqB5GRAr1c6KpITt7l3sAAkIiJVys4GFi0CiouvLEtIANatA9LTlYuL5MNt7j08BUxERKqTnQ3MmeNaCABASYl9eXa2MnGRfLjNvYsFIBERqYrVaj8KJEktX3MsW7zY3o60gdvc+1gAEhGRquTktDwKdDVJAoqK7O1IG7jNvY8FIBERqUpZmXfbkf/jNvc+FoBERKQqRqN325H/4zb3PhaARESkKsnJ9pGfOp3713U6IDHR3o60gdvc+1gAEhGRquj19tt+AC0LAsfzrCzeG05LuM29jwUgERGpTno6sGULEB/vujwhwb6c94TTHm5z7+KNoImISJXS04E77uCsECLhNvceFoBERKRaej2QkqJ0FORL3ObewVPARERERIJhAUhEJJOvv/4aaWlpiIuLg06nw7Zt21xelyQJK1euhNFoRPfu3ZGamooTJ04oEywRCYUFIBGRTGprazFq1Chs2LDB7etr1qzB+vXrsXHjRuzbtw89evTA9OnTcenSJR9HSkSi4TWAREQymTFjBmbMmOH2NUmSkJWVhaeeegp33HEHAODtt9+GwWDAtm3b8Otf/9qXoRKRYHgEkIhIAQUFBSgvL0dqaqpzWWRkJCZMmIDc3FwFIyMiEfAIIBGRAsrLywEABoPBZbnBYHC+1lx9fT3q6+udzy0Wi3wBEpGm8QggEZFKZGZmIjIy0vlITExUOiQiUikWgERECoiNjQUAmEwml+Umk8n5WnMrVqyA2Wx2PoqKimSPk4i0iQUgEZECkpKSEBsbix07djiXWSwW7Nu3DxMnTnT7npCQEERERLg8iIg6g9cAEhHJpKamBidPnnQ+LygoQF5eHnr16oVrrrkGixcvxp/+9CcMGjQISUlJePrppxEXF4fZs2crFzQRCYEFIBGRTPbv34+pU6c6ny9ZsgQAMH/+fGzevBlPPPEEamtr8eCDD6K6uhqTJ0/Gp59+im7duikVMhEJQidJkqR0EHKzWCyIjIyE2WzmKRMiwWh5/9dybkTUtq7u/7wGkIiIiEgwLACJiIiIBMMCkIiIiEgwLACJiIiIBMMCkIiIiEgwLACJiIiIBMMCkIiIiEgwLACJiIiIBMMCkIiIiEgwLACJiIiIBMMCkIiIiEgwLACJiIiIBMMCkIiIiEgwPi8Av/76a6SlpSEuLg46nQ7btm1r9z27du3CL37xC4SEhGDgwIHYvHmz7HESERERaZXPC8Da2lqMGjUKGzZs8Kh9QUEBZs6cialTpyIvLw+LFy/G73//e3z22WcyR0pERESkTYG+/sIZM2ZgxowZHrffuHEjkpKS8MorrwAArrvuOnzzzTd47bXXMH36dLnCJCIiItIsv78GMDc3F6mpqS7Lpk+fjtzc3FbfU19fD4vF4vIgIiIiIju/LwDLy8thMBhclhkMBlgsFly8eNHtezIzMxEZGel8JCYm+iJUIiIiIlXw+wKwM1asWAGz2ex8FBUVKR0SERERkd/w+TWAHRUbGwuTyeSyzGQyISIiAt27d3f7npCQEISEhPgiPCIiIiLV8fsjgBMnTsSOHTtcln3xxReYOHGiQhERERERqZvPC8Camhrk5eUhLy8PgP02L3l5eSgsLARgP307b948Z/uMjAycPn0aTzzxBI4dO4Y33ngD7733Hh577DFfh05ERESkCT4vAPfv348xY8ZgzJgxAIAlS5ZgzJgxWLlyJQCgrKzMWQwCQFJSEv73f/8XX3zxBUaNGoVXXnkFf//733kLGCIiIqJO0kmSJCkdhNwsFgsiIyNhNpsRERGhdDhE5ENa3v+1nBsRta2r+7/fXwNIRERERN7FApCIiIh
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWANJREFUeJzt3Xt8E3W+P/5Xml6g9MalTdOLUC6C3FkEBCkW7IoIVazIrrsr4M/VrYsKgih8j4KXxSp4Kbi4uLvngJ4966pQUTwebyBYpaCgFSiX5VLsPaWUJrSFXpL5/RESSJu2aZvJZObzej4eWTaTT5L3eybz8d2Z+cxHJ0mSBCIiIiISRoDSARARERGRb7EAJCIiIhIMC0AiIiIiwbAAJCIiIhIMC0AiIiIiwbAAJCIiIhIMC0AiIiIiwbAAJCIiIhIMC0AiIiIiwbAAJCIiIhIMC0AiIiIiwbAAJCIiIhIMC0AiIiIiwQQqHYAv2Gw2lJaWIjw8HDqdTulwiMiHJEnChQsXEBcXh4AAbf3Ny76NSFxd7duEKABLS0uRmJiodBhEpKCioiIkJCQoHYZXsW8jos72bUIUgOHh4QCA2NgilJdHOJfHxQEvvQTcfrtSkfnGRx8BTz4JlJZeWSZC7qLmDYibu7u8Y2MtKC9PdPYDWiJ63yYqUfdvkcnRt+kkSZK8FJ/fslgsiIyMBGAGcKWTdJwx2bIFSE9XJDTZZWcDc+YAzbey1nMXNW9A3NxbyxuwAIiE2WxGRESEm3eql8h9m6hE3b9FJlffJnQBCNh3moQEoKAA0OsVCU82VivQrx9QXOz+da3mLmregLi5t523eAUgoN1tLTJR92+Rydm3aeuK6E6QJKCoCMjJUToS78vJab2jALSbu6h5A+Lm3l7eItLqthaZqPu3yOTs24QvAB3KypSOwPs8zUlruYuaNyBu7lrLx5u4brRD1P1bZHJuSxaAlxmNSkfgfZ7mpLXcRc0bEDd3reXjTVw32iHq/i0yObclrwHU8DUTjmsHSkrcXTyq3dxFzRsQN/e28+Y1gFra1iITdf8WmZx9m9BHAB2jprKytLmz6PXAunX2/9/8HrFazl3UvAFxc28rbxFpeVuLTNT9W2Ry9m1CFYBxca7PExK0P2Q+Pd2eY3y863Kt5y5q3oC4ubeWd/PnWiRi3yYqUfdvkcnVtwl1CriqyoyffopAWZn9vHpysjh/KVmt9tFEouUuat6AuLk3z3vUKAt69dL2KWCR+zZRibp/i8zbfZtQBaAW/wNARG3T8v6v5dyIqG1d3f+FOgVMRERERCwAiYiIiITDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMCwAiYiIiATDApCIiIhIMD4vAL/++mukpaUhLi4OOp0O27Zta7P9rl27oNPpWjzKy8t9EzARERGRxvi8AKytrcWoUaOwYcOGDr3v+PHjKCsrcz5iYmJkipCIiIhI2wJ9/YUzZszAjBkzOvy+mJgYREVFeT8gIiIiIsGo5hrA0aNHw2g04pe//CW+/fbbNtvW19fDYrG4PIiIiIjIzu8LQKPRiI0bN2Lr1q3YunUrEhMTkZKSgh9++KHV92RmZiIyMtL5SExM9GHERERERP5NJ0mSpNiX63T44IMPMHv27A6976abbsI111yD//7v/3b7en19Perr653PLRYLEhMTYTabERER0ZWQiUhlLBYLIiMjNbn/azk3ImpbV/d/n18D6A3jx4/HN9980+rrISEhCAkJ8WFEREREROrh96eA3cnLy4PRaFQ6DCIiIiJV8vkRwJqaGpw8edL5vKCgAHl5eejVqxeuueYarFixAiUlJXj77bcBAFlZWUhKSsKwYcNw6dIl/P3vf8fOnTvx+eef+zp0IiIiIk3weQG4f/9+TJ061fl8yZIlAID58+dj8+bNKCsrQ2FhofP1hoYGLF26FCUlJQgNDcXIkSPx5ZdfunwGEREREXlO0UEgvsILpYnEpeX9X8u5EVHburr/q/IaQCIiIiLqPBaARERERIJhAUhEREQkGBaARERERIJhAUhEREQkGBaARERERIJhAUhEREQkGBaARERERIJhAUhEREQkGBaARERERIJhAUhEREQkGBaARERERIIJVDoAIiKizrJagZwcoKwMMBqB5GRAr1c6KpITt7l3sAAkIiJVys4GFi0CiouvLEtIANatA9LTlYuL5MNt7j08BUxERKqTnQ3MmeNaCABASYl9eXa2MnGRfLjNvYsFIBERqYrVaj8KJEktX3MsW7zY3o60gdvc+1gAEhGRquTktDwKdDVJAoqK7O1IG7jNvY8FIBERqUpZmXfbkf/jNvc+FoBERKQqRqN325H/4zb3PhaARESkKsnJ9pGfOp3713U6IDHR3o60gdvc+1gAEhGRquj19tt+AC0LAsfzrCzeG05LuM29jwUgERGpTno6sGULEB/vujwhwb6c94TTHm5z7+KNoImISJXS04E77uCsECLhNvceFoBERKRaej2QkqJ0FORL3ObewVPARERERIJhAUhEJJOvv/4aaWlpiIuLg06nw7Zt21xelyQJK1euhNFoRPfu3ZGamooTJ04oEywRCYUFIBGRTGprazFq1Chs2LDB7etr1qzB+vXrsXHjRuzbtw89evTA9OnTcenSJR9HSkSi4TWAREQymTFjBmbMmOH2NUmSkJWVhaeeegp33HEHAODtt9+GwWDAtm3b8Otf/9qXoRKRYHgEkIhIAQUFBSgvL0dqaqpzWWRkJCZMmIDc3FwFIyMiEfAIIBGRAsrLywEABoPBZbnBYHC+1lx9fT3q6+udzy0Wi3wBEpGm8QggEZFKZGZmIjIy0vlITExUOiQiUikWgERECoiNjQUAmEwml+Umk8n5WnMrVqyA2Wx2PoqKimSPk4i0iQUgEZECkpKSEBsbix07djiXWSwW7Nu3DxMnTnT7npCQEERERLg8iIg6g9cAEhHJpKamBidPnnQ+LygoQF5eHnr16oVrrrkGixcvxp/+9CcMGjQISUlJePrppxEXF4fZs2crFzQRCYEFIBGRTPbv34+pU6c6ny9ZsgQAMH/+fGzevBlPPPEEamtr8eCDD6K6uhqTJ0/Gp59+im7duikVMhEJQidJkqR0EHKzWCyIjIyE2WzmKRMiwWh5/9dybkTUtq7u/7wGkIiIiEgwLACJiIiIBMMCkIiIiEgwLACJiIiIBMMCkIiIiEgwLACJiIiIBMMCkIiIiEgwLACJiIiIBMMCkIiIiEgwLACJiIiIBMMCkIiIiEgwLACJiIiIBMMCkIiIiEgwPi8Av/76a6SlpSEuLg46nQ7btm1r9z27du3CL37xC4SEhGDgwIHYvHmz7HESERERaZXPC8Da2lqMGjUKGzZs8Kh9QUEBZs6cialTpyIvLw+LFy/G73//e3z22WcyR0pERESkTYG+/sIZM2ZgxowZHrffuHEjkpKS8MorrwAArrvuOnzzzTd47bXXMH36dLnCJCIiItIsv78GMDc3F6mpqS7Lpk+fjtzc3FbfU19fD4vF4vIgIiIiIju/LwDLy8thMBhclhkMBlgsFly8eNHtezIzMxEZGel8JCYm+iJUIiIiIlXw+wKwM1asWAGz2ex8FBUVKR0SERERkd/w+TWAHRUbGwuTyeSyzGQyISIiAt27d3f7npCQEISEhPgiPCIiIiLV8fsjgBMnTsSOHTtcln3xxReYOHGiQhERERERqZvPC8Camhrk5eUhLy8PgP02L3l5eSgsLARgP307b948Z/uMjAycPn0aTzzxBI4dO4Y33ngD7733Hh577DFfh05ERESkCT4vAPfv348xY8ZgzJgxAIAlS5ZgzJgxWLlyJQCgrKzMWQwCQFJSEv73f/8XX3zxBUaNGoVXXnkFf//733kLGCIiIqJO0kmSJCkdhNwsFgsiIyNhNpsRERGhdDhE5EN
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_lattice(square_lattice)\n",
"plot_lattice(tilted_lattice)\n",
"plot_lattice(honeycomb_lattice)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "ef0a5d74-739f-4688-ad7f-fed91c39dcaa",
"metadata": {},
"outputs": [],
"source": [
"simple_cubic = Lattice([1,0,0], [0,1,0], [0,0,1])\n",
"graphite = Lattice([0.5,-0.5 * 3**(0.5),0], [0.5,0.5 * 3**(0.5),0], [0,0,1])\n",
"fcc = Lattice([0.5,0.5,-0.5], [-0.5,0.5,0.5], [0.5,-0.5,0.5])\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "364f3ddb-21d0-4586-8b3b-acad8ba20d9b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[6.28318531 0. 0. ]\n",
" [0. 6.28318531 0. ]\n",
" [0. 0. 6.28318531]]\n",
"[[ 6.28318531 -3.62759873 0. ]\n",
" [ 6.28318531 3.62759873 -0. ]\n",
" [-0. 0. 6.28318531]]\n",
"[[6.28318531 6.28318531 0. ]\n",
" [0. 6.28318531 6.28318531]\n",
" [6.28318531 0. 6.28318531]]\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "df0857086c404361b741af2dfc96f07d",
"version_major": 2,
"version_minor": 0
},
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnXd8JHX9/18z27Kb7GbTe7tcLte4O64nR1UUkaIo3QLY+Crli+XLzy7YULEgfL8i+vULoiICil0RkHZynAeX3nty6dndlO27M/P7Y/OZm91s39mSy+f5eKCXzWZmdnbmPa/PuzKCIAigUCgUCoVCoWwY2HQfAIVCoVAoFAoltVABSKFQKBQKhbLBoAKQQqFQKBQKZYNBBSCFQqFQKBTKBoMKQAqFQqFQKJQNBhWAFAqFQqFQKBsMKgApFAqFQqFQNhhUAFIoFAqFQqFsMKgApFAoFAqFQtlgUAFIoVAoMvDSSy+BYRi89NJL6T4UCoVCiQgVgBQKRXa6urpw9dVXY9OmTdDpdCgsLMR5552HP/3pT2vee8EFF4BhGDAMA5ZlYTAY0NjYiA984AN47rnnot7nTTfdhJycHFmOv7u7G3fffTdGR0fX/O5HP/oRHn30UVn2Q6FQKOlCme4DoFAoZx5jY2NYWVnBjTfeiPLyctjtdvz2t7/FFVdcgYcffhgf+9jH/N5fWVmJe++9FwBgs9kwODiI3/3ud/jlL3+Ja665Br/85S+hUqlSdvzd3d245557cMEFF6C2ttbvdz/60Y9QWFiIm266ye/18847Dw6HA2q1OmXHSaFQKPFCBSCFQpGdd77znXjnO9/p99ptt92Gffv24fvf//4aAZibm4v3v//9fq9961vfwh133IEf/ehHqK2txbe//e2kH3cisCyLrKysdB8GhUKhRAUNAVMolJSgUChQVVWFxcXFqN//wAMPYPv27fjv//5vLC0tJXwMY2Nj+MQnPoHGxkZotVoUFBTg6quv9gv1Pvroo7j66qsBABdeeKEYnn7ppZdQW1uLrq4uvPzyy+LrF1xwAYDQOYDHjx/HO9/5TuTl5SE7Oxu7du3CD3/4Q7/39Pb24qqrrkJ+fj6ysrKwf/9+/PGPf0z481IoFEooqAeQQqEkDZvNBofDgaWlJfzxj3/E3/72N1x77bVR/71CocD111+PL33pSzh69CguvfTShI7nxIkTeO2113DdddehsrISo6OjeOihh3DBBRegu7sbOp0O5513Hu644w488MAD+PznP49t27YBALZt24b7778ft99+O3JycvCFL3wBAFBSUhJyf8899xwuu+wylJWV4T//8z9RWlqKnp4e/PnPf8Z//ud/AvDlSx45cgQVFRX47Gc/i+zsbDz55JN497vfjd/+9re48sorE/rMFAqFEhSBQqFQksQtt9wiABAACCzLCldddZVgNpv93nP++ecLO3bsCLmNZ555RgAg/PCHPwy7rxtvvFHIzs4O+x673b7mtWPHjgkAhMcee0x87amnnhIACC+++OKa9+/YsUM4//zz17z+4osv+v2N1+sV6urqhJqaGsFisfi9l+d58d9vfetbhbPOOktwOp1+v29ubhYaGhrCfh4KhUKJFxoCplAoSePOO+/Ec889h5///Oe45JJLwHEc3G53TNsglb0rKysJH49WqxX/7fF4YDKZsHnzZhiNRpw8eTLh7UtpaWnByMgI7rzzThiNRr/fMQwDADCbzfjnP/+Ja665BisrK1hYWMDCwgJMJhMuvvhiDAwMYHJyUtbjolAoFICGgCkUShLZunUrtm7dCgD44Ac/iLe//e24/PLLcfz4cVEERcJqtQIA9Hp9wsfjcDhw77334pFHHsHk5CQEQRB/J0eOoZShoSEAwM6dO0O+Z3BwEIIg4Etf+hK+9KUvBX3P3NwcKioqZD02CoVCoQKQQqGkjKuuugq33HIL+vv70djYGNXfdHZ2AgA2b96c8P5vv/12PPLII7jzzjvR1NSE3NxcMAyD6667DjzPJ7z9WCH7/MxnPoOLL7446Hvk+NwUCoUSCBWAFAolZTgcDgDRe9s4jsPjjz8OnU6Hc845J+H9P/3007jxxhvxve99T3zN6XSuqUwO552M1nNZX18PwCdgL7rooqDv2bRpEwBApVKFfA+FQqEkA5oDSKFQZGdubm7Nax6PB4899hi0Wi22b98ecRscx+GOO+5AT08P7rjjDhgMhoSPS6FQ+IV9AeDBBx8Ex3F+r2VnZwNA0JY12dnZUbWy2bt3L+rq6nD//feveT85huLiYlxwwQV4+OGHMT09vWYb8/PzEfdDoVAo8UA9gBQKRXZuueUWLC8v47zzzkNFRQVmZmbwq1/9Cr29vfje9763ZmTb0tISfvnLXwIA7Ha7OAlkaGgI1113Hb72ta9FtV+Px4Ovf/3ra17Pz8/HJz7xCVx22WX4xS9+gdzcXGzfvh3Hjh3D888/j4KCAr/379mzBwqFAt/+9rextLQEjUaDt7zlLSguLsa+ffvw0EMP4etf/zo2b96M4uJivOUtb1mzT5Zl8dBDD+Hyyy/Hnj17cPPNN6OsrAy9vb3o6urCs88+CwD4n//5H5xzzjk466yz8NGPfhSbNm3C7Owsjh07hlOnTqGtrS2qz06hUCgxkd4iZAqFciby61//WrjooouEkpISQalUCnl5ecJFF10k/OEPf1jz3vPPP19sFQNAyMnJERoaGoT3v//9wj/+8Y+o93njjTf6bUf6X319vSAIgmCxWISbb75ZKCwsFHJycoSLL75Y6O3tFWpqaoQbb7zRb3s//elPhU2bNgkKhcKvvcvMzIxw6aWXCnq9XgAgtoQJbANDOHr0qPC2t71N0Ov1QnZ2trBr1y7hwQcf9HvP0NCQ8MEPflAoLS0VVCqVUFFRIVx22WXC008/HfXnp1AolFhgBCEgHkKhUCgUCoVCOaOhOYAUCoVCoVAoGwwqACkUCoVCoVA2GFQAUigUCoVCoWwwqACkUCgUCoVC2WBQAUihUCgUCoWywaACkEKhUCgUCmWDQQUghUKhUCgUygaDCkAKhUKhUCiUDQYVgBQKhUKhUCgbDCoAKRQKhUKhUDYYVABSKBQKhUKhbDCoAKRQKBQKhULZYFABSKFQKBQKhbLBoAKQQqFQKBQKZYNBBSCFQqFQKBTKBoMKQAqFQqFQKJQNBhWAFAqFQqFQKBsMKgApFAqFQqFQNhhUAFIoFAqFQqFsMKgApFAoFAqFQtlgUAFIoVAoFAqFssGgApBCoVAoFAplg0EFIIVCoVAoFMoGgwpACoVCoVAolA0GFYAUCoVCoVAoGwwqACkUCoVCoVA2GFQAUigUCoVCoWwwqACkUCgUCoVC2WBQAUihUCgUCoWywaACkEKhUCgUCmWDQQUghUKhUCgUygaDCkAKhUKhUCiUDQYVgBQKhUKhUCgbDCoAKRQKhUKhUDYYVABSKBQKhUKhbDCoAKRQKBQKhULZYFABSKFQKBQKhbLBoAKQQqFQKBQKZYNBBSCFQqFQKBTKBoMKQAqFQqFQKJQNBhWAFAqFQqFQKBsMKgApFAqFQqFQNhhUAFIoFAqFQqFsMKgApFAoFAqFQtlgUAFIoVAoFAqFssGgApBCoVAoFAplg0EFIIVCoVAoFMoGgwpACoVCoVAolA0GFYAUCoVCoVAoGwwqACkUCoVCoVA2GFQAUigUCoVCoWwwqACkUCgUCoVC2WBQAUihUCgUCoWywaACkEKhUCgUCmWDQQUghUKhUCgUygaDCkAKhUKhUCiUDQYVgBQKhUKhUCgbDCoAKRQKhUKhUDYYVABSKBQKhUKhbDCoAKRQKBQKhULZYFABSKFQKBQKhbLBoAKQQqFQKBQKZYNBBSCFQqFQKBTKBoMKQAqFQqFQKJQNBhWAFAqFQqFQKBsMKgApFAqFQqFQNhhUAFIoFAqFQqFsMKgApFAoFAqFQtlgUAFIoVAoFAqFssGgApBCoVAoFAplg0EFIIVCoVAoFMoGgwpACoVCoVAolA0GFYAUCoVCoVAoGwwqACkUCoVCoVA2GFQAUigUCoVCoWwwqACkUCg
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnXd8JHX9/18z27Kb7GbTe7tcLte4O64nR1UUkaIo3QLY+Crli+XLzy7YULEgfL8i+vULoiICil0RkHZynAeX3nty6dndlO27M/P7Y/OZm91s39mSy+f5eKCXzWZmdnbmPa/PuzKCIAigUCgUCoVCoWwY2HQfAIVCoVAoFAoltVABSKFQKBQKhbLBoAKQQqFQKBQKZYNBBSCFQqFQKBTKBoMKQAqFQqFQKJQNBhWAFAqFQqFQKBsMKgApFAqFQqFQNhhUAFIoFAqFQqFsMKgApFAoFAqFQtlgUAFIoVAoMvDSSy+BYRi89NJL6T4UCoVCiQgVgBQKRXa6urpw9dVXY9OmTdDpdCgsLMR5552HP/3pT2vee8EFF4BhGDAMA5ZlYTAY0NjYiA984AN47rnnot7nTTfdhJycHFmOv7u7G3fffTdGR0fX/O5HP/oRHn30UVn2Q6FQKOlCme4DoFAoZx5jY2NYWVnBjTfeiPLyctjtdvz2t7/FFVdcgYcffhgf+9jH/N5fWVmJe++9FwBgs9kwODiI3/3ud/jlL3+Ja665Br/85S+hUqlSdvzd3d245557cMEFF6C2ttbvdz/60Y9QWFiIm266ye/18847Dw6HA2q1OmXHSaFQKPFCBSCFQpGdd77znXjnO9/p99ptt92Gffv24fvf//4aAZibm4v3v//9fq9961vfwh133IEf/ehHqK2txbe//e2kH3cisCyLrKysdB8GhUKhRAUNAVMolJSgUChQVVWFxcXFqN//wAMPYPv27fjv//5vLC0tJXwMY2Nj+MQnPoHGxkZotVoUFBTg6quv9gv1Pvroo7j66qsBABdeeKEYnn7ppZdQW1uLrq4uvPzyy+LrF1xwAYDQOYDHjx/HO9/5TuTl5SE7Oxu7du3CD3/4Q7/39Pb24qqrrkJ+fj6ysrKwf/9+/PGPf0z481IoFEooqAeQQqEkDZvNBofDgaWlJfzxj3/E3/72N1x77bVR/71CocD111+PL33pSzh69CguvfTShI7nxIkTeO2113DdddehsrISo6OjeOihh3DBBRegu7sbOp0O5513Hu644w488MAD+PznP49t27YBALZt24b7778ft99+O3JycvCFL3wBAFBSUhJyf8899xwuu+wylJWV4T//8z9RWlqKnp4e/PnPf8Z//ud/AvDlSx45cgQVFRX47Gc/i+zsbDz55JN497vfjd/+9re48sorE/rMFAqFEhSBQqFQksQtt9wiABAACCzLCldddZVgNpv93nP++ecLO3bsCLmNZ555RgAg/PCHPwy7rxtvvFHIzs4O+x673b7mtWPHjgkAhMcee0x87amnnhIACC+++OKa9+/YsUM4//zz17z+4osv+v2N1+sV6urqhJqaGsFisfi9l+d58d9vfetbhbPOOktwOp1+v29ubhYaGhrCfh4KhUKJFxoCplAoSePOO+/Ec889h5///Oe45JJLwHEc3G53TNsglb0rKysJH49WqxX/7fF4YDKZsHnzZhiNRpw8eTLh7UtpaWnByMgI7rzzThiNRr/fMQwDADCbzfjnP/+Ja665BisrK1hYWMDCwgJMJhMuvvhiDAwMYHJyUtbjolAoFICGgCkUShLZunUrtm7dCgD44Ac/iLe//e24/PLLcfz4cVEERcJqtQIA9Hp9wsfjcDhw77334pFHHsHk5CQEQRB/J0eOoZShoSEAwM6dO0O+Z3BwEIIg4Etf+hK+9KUvBX3P3NwcKioqZD02CoVCoQKQQqGkjKuuugq33HIL+vv70djYGNXfdHZ2AgA2b96c8P5vv/12PPLII7jzzjvR1NSE3NxcMAyD6667DjzPJ7z9WCH7/MxnPoOLL7446Hvk+NwUCoUSCBWAFAolZTgcDgDRe9s4jsPjjz8OnU6Hc845J+H9P/3007jxxhvxve99T3zN6XSuqUwO552M1nNZX18PwCdgL7rooqDv2bRpEwBApVKFfA+FQqEkA5oDSKFQZGdubm7Nax6PB4899hi0Wi22b98ecRscx+GOO+5AT08P7rjjDhgMhoSPS6FQ+IV9AeDBBx8Ex3F+r2VnZwNA0JY12dnZUbWy2bt3L+rq6nD//feveT85huLiYlxwwQV4+OGHMT09vWYb8/PzEfdDoVAo8UA9gBQKRXZuueUWLC8v47zzzkNFRQVmZmbwq1/9Cr29vfje9763ZmTb0tISfvnLXwIA7Ha7OAlkaGgI1113Hb72ta9FtV+Px4Ovf/3ra17Pz8/HJz7xCVx22WX4xS9+gdzcXGzfvh3Hjh3D888/j4KCAr/379mzBwqFAt/+9rextLQEjUaDt7zlLSguLsa+ffvw0EMP4etf/zo2b96M4uJivOUtb1mzT5Zl8dBDD+Hyyy/Hnj17cPPNN6OsrAy9vb3o6urCs88+CwD4n//5H5xzzjk466yz8NGPfhSbNm3C7Owsjh07hlOnTqGtrS2qz06hUCgxkd4iZAqFciby61//WrjooouEkpISQalUCnl5ecJFF10k/OEPf1jz3vPPP19sFQNAyMnJERoaGoT3v//9wj/+8Y+o93njjTf6bUf6X319vSAIgmCxWISbb75ZKCwsFHJycoSLL75Y6O3tFWpqaoQbb7zRb3s//elPhU2bNgkKhcKvvcvMzIxw6aWXCnq9XgAgtoQJbANDOHr0qPC2t71N0Ov1QnZ2trBr1y7hwQcf9HvP0NCQ8MEPflAoLS0VVCqVUFFRIVx22WXC008/HfXnp1AolFhgBCEgHkKhUCgUCoVCOaOhOYAUCoVCoVAoGwwqACkUCoVCoVA2GFQAUigUCoVCoWwwqACkUCgUCoVC2WBQAUihUCgUCoWywaACkEKhUCgUCmWDQQUghUKhUCgUygaDCkAKhUKhUCiUDQYVgBQKhUKhUCgbDCoAKRQKhUKhUDYYVABSKBQKhUKhbDCoAKRQKBQKhULZYFABSKFQKBQKhbLBoAKQQqFQKBQKZYNBBSCFQqFQKBTKBoMKQAqFQqFQKJQNBhWAFAqFQqFQKBsMKgApFAqFQqFQNhhUAFIoFAqFQqFsMKgApFAoFAqFQtlgUAFIoVAoFAqFssGgApBCoVAoFAplg0EFIIVCoVAoFMoGgwpACoVCoVAolA0GFYAUCoVCoVAoGwwqACkUCoVCoVA2GFQAUigUCoVCoWwwqACkUCgUCoVC2WBQAUihUCgUCoWywaACkEKhUCgUCmWDQQUghUKhUCgUygaDCkAKhUKhUCiUDQYVgBQKhUKhUCgbDCoAKRQKhUKhUDYYVABSKBQKhUKhbDCoAKRQKBQKhULZYFABSKFQKBQKhbLBoAKQQqFQKBQKZYNBBSCFQqFQKBTKBoMKQAqFQqFQKJQNBhWAFAqFQqFQKBsMKgApFAqFQqFQNhhUAFIoFAqFQqFsMKgApFAoFAqFQtlgUAFIoVAoFAqFssGgApBCoVAoFAplg0EFIIVCoVAoFMoGgwpACoVCoVAolA0GFYAUCoVCoVAoGwwqACkUCoVCoVA2GFQAUigUCoVCoWwwqACkUCgUCoVC2WBQAUihUCgUCoWywaACkEKhUCgUCmWDQQUghUKhUCgUygaDCkAKhUKhUCiUDQYVgBQKhUKhUCgbDCoAKRQKhUKhUDYYVABSKBQKhUKhbDCoAKRQKBQKhULZYFABSKFQKBQKhbLBoAKQQqFQKBQKZYNBBSCFQqFQKBTKBoMKQAqFQqFQKJQNBhWAFAqFQqFQKBsMKgApFAqFQqFQNhhUAFIoFAqFQqFsMKgApFAoFAqFQtlgUAFIoVAoFAqFssGgApBCoVAoFAplg0EFIIVCoVAoFMoGgwpACoVCoVAolA0GFYAUCoVCoVAoGww
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "2efe0ed3548944a1ad811b2f1637c40a",
"version_major": 2,
"version_minor": 0
},
"image/png": "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
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,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
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1921a3685ea1496ab3293f7188e4b276",
"version_major": 2,
"version_minor": 0
},
"image/png": "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
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,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
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_lattice(simple_cubic);\n",
"plot_lattice(graphite);\n",
"plot_lattice(fcc);"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "c6512444-6c86-4e31-bc6a-2c8b1e00c28d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 0.92, '3D Lettuce')"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "16a2ced17e174aa692881e37979f49e1",
"version_major": 2,
"version_minor": 0
},
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs/Xm4ZVdd54+/1p7POXeuManMlZAZMkBCVZjEQEQaBB5tQNEgrQ3aaNu09lcRBKUfwAck2g2KNvpDAqjQNjZ2AEEIKoQkDKkxlUpqnqc7nmmPa/3+WGfvc84dKvfWHepW3fWCelL3DHuvvfeps9/3M7w/QimlMBgMBoPBYDCsGKzzvQCDwWAwGAwGw9JiBKDBYDAYDAbDCsMIQIPBYDAYDIYVhhGABoPBYDAYDCsMIwANBoPBYDAYVhhGABoMBoPBYDCsMIwANBgMBoPBYFhhGAFoMBgMBoPBsMIwAtBgMBgMBoNhhWEEoMFgMBgMBsMKwwhAg8FgMBgMhhWGEYAGg8FgMBgMKwwjAA0Gg8FgMBhWGEYAGgwGg8FgMKwwjAA0GAwGg8FgWGEYAWgwGAwGg8GwwjAC0GAwGAwGg2GFYQSgwWAwGAwGwwrDCECDwWAwGAyGFYYRgAaDwWAwGAwrDCMADQaDwWAwGFYYRgAaDAaDwWAwrDCMADQYDAaDwWBYYRgBaDAYDAaDwbDCMALQYDAYDAaDYYVhBKDBYDAYDAbDCsMIQIPBYDAYDIYVhhGABoPBYDAYDCsMIwANBoPBYDAYVhhGABoMBoPBYDCsMIwANBgMBoPBYFhhGAFoMBgMBoPBsMIwAtBgMBgMBoNhhWEEoMFgMBgMBsMKwwhAg8FgMBgMhhWGEYAGg2HJ2LlzJz/zMz/DNddcQ7lcZvXq1bzkJS/hH//xH6e89mUvexlCCIQQWJZFX18f119/PT//8z/PN77xjVnv861vfSs9PT0Lsv5HHnmE97///YyNjU157oMf/CD/8A//sCD7MRgMhsXGCECDwbBkHDx4kGq1yv3338+f/Mmf8N73vheA1772tfzFX/zFlNdfdtllPPjgg3zmM5/hIx/5CK997Wt55JFHeOUrX8kb3/hGkiRZ0vU/8sgj/P7v/74RgAaD4YLHOd8LMBgMK4ef/Mmf5Cd/8ie7HnvnO9/JnXfeycc+9jH+43/8j13P9ff385a3vKXrsQ9/+MP8+q//On/6p3/KVVddxR/+4R8u+roNBoPhYsNEAA0Gw3nFtm0uv/zyaaNqM73+f/yP/8FNN93Exz/+ccbHxxdkHY899hg/8RM/QX9/P+VymZe+9KV897vfLZ5///vfz2/91m8BcPXVVxfp6QMHDiCEoF6v89d//dfF429961sBnYK+6qqrpuzv/e9/P0KIKY9/9rOf5a677qJcLjM4OMhLXvISvv71r3e95qtf/SovfvGLqVQq9Pb28upXv5qdO3cuyHkwGAwrAyMADQbDklOv1zlz5gx79+7lgQce4Ktf/So//uM/Puv327bNm9/8ZhqNBt/5znfmvZ5vfetbvOQlL2FiYoL3ve99fPCDH2RsbIyXv/zlPP744wC84Q1v4M1vfjMADzzwAA8++CAPPvgga9as4cEHH8T3fV784hcXj7/97W+f8zp+//d/n5//+Z/HdV3+4A/+gN///d/n8ssv51vf+lbxmgcffJBXv/rV9PT08Id/+Ie8973v5cknn+RFL3oRBw4cmPe5MBgMKwRlMBgMS8zb3/52BShAWZalfvqnf1qNjIx0vealL32puvnmm2fcxpe+9CUFqD/5kz85677uv/9+ValUZnxeSqmuu+46dd999ykpZfF4o9FQV199tXrFK15RPPaRj3xEAWr//v1TtlOpVNT9998/7f6vvPLKKY+/733vU51fwc8884yyLEu9/vWvV1mWTVmjUkpVq1U1MDCgfvmXf7nr+RMnTqj+/v4pjxsMBsNMmBpAg8Gw5PzGb/wGP/3TP82xY8f4whe+QJZlxHE8p23knb3VanVea9myZQvPPPMM73nPexgeHu567sd//Md58MEHkVJiWYubMPmHf/gHpJT83u/93pR95anib3zjG4yNjfHmN7+ZM2fOFM/bts3dd9/Nww8/vKhrNBgMFw9GABoMhiXnhhtu4IYbbgDgF37hF3jlK1/Ja17zGh577LFp6+Kmo1arAdDb2zuvtTzzzDMA3H///TO+Znx8nMHBwXnt59nYu3cvlmVx0003zfiafK0vf/nLp32+r69vUdZmMBguPowANBgM552f/umf5u1vfztPP/00119//azes2PHDgCuvfbaee1bSgnARz7yEW677bZpXzMfH8GZBG2WZXPeVr7WBx98kPXr10953nHMV7rBYJgd5tvCYDCcd5rNJsCsO3qzLOPzn/885XKZF73oRfPa98aNGwEdPbv33nvP+tqzRSdnem5wcHDaDueDBw9OWYeUkieffHJGIZqvde3atc+6VoPBYDgbpgvYYDAsGadOnZryWJIkfOYzn6FUKp01/ZmTZRm//uu/zq5du/j1X//1eac977zzTjZu3MhHP/rRIq3cyenTp4u/VyoVgGkFXaVSmfbxjRs3Mj4+zrZt24rHjh8/zpe+9KWu173uda/Dsiz+4A/+oIj05SilALjvvvvo6+vjgx/84LQm2J1rNRgMhrNhIoAGg2HJePvb387ExAQveclL2LBhAydOnOBzn/scTz31FH/0R380JdU6Pj7OZz/7WQAajQZ79uzh//yf/8PevXt505vexAc+8IFZ7TdJEv77f//vUx4fGhriV3/1V/nUpz7Fq171Km6++WZ+8Rd/kQ0bNnD06FEefvhh+vr6ilF1d955JwC/+7u/y5ve9CZc1+U1r3kNlUqFO++8k3/+53/mYx/7GJdeeilXX301d999N29605v4//6//4/Xv/71/Pqv/zqNRoM/+7M/4znPeQ4/+tGPirVce+21/O7v/i4f+MAHePGLX8wb3vAGfN/n+9//Ppdeeikf+tCH6Ovr48/+7M/4+Z//ee644w7e9KY3sWbNGg4dOsRDDz3EPffcw8c//vFzujYGg2GFcb7bkA0Gw8rhb/7mb9S9996r1q1bpxzHUYODg+ree+9V//f//t8pr33pS19aWMUAqqenR1133XXqLW95i/r6178+633ef//9Xdvp/LNx48bidU888YR6wxveoFatWqV831dXXnml+vf//t+rb37zm13b+8AHPqA2bNigLMvqsoR56qmn1Ete8hJVKpUU0GUJ8/Wvf13dcsstyvM8df3116vPfvazU2xgcv7qr/5K3X777cr3fTU4OKhe+tKXqm984xtdr3n44YfVfffdp/r7+1UQBGrjxo3qrW99q/rBD34w6/NiMBhWNkKpVm7BYDAYDAaDwbAiMDWABoPBYDAYDCsMIwANBoPBYDAYVhhGABoMBoPBYDCsMIwANBgMBoPBYFhhGAFoMBgMBoPBsMIwAtBgMBgMBoNhhWEEoMFgMBgMBsMKwwhAg8FgMBgMhhWGEYAGg8FgMBgMKwwjAA0Gg8FgMBhWGEYAGgwGg8FgMKwwjAA0GAwGg8FgWGEYAWgwGAwGg8GwwjAC0GAwGAwGg2GFYQSgwWAwGAwGwwrDCECDwWAwGAyGFYYRgAaDwWAwGAwrDCMADQaDwWAwGFYYRgAaDAaDwWAwrDCMADQYDAaDwWBYYRgBaDAYDAaDwbDCMALQYDAYDAaDYYVhBKDBYFhWKKVI0xQp5fleisFgMFy0OOd7AQaDwZAjpSSOY5rNJkIIHMfBcRxs28a2bSzL/M5qMBgMC4FQSqnzvQiDwbCyyaN+aZqilCKO4+JxpRRCCCMIDQaDYQExAtBgMJxXpJSkaUqWZcVjcRx3iTulFFJKIwgNBoNhgTAC0GAwnBdyUZckSZeoy9PAZxNzRhAaDAbD/DAC0GAwLDlKKZIkKaJ+uYADZiUAp9ueEYQGg8Ewe4wANBgMS0oe9cuyDMuyCuHX+fxcBeBkjCA0GAyGs2MEoMFgWBKUUmRZVli8TCf+YGEE4HT7niwI88aTvr4+IwgNBsOKw9j
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs/Xm4ZVdd54+/1p7POXeuManMlZAZMkBCVZjEQEQaBB5tQNEgrQ3aaNu09lcRBKUfwAck2g2KNvpDAqjQNjZ2AEEIKoQkDKkxlUpqnqc7nmmPa/3+WGfvc84dKvfWHepW3fWCelL3DHuvvfeps9/3M7w/QimlMBgMBoPBYDCsGKzzvQCDwWAwGAwGw9JiBKDBYDAYDAbDCsMIQIPBYDAYDIYVhhGABoPBYDAYDCsMIwANBoPBYDAYVhhGABoMBoPBYDCsMIwANBgMBoPBYFhhGAFoMBgMBoPBsMIwAtBgMBgMBoNhhWEEoMFgMBgMBsMKwwhAg8FgMBgMhhWGEYAGg8FgMBgMKwwjAA0Gg8FgMBhWGEYAGgwGg8FgMKwwjAA0GAwGg8FgWGEYAWgwGAwGg8GwwjAC0GAwGAwGg2GFYQSgwWAwGAwGwwrDCECDwWAwGAyGFYYRgAaDwWAwGAwrDCMADQaDwWAwGFYYRgAaDAaDwWAwrDCMADQYDAaDwWBYYRgBaDAYDAaDwbDCMALQYDAYDAaDYYVhBKDBYDAYDAbDCsMIQIPBYDAYDIYVhhGABoPBYDAYDCsMIwANBoPBYDAYVhhGABoMBoPBYDCsMIwANBgMBoPBYFhhGAFoMBgMBoPBsMIwAtBgMBgMBoNhhWEEoMFgMBgMBsMKwwhAg8FgMBgMhhWGEYAGg2HJ2LlzJz/zMz/DNddcQ7lcZvXq1bzkJS/hH//xH6e89mUvexlCCIQQWJZFX18f119/PT//8z/PN77xjVnv861vfSs9PT0Lsv5HHnmE97///YyNjU157oMf/CD/8A//sCD7MRgMhsXGCECDwbBkHDx4kGq1yv3338+f/Mmf8N73vheA1772tfzFX/zFlNdfdtllPPjgg3zmM5/hIx/5CK997Wt55JFHeOUrX8kb3/hGkiRZ0vU/8sgj/P7v/74RgAaD4YLHOd8LMBgMK4ef/Mmf5Cd/8ie7HnvnO9/JnXfeycc+9jH+43/8j13P9ff385a3vKXrsQ9/+MP8+q//On/6p3/KVVddxR/+4R8u+roNBoPhYsNEAA0Gw3nFtm0uv/zyaaNqM73+f/yP/8FNN93Exz/+ccbHxxdkHY899hg/8RM/QX9/P+VymZe+9KV897vfLZ5///vfz2/91m8BcPXVVxfp6QMHDiCEoF6v89d//dfF429961sBnYK+6qqrpuzv/e9/P0KIKY9/9rOf5a677qJcLjM4OMhLXvISvv71r3e95qtf/SovfvGLqVQq9Pb28upXv5qdO3cuyHkwGAwrAyMADQbDklOv1zlz5gx79+7lgQce4Ktf/So//uM/Puv327bNm9/8ZhqNBt/5znfmvZ5vfetbvOQlL2FiYoL3ve99fPCDH2RsbIyXv/zlPP744wC84Q1v4M1vfjMADzzwAA8++CAPPvgga9as4cEHH8T3fV784hcXj7/97W+f8zp+//d/n5//+Z/HdV3+4A/+gN///d/n8ssv51vf+lbxmgcffJBXv/rV9PT08Id/+Ie8973v5cknn+RFL3oRBw4cmPe5MBgMKwRlMBgMS8zb3/52BShAWZalfvqnf1qNjIx0vealL32puvnmm2fcxpe+9CUFqD/5kz85677uv/9+ValUZnxeSqmuu+46dd999ykpZfF4o9FQV199tXrFK15RPPaRj3xEAWr//v1TtlOpVNT9998/7f6vvPLKKY+/733vU51fwc8884yyLEu9/vWvV1mWTVmjUkpVq1U1MDCgfvmXf7nr+RMnTqj+/v4pjxsMBsNMmBpAg8Gw5PzGb/wGP/3TP82xY8f4whe+QJZlxHE8p23knb3VanVea9myZQvPPPMM73nPexgeHu567sd//Md58MEHkVJiWYubMPmHf/gHpJT83u/93pR95anib3zjG4yNjfHmN7+ZM2fOFM/bts3dd9/Nww8/vKhrNBgMFw9GABoMhiXnhhtu4IYbbgDgF37hF3jlK1/Ja17zGh577LFp6+Kmo1arAdDb2zuvtTzzzDMA3H///TO+Znx8nMHBwXnt59nYu3cvlmVx0003zfiafK0vf/nLp32+r69vUdZmMBguPowANBgM552f/umf5u1vfztPP/00119//azes2PHDgCuvfbaee1bSgnARz7yEW677bZpXzMfH8GZBG2WZXPeVr7WBx98kPXr10953nHMV7rBYJgd5tvCYDCcd5rNJsCsO3qzLOPzn/885XKZF73oRfPa98aNGwEdPbv33nvP+tqzRSdnem5wcHDaDueDBw9OWYeUkieffHJGIZqvde3atc+6VoPBYDgbpgvYYDAsGadOnZryWJIkfOYzn6FUKp01/ZmTZRm//uu/zq5du/j1X//1eac977zzTjZu3MhHP/rRIq3cyenTp4u/VyoVgGkFXaVSmfbxjRs3Mj4+zrZt24rHjh8/zpe+9KWu173uda/Dsiz+4A/+oIj05SilALjvvvvo6+vjgx/84LQm2J1rNRgMhrNhIoAGg2HJePvb387ExAQveclL2LBhAydOnOBzn/scTz31FH/0R380JdU6Pj7OZz/7WQAajQZ79uzh//yf/8PevXt505vexAc+8IFZ7TdJEv77f//vUx4fGhriV3/1V/nUpz7Fq171Km6++WZ+8Rd/kQ0bNnD06FEefvhh+vr6ilF1d955JwC/+7u/y5ve9CZc1+U1r3kNlUqFO++8k3/+53/mYx/7GJdeeilXX301d999N29605v4//6//4/Xv/71/Pqv/zqNRoM/+7M/4znPeQ4/+tGPirVce+21/O7v/i4f+MAHePGLX8wb3vAGfN/n+9//Ppdeeikf+tCH6Ovr48/+7M/4+Z//ee644w7e9KY3sWbNGg4dOsRDDz3EPffcw8c//vFzujYGg2GFcb7bkA0Gw8rhb/7mb9S9996r1q1bpxzHUYODg+ree+9V//f//t8pr33pS19aWMUAqqenR1133XXqLW95i/r6178+633ef//9Xdvp/LNx48bidU888YR6wxveoFatWqV831dXXnml+vf//t+rb37zm13b+8AHPqA2bNigLMvqsoR56qmn1Ete8hJVKpUU0GUJ8/Wvf13dcsstyvM8df3116vPfvazU2xgcv7qr/5K3X777cr3fTU4OKhe+tKXqm984xtdr3n44YfVfffdp/r7+1UQBGrjxo3qrW99q/rBD34w6/NiMBhWNkKpVm7BYDAYDAaDwbAiMDWABoPBYDAYDCsMIwANBoPBYDAYVhhGABoMBoPBYDCsMIwANBgMBoPBYFhhGAFoMBgMBoPBsMIwAtBgMBgMBoNhhWEEoMFgMBgMBsMKwwhAg8FgMBgMhhWGEYAGg8FgMBgMKwwjAA0Gg8FgMBhWGEYAGgwGg8FgMKwwjAA0GAwGg8FgWGEYAWgwGAwGg8GwwjAC0GAwGAwGg2GFYQSgwWAwGAwGwwrDCECDwWAwGAyGFYYRgAaDwWAwGAwrDCMADQaDwWAwGFYYRgAaDAaDwWAwrDCMADQYDAaDwWBYYRgBaDAYDAaDwbDCMALQYDAYDAaDYYVhBKDBYFhWKKVI0xQp5fleisFgMFy0OOd7AQaDwZAjpSSOY5rNJkIIHMfBcRxs28a2bSzL/M5qMBgMC4FQSqnzvQiDwbCyyaN+aZqilCKO4+JxpRRCCCMIDQaDYQExAtBgMJxXpJSkaUqWZcVjcRx3iTulFFJKIwgNBoNhgTAC0GAwnBdyUZckSZeoy9PAZxNzRhAaDAbD/DAC0GAwLDlKKZIkKaJ+uYADZiUAp9ueEYQGg8Ewe4wANBgMS0oe9cuyDMuyCuHX+fxcBeBkjCA0GAyGs2MEoMFgWBKUUmRZVli
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Function to create the lettuce shape\n",
"def lettuce_leaf(u, v):\n",
" r = 1 + 0.3 * np.sin(6 * u) * np.sin(6 * v)\n",
" x = r * np.cos(u) * np.sin(v)\n",
" y = r * np.sin(u) * np.sin(v)\n",
" z = r * np.cos(v)\n",
" return x, y, z\n",
"\n",
"# Function to create the root\n",
"def root(t):\n",
" x = 0.1 * np.sin(10 * t)\n",
" y = 0.1 * np.cos(10 * t)\n",
" z = -t\n",
" return x, y, z\n",
"\n",
"# Generate the lettuce surface\n",
"u = np.linspace(0, 2 * np.pi, 100)\n",
"v = np.linspace(0, np.pi, 100)\n",
"u, v = np.meshgrid(u, v)\n",
"x, y, z = lettuce_leaf(u, v)\n",
"\n",
"# Generate the root\n",
"t = np.linspace(0, 1, 100)\n",
"x_root, y_root, z_root = root(t)\n",
"\n",
"# Plotting\n",
"fig = plt.figure()\n",
"ax = fig.add_subplot(111, projection='3d')\n",
"\n",
"# Plot the lettuce\n",
"ax.plot_surface(x, y, z, color='green', alpha=0.7)\n",
"\n",
"# Plot the root\n",
"ax.plot(x_root, y_root, z_root, color='brown', linewidth=2)\n",
"\n",
"# Adjust plot\n",
"ax.set_box_aspect([1,1,1])\n",
"ax.set_xlabel('X')\n",
"ax.set_ylabel('Y')\n",
"ax.set_zlabel('Z')\n",
"ax.set_title('3D Lettuce')\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2dce1256-7afa-4e86-8aff-5db7b13b4d4d",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "conda",
"language": "python",
"name": "conda"
},
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}