modelowanie_geometryczne/parametric_curves_1.ipynb

1316 lines
216 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "1b1c1dc2",
"metadata": {},
"source": [
"\\textbf{Copyright:} Wojciech Kowalewski WMiI UAM\n",
"\n",
"\\textbf{Kurs}: Modelowanie geometryczne 2021/22\n",
"\n",
"---\n",
"---\n",
"# Modelowanie geometryczne\n",
"---\n",
"---\n",
"# I. Modelowanie parametryczne"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "e2b5e255",
"metadata": {
"deletable": false,
"editable": false
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import math\n",
"import ipywidgets as widgets"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "b306a0ae",
"metadata": {
"deletable": false,
"editable": false
},
"outputs": [],
"source": [
"def dot(a,b):\n",
" \"\"\"\n",
" a,b: wektory\n",
" \"\"\"\n",
" assert len(a)==len(b), \"Nierówne długosci wektrów\"\n",
" res = 0\n",
" for i in range(len(a)):\n",
" res += a[i]*b[i]\n",
" return res"
]
},
{
"cell_type": "markdown",
"id": "5ed3ebee",
"metadata": {},
"source": [
"## 1. Krzywe Hermite'a stopnia 3\n",
"======================================"
]
},
{
"cell_type": "markdown",
"id": "e7502ecf",
"metadata": {},
"source": [
"### 1.1. Macierz funkcji bazowych"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "9a0525f7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[[2.0, -3.0, 0.0, 1.0],\n",
" [-2.0, 3.0, 0.0, 0.0],\n",
" [1.0, -2.0, 1.0, 0.0],\n",
" [1.0, -1.0, 0.0, 0.0]]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hermite_basis_matrix_2D = [\n",
" [2.0,-3.0,0.0,1.0],\n",
" [-2.0,3.0,0.0,0.0],\n",
" [1.0,-2.0,1.0,0.0],\n",
" [1.0,-1.0,0.0,0.0]\n",
"]\n",
"hermite_basis_matrix_2D"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "27713848",
"metadata": {},
"outputs": [],
"source": [
"hermite_basis_function_2D = []\n",
"hermite_basis_function_2D.append(\n",
" lambda t: hermite_basis_matrix_2D[0][0]*t**3 + hermite_basis_matrix_2D[0][1]*t**2 + hermite_basis_matrix_2D[0][2]*t + hermite_basis_matrix_2D[0][3],\n",
") \n",
"hermite_basis_function_2D.append(\n",
"lambda t: hermite_basis_matrix_2D[1][0]*t**3 + hermite_basis_matrix_2D[1][1]*t**2 + hermite_basis_matrix_2D[1][2]*t + hermite_basis_matrix_2D[1][3]\n",
")\n",
"hermite_basis_function_2D.append(\n",
" lambda t: hermite_basis_matrix_2D[2][0]*t**3 + hermite_basis_matrix_2D[2][1]*t**2 + hermite_basis_matrix_2D[2][2]*t + hermite_basis_matrix_2D[2][3]\n",
")\n",
"hermite_basis_function_2D.append(\n",
"lambda t: hermite_basis_matrix_2D[3][0]*t**3 + hermite_basis_matrix_2D[3][1]*t**2 + hermite_basis_matrix_2D[3][2]*t + hermite_basis_matrix_2D[3][3]\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "19dd701d",
"metadata": {},
"source": [
"### 1.2. Wykresy funkcji bazowych"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "7b1508e0",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"t = np.arange(0.0, 1.01, 0.01)\n",
"\n",
"\n",
"fig, ax = plt.subplots()\n",
"#ustawienie rozmiaru obrazka na 10x10 cali\n",
"fig.set_size_inches(25.4/2.54, 25.4/2.54, forward=True)\n",
"plt.title(\"Funkcje bazowe Hermite\")\n",
"\n",
"for n in range(4):\n",
" ax.plot(t,hermite_basis_function_2D[n](t) , label=\"h_\"+str(n)+\"(t)\")\n",
"\n",
"leg = ax.legend(loc='upper center', ncol=2, shadow='True')\n",
"leg.get_frame().set_alpha(0.5)\n",
"plt.grid();\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "c411dee2",
"metadata": {},
"outputs": [],
"source": [
"def find_ext(x,y, lp, lk):\n",
" t = np.arange(lp, lk, 0.001)\n",
" xmin = xmax = x(lp)\n",
" ymin = ymax = y(lp)\n",
" for p in t:\n",
" if x(p) < xmin:\n",
" xmin = x(p)\n",
" else:\n",
" if x(p) > xmax:\n",
" xmax = x(p)\n",
" if y(p) < ymin:\n",
" ymin = y(p)\n",
" else:\n",
" if y(p) > ymax:\n",
" ymax = y(p)\n",
" return [[xmin,xmax],[ymin,ymax]]"
]
},
{
"cell_type": "markdown",
"id": "c446ac17",
"metadata": {},
"source": [
"### 1.3. Przykłady\n",
"\n",
"#### 1.3.1. Przykład 1"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "e1a529b0",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"t = np.arange(0.0, 1.01, 0.01)\n",
"\n",
"Pp = [0.0,0.0]\n",
"Pk = [1.0,0.0]\n",
"Tp = [4.0,4.0]\n",
"Tk = [4.0,-4.0]\n",
"\n",
"lenTp = math.sqrt(Tp[0]**2+Tp[1]**2)/2.54\n",
"lenTk = math.sqrt(Tk[0]**2+Tk[1]**2)/2.54 \n",
"\n",
"\n",
"fig, ax = plt.subplots()\n",
"#ustawienie rozmiaru obrazka na 10x10 cali\n",
"fig.set_size_inches(25.4/2.54, 25.4/2.54, forward=True)\n",
"plt.title(\"Segment krzywej Hermite'a\")\n",
"\n",
"\n",
"def X(t):\n",
" return Pp[0]*hermite_basis_function_2D[0](t) + Pk[0]*hermite_basis_function_2D[1](t) + Tp[0]*hermite_basis_function_2D[2](t) + Tk[0]*hermite_basis_function_2D[3](t)\n",
"\n",
"def Y(t):\n",
" return Pp[1]*hermite_basis_function_2D[0](t) + Pk[1]*hermite_basis_function_2D[1](t) + Tp[1]*hermite_basis_function_2D[2](t) + Tk[1]*hermite_basis_function_2D[3](t)\n",
"\n",
"\n",
"extr = find_ext(X,Y,0.0,1.01)\n",
"\n",
"borderXp = min(extr[0][0],Pp[0]+Tp[0],Pk[0]+Tk[0])-0.1\n",
"borderXk = max(extr[0][1],Pp[0]+Tp[0],Pk[0]+Tk[0])+0.1\n",
"\n",
"borderYp = min(extr[1][0],Pp[1]+Tp[1],Pk[1]+Tk[1])-0.1\n",
"borderYk = max(extr[1][1],Pp[1]+Tp[1],Pk[1]+Tk[1])+0.1\n",
"\n",
"\n",
"plt.xlim(borderXp, borderXk)\n",
"plt.ylim(borderYp, borderYk)\n",
"\n",
"x = X(t)\n",
"y = Y(t)\n",
"\n",
"ax.set_aspect('equal')\n",
"\n",
"ax.plot(x,y, color='red')\n",
"\n",
"ax.plot(Pp[0], Pp[1], color='blue', marker=\".\", markersize=20)\n",
"ax.plot(Pk[0], Pk[1], color='blue', marker=\".\", markersize=20)\n",
"\n",
"plt.quiver(Pp[0],Pp[1], Tp[0] , Tp[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
"plt.quiver(Pk[0],Pk[1], Tk[0] , Tk[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
"\n",
"\n",
"#eg = ax.legend(loc='upper center', ncol=2, shadow='True')\n",
"leg.get_frame().set_alpha(0.5)\n",
"plt.grid();\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "0b4e7777",
"metadata": {},
"source": [
"#### 1.3.2. Przykład 2"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "a91edba9",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"t = np.arange(0.0, 1.01, 0.01)\n",
"\n",
"Pp = [1.0,0.5]\n",
"Pk = [0.0,-0.5]\n",
"Tp = [1.0,1.0]\n",
"Tk = [1.0,-1.0]\n",
"\n",
"lenTp = math.sqrt(Tp[0]**2+Tp[1]**2)/2.54\n",
"lenTk = math.sqrt(Tk[0]**2+Tk[1]**2)/2.54 \n",
"\n",
"fig, ax = plt.subplots()\n",
"#ustawienie rozmiaru obrazka na 10x10 cali\n",
"fig.set_size_inches(25.4/2.54, 25.4/2.54, forward=True)\n",
"plt.title(\"Segment krzywej Hermite'a\")\n",
"\n",
"\n",
"def X(t):\n",
" return Pp[0]*hermite_basis_function_2D[0](t) + Pk[0]*hermite_basis_function_2D[1](t) + Tp[0]*hermite_basis_function_2D[2](t) + Tk[0]*hermite_basis_function_2D[3](t)\n",
"\n",
"def Y(t):\n",
" return Pp[1]*hermite_basis_function_2D[0](t) + Pk[1]*hermite_basis_function_2D[1](t) + Tp[1]*hermite_basis_function_2D[2](t) + Tk[1]*hermite_basis_function_2D[3](t)\n",
"\n",
"\n",
"extr = find_ext(X,Y,0.0,1.01)\n",
"\n",
"borderXp = min(extr[0][0],Pp[0]+Tp[0],Pk[0]+Tk[0])-0.1\n",
"borderXk = max(extr[0][1],Pp[0]+Tp[0],Pk[0]+Tk[0])+0.1\n",
"\n",
"borderYp = min(extr[1][0],Pp[1]+Tp[1],Pk[1]+Tk[1])-0.1\n",
"borderYk = max(extr[1][1],Pp[1]+Tp[1],Pk[1]+Tk[1])+0.1\n",
"\n",
"\n",
"plt.xlim(borderXp, borderXk)\n",
"plt.ylim(borderYp, borderYk)\n",
"\n",
"x = X(t)\n",
"y = Y(t)\n",
"\n",
"ax.set_aspect('equal')\n",
"\n",
"ax.plot(x,y, color='red')\n",
"\n",
"ax.plot(Pp[0], Pp[1], color='blue', marker=\".\", markersize=20)\n",
"ax.plot(Pk[0], Pk[1], color='blue', marker=\".\", markersize=20)\n",
"\n",
"plt.quiver(Pp[0],Pp[1], Tp[0] , Tp[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
"plt.quiver(Pk[0],Pk[1], Tk[0] , Tk[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
"\n",
"\n",
"#eg = ax.legend(loc='upper center', ncol=2, shadow='True')\n",
"leg.get_frame().set_alpha(0.5)\n",
"plt.grid();\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "b606bf77",
"metadata": {},
"source": [
"#### 1.3.3. Wersja interaktywna"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "cfd6c277",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e68a1b80fa3442fd9cbf442ee296dc72",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(VBox(children=(FloatSlider(value=0.0, description='PpX', layout=Layout(grid_area='widget001'), …"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "15142bb167054b61803cf27ad42801ca",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"\n",
"def draw_Hermite_segment(PpX,PpY,PkX,PkY,TpX,TpY,TkX,TkY):\n",
" t = np.arange(0.0, 1.01, 0.01)\n",
" \n",
" lenTp = math.sqrt(TpX**2+TpY**2)/2.54\n",
" lenTk = math.sqrt(TkX**2+TkY**2)/2.54 \n",
"\n",
" fig, ax = plt.subplots()\n",
" #ustawienie rozmiaru obrazka na 10x10 cali\n",
" fig.set_size_inches(25.4/2.54, 25.4/2.54, forward=True)\n",
" plt.title(\"Segment krzywej Hermite'a\")\n",
"\n",
"\n",
" def X(t):\n",
" return PpX*hermite_basis_function_2D[0](t) + PkX*hermite_basis_function_2D[1](t) + TpX*hermite_basis_function_2D[2](t) + TkX*hermite_basis_function_2D[3](t)\n",
"\n",
" def Y(t):\n",
" return PpY*hermite_basis_function_2D[0](t) + PkY*hermite_basis_function_2D[1](t) + TpY*hermite_basis_function_2D[2](t) + TkY*hermite_basis_function_2D[3](t)\n",
"\n",
"\n",
" extr = find_ext(X,Y,0.0,1.01)\n",
"\n",
" borderXp = min(extr[0][0],PpX+TpX,PkX+TkX)-0.1\n",
" borderXk = max(extr[0][1],PpX+TpX,PkX+TkX)+0.1\n",
"\n",
" borderYp = min(extr[1][0],PpY+TpY,PkY+TkY)-0.1\n",
" borderYk = max(extr[1][1],PpY+TpY,PkY+TkY)+0.1\n",
"\n",
"\n",
" plt.xlim(borderXp, borderXk)\n",
" plt.ylim(borderYp, borderYk)\n",
"\n",
" x = X(t)\n",
" y = Y(t)\n",
"\n",
" ax.set_aspect('equal')\n",
"\n",
" ax.plot(x,y, color='red')\n",
"\n",
" ax.plot(PpX, PpY, color='blue', marker=\".\", markersize=20)\n",
" ax.plot(PkX, PkY, color='blue', marker=\".\", markersize=20)\n",
"\n",
" plt.quiver(PpX,PpY, TpX , TpY,color='green', angles='xy', scale_units='xy', scale=1)\n",
" plt.quiver(PkX,PkY, TkX , TkY,color='green', angles='xy', scale_units='xy', scale=1)\n",
"\n",
"\n",
" #eg = ax.legend(loc='upper center', ncol=2, shadow='True')\n",
" #leg.get_frame().set_alpha(0.5)\n",
" plt.grid();\n",
"\n",
" plt.show()\n",
"\n",
"Pp1 = [0.0,0.0]\n",
"Pk1 = [1.0,0.0]\n",
"Tp1 = [1.0,1.0]\n",
"Tk1 = [1.0,-1.0]\n",
" \n",
"#draw_Hermite_segment(Pp1[0],Pp1[1],Pk1[0],Pk1[1],Tp1[0],Tp1[1],Tk1[0],Tk1[1])\n",
"grid = widgets.GridspecLayout(4, 2)\n",
"grid[0, 0] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=Pp1[0],description='PpX')\n",
"grid[0, 1] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=Pp1[1],description='PpY')\n",
"grid[1, 0] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=Pk1[0],description='PkX')\n",
"grid[1, 1] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=Pk1[1],description='PkY')\n",
"grid[2, 0] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=Tp1[0],description='TpX')\n",
"grid[2, 1] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=Tp1[1],description='TpY')\n",
"grid[3, 0] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=Tk1[0],description='TkX')\n",
"grid[3, 1] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=Tk1[1],description='TkY')\n",
"\n",
"k1 = widgets.VBox([grid[0,0],grid[1,0],grid[2,0],grid[3,0]])\n",
"k2 = widgets.VBox([grid[0,1],grid[1,1],grid[2,1],grid[3,1]])\n",
"ui = widgets.HBox([k1,k2])\n",
"\n",
"out = widgets.interactive_output(draw_Hermite_segment, {'PpX': grid[0,0], 'PpY': grid[0,1], \n",
" 'PkX': grid[1,0], 'PkY': grid[1,1],\n",
" 'TpX': grid[2,0], 'TpY': grid[2,1], \n",
" 'TkX': grid[3,0], 'TkY': grid[3,1]\n",
" })\n",
"\n",
"display(ui, out)\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "5968b7a3",
"metadata": {},
"source": [
"## 2. Krzywe Beziera stopnia 3\n",
"===================================="
]
},
{
"cell_type": "markdown",
"id": "d982705f",
"metadata": {},
"source": [
"### 2.1. Macierz funkcji bazowych"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "90b8487d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[[-1.0, 3.0, -3.0, 1.0],\n",
" [3.0, -6.0, 3.0, 0.0],\n",
" [-3.0, 3.0, 0.0, 0.0],\n",
" [1.0, 0.0, 0.0, 0.0]]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bezier_basis_matrix_2D = [\n",
" [-1.0,3.0,-3.0,1.0],\n",
" [3.0,-6.0,3.0,0.0],\n",
" [-3.0,3.0,.0,0.0],\n",
" [1.0,0.0,0.0,0.0]\n",
"]\n",
"bezier_basis_matrix_2D"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "f0f7435c",
"metadata": {},
"outputs": [],
"source": [
"bezier_basis_function_2D = []\n",
"bezier_basis_function_2D.append(\n",
" lambda t: bezier_basis_matrix_2D[0][0]*t**3 + bezier_basis_matrix_2D[0][1]*t**2 + bezier_basis_matrix_2D[0][2]*t + bezier_basis_matrix_2D[0][3],\n",
") \n",
"bezier_basis_function_2D.append(\n",
"lambda t: bezier_basis_matrix_2D[1][0]*t**3 + bezier_basis_matrix_2D[1][1]*t**2 + bezier_basis_matrix_2D[1][2]*t + bezier_basis_matrix_2D[1][3]\n",
")\n",
"bezier_basis_function_2D.append(\n",
" lambda t: bezier_basis_matrix_2D[2][0]*t**3 + bezier_basis_matrix_2D[2][1]*t**2 + bezier_basis_matrix_2D[2][2]*t + bezier_basis_matrix_2D[2][3]\n",
")\n",
"bezier_basis_function_2D.append(\n",
"lambda t: bezier_basis_matrix_2D[3][0]*t**3 + bezier_basis_matrix_2D[3][1]*t**2 + bezier_basis_matrix_2D[3][2]*t + bezier_basis_matrix_2D[3][3]\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "7cb6a787",
"metadata": {},
"source": [
"### 2.2. Wykresy funkcji bazowych"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "041f6aee",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"t = np.arange(0.0, 1.01, 0.01)\n",
"\n",
"\n",
"fig, ax = plt.subplots()\n",
"#ustawienie rozmiaru obrazka na 10x10 cali\n",
"fig.set_size_inches(25.4/2.54, 25.4/2.54, forward=True)\n",
"plt.title(\"Funkcje bazowe Beziera stopnia 3\")\n",
"\n",
"for n in range(4):\n",
" ax.plot(t,bezier_basis_function_2D[n](t) , label=\"b_\"+str(n)+\"(t)\")\n",
"\n",
"leg = ax.legend(loc='upper center', ncol=2, shadow='True')\n",
"leg.get_frame().set_alpha(0.5)\n",
"plt.grid();\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "8a0079a0",
"metadata": {},
"outputs": [],
"source": [
"def find_ext(x,y, lp, lk):\n",
" t = np.arange(lp, lk, 0.001)\n",
" xmin = xmax = x(lp)\n",
" ymin = ymax = y(lp)\n",
" for p in t:\n",
" if x(p) < xmin:\n",
" xmin = x(p)\n",
" else:\n",
" if x(p) > xmax:\n",
" xmax = x(p)\n",
" if y(p) < ymin:\n",
" ymin = y(p)\n",
" else:\n",
" if y(p) > ymax:\n",
" ymax = y(p)\n",
" return [[xmin,xmax],[ymin,ymax]]"
]
},
{
"cell_type": "markdown",
"id": "0356ad14",
"metadata": {},
"source": [
"### 2.3. Przykłady\n",
"\n",
"#### 2.3.1. Przykład 1"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "49b5119f",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"### %matplotlib inline\n",
"\n",
"t = np.arange(0.0, 1.01, 0.01)\n",
"\n",
"P0 = [0.0,0.0]\n",
"P1 = [0.25,1.0]\n",
"P2 = [0.75,1.0]\n",
"P3 = [1.0,0.0]\n",
"\n",
"Tp= [3.0*(P1[0]-P0[0]),3.0*(P1[1]-P0[1])]\n",
"Tk= [3.0*(P3[0]-P2[0]),3.0*(P3[1]-P2[1])]\n",
"\n",
"lenTp = math.sqrt(Tp[0]**2+Tp[1]**2)/2.54\n",
"lenTk = math.sqrt(Tk[0]**2+Tk[1]**2)/2.54 \n",
"\n",
"\n",
"fig, ax = plt.subplots()\n",
"#ustawienie rozmiaru obrazka na 10x10 cali\n",
"fig.set_size_inches(25.4/2.54, 25.4/2.54, forward=True)\n",
"plt.title(\"Segment krzywej Beziera\")\n",
"\n",
"\n",
"def X(t):\n",
" return P0[0]*bezier_basis_function_2D[0](t) + P1[0]*bezier_basis_function_2D[1](t) + P2[0]*bezier_basis_function_2D[2](t) + P3[0]*bezier_basis_function_2D[3](t)\n",
"\n",
"def Y(t):\n",
" return P0[1]*bezier_basis_function_2D[0](t) + P1[1]*bezier_basis_function_2D[1](t) + P2[1]*bezier_basis_function_2D[2](t) + P3[1]*bezier_basis_function_2D[3](t)\n",
"\n",
"\n",
"extr = find_ext(X,Y,0.0,1.01)\n",
"\n",
"borderXp = min(extr[0][0],P0[0]+Tp[0],P3[0]+Tk[0],P0[0],P1[0],P2[0],P3[0])-0.1\n",
"borderXk = max(extr[0][1],P0[0]+Tp[0],P3[0]+Tk[0],P0[0],P1[0],P2[0],P3[0])+0.1\n",
"\n",
"borderYp = min(extr[1][0],P0[1]+Tp[1],P3[1]+Tk[1],P0[1],P1[1],P2[1],P3[1])-0.1\n",
"borderYk = max(extr[1][1],P0[1]+Tp[1],P3[1]+Tk[1],P0[1],P1[1],P2[1],P3[1])+0.1\n",
"\n",
"\n",
"plt.xlim(borderXp, borderXk)\n",
"plt.ylim(borderYp, borderYk)\n",
"\n",
"x = X(t)\n",
"y = Y(t)\n",
"\n",
"ax.set_aspect('equal')\n",
"\n",
"ax.plot(x,y, color='red')\n",
"\n",
"ax.plot(P0[0], P0[1], color='blue', marker=\".\", markersize=20)\n",
"ax.plot(P1[0], P1[1], color='blue', marker=\".\", markersize=20)\n",
"ax.plot(P2[0], P2[1], color='blue', marker=\".\", markersize=20)\n",
"ax.plot(P3[0], P3[1], color='blue', marker=\".\", markersize=20)\n",
"\n",
"\n",
"\n",
"plt.quiver(P0[0],P0[1], Tp[0] , Tp[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
"plt.quiver(P3[0],P3[1], Tk[0] , Tk[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
"\n",
"\n",
"#eg = ax.legend(loc='upper center', ncol=2, shadow='True')\n",
"#eg.get_frame().set_alpha(0.5)\n",
"plt.grid();\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "d4c94e72",
"metadata": {},
"source": [
"#### 2.3.2. Przykład 2"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "1a029ca7",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"### %matplotlib inline\n",
"\n",
"t = np.arange(0.0, 1.01, 0.01)\n",
"\n",
"P0 = [0.0,0.0]\n",
"P1 = [0.25,1.0]\n",
"P2 = [1.0,0.0]\n",
"P3 = [0.75,1.0]\n",
"\n",
"Tp= [3.0*(P1[0]-P0[0]),3.0*(P1[1]-P0[1])]\n",
"Tk= [3.0*(P3[0]-P2[0]),3.0*(P3[1]-P2[1])]\n",
"\n",
"lenTp = math.sqrt(Tp[0]**2+Tp[1]**2)/2.54\n",
"lenTk = math.sqrt(Tk[0]**2+Tk[1]**2)/2.54 \n",
"\n",
"\n",
"fig, ax = plt.subplots()\n",
"#ustawienie rozmiaru obrazka na 10x10 cali\n",
"fig.set_size_inches(25.4/2.54, 25.4/2.54, forward=True)\n",
"plt.title(\"Segment krzywej Beziera\")\n",
"\n",
"\n",
"def X(t):\n",
" return P0[0]*bezier_basis_function_2D[0](t) + P1[0]*bezier_basis_function_2D[1](t) + P2[0]*bezier_basis_function_2D[2](t) + P3[0]*bezier_basis_function_2D[3](t)\n",
"\n",
"def Y(t):\n",
" return P0[1]*bezier_basis_function_2D[0](t) + P1[1]*bezier_basis_function_2D[1](t) + P2[1]*bezier_basis_function_2D[2](t) + P3[1]*bezier_basis_function_2D[3](t)\n",
"\n",
"\n",
"extr = find_ext(X,Y,0.0,1.01)\n",
"\n",
"borderXp = min(extr[0][0],P0[0]+Tp[0],P3[0]+Tk[0],P0[0],P1[0],P2[0],P3[0])-0.1\n",
"borderXk = max(extr[0][1],P0[0]+Tp[0],P3[0]+Tk[0],P0[0],P1[0],P2[0],P3[0])+0.1\n",
"\n",
"borderYp = min(extr[1][0],P0[1]+Tp[1],P3[1]+Tk[1],P0[1],P1[1],P2[1],P3[1])-0.1\n",
"borderYk = max(extr[1][1],P0[1]+Tp[1],P3[1]+Tk[1],P0[1],P1[1],P2[1],P3[1])+0.1\n",
"\n",
"plt.xlim(borderXp, borderXk)\n",
"plt.ylim(borderYp, borderYk)\n",
"\n",
"x = X(t)\n",
"y = Y(t)\n",
"\n",
"ax.set_aspect('equal')\n",
"\n",
"ax.plot(x,y, color='red')\n",
"\n",
"ax.plot(P0[0], P0[1], color='blue', marker=\".\", markersize=20)\n",
"ax.plot(P1[0], P1[1], color='blue', marker=\".\", markersize=20)\n",
"ax.plot(P2[0], P2[1], color='blue', marker=\".\", markersize=20)\n",
"ax.plot(P3[0], P3[1], color='blue', marker=\".\", markersize=20)\n",
"\n",
"\n",
"\n",
"plt.quiver(P0[0],P0[1], Tp[0] , Tp[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
"plt.quiver(P3[0],P3[1], Tk[0] , Tk[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
"\n",
"\n",
"#eg = ax.legend(loc='upper center', ncol=2, shadow='True')\n",
"#leg.get_frame().set_alpha(0.5)\n",
"plt.grid();\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "1ecf0af3",
"metadata": {},
"source": [
"#### 2.3.3. Wersja interaktywna"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "d4210ae6",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "b6b227c29e834926ad774bdd3dafc8d2",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(VBox(children=(FloatSlider(value=0.0, description='P0X', layout=Layout(grid_area='widget001'), …"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "fd689802c0ef40998471c416457c43c1",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"\n",
"def draw_Bezier_segment(P0X,P0Y,P1X,P1Y,P2X,P2Y,P3X,P3Y):\n",
" t = np.arange(0.0, 1.01, 0.01)\n",
" \n",
" ### %matplotlib inline\n",
"\n",
" t = np.arange(0.0, 1.01, 0.01)\n",
"\n",
" Tp= [3.0*(P1X-P0X),3.0*(P1Y-P0Y)]\n",
" Tk= [3.0*(P3X-P2X),3.0*(P3Y-P2Y)]\n",
"\n",
" lenTp = math.sqrt(Tp[0]**2+Tp[1]**2)/2.54\n",
" lenTk = math.sqrt(Tk[0]**2+Tk[1]**2)/2.54 \n",
"\n",
"\n",
" fig, ax = plt.subplots()\n",
" #ustawienie rozmiaru obrazka na 10x10 cali\n",
" fig.set_size_inches(25.4/2.54, 25.4/2.54, forward=True)\n",
" plt.title(\"Segment krzywej Beziera\")\n",
"\n",
"\n",
" def X(t):\n",
" return P0X*bezier_basis_function_2D[0](t) + P1X*bezier_basis_function_2D[1](t) + P2X*bezier_basis_function_2D[2](t) + P3X*bezier_basis_function_2D[3](t)\n",
"\n",
" def Y(t):\n",
" return P0Y*bezier_basis_function_2D[0](t) + P1Y*bezier_basis_function_2D[1](t) + P2Y*bezier_basis_function_2D[2](t) + P3Y*bezier_basis_function_2D[3](t)\n",
"\n",
"\n",
" extr = find_ext(X,Y,0.0,1.01)\n",
"\n",
" borderXp = min(extr[0][0],P0X+Tp[0],P3X+Tk[0],P0X,P1X,P2X,P3X)-0.2\n",
" borderXk = max(extr[0][1],P0X+Tp[0],P3X+Tk[0],P0X,P1X,P2X,P3X)+0.2\n",
"\n",
" borderYp = min(extr[1][0],P0Y+Tp[1],P3Y+Tk[1],P0Y,P1Y,P2Y,P3Y)-0.2\n",
" borderYk = max(extr[1][1],P0Y+Tp[1],P3Y+Tk[1],P0Y,P1Y,P2Y,P3Y)+0.2\n",
"\n",
" plt.xlim(borderXp, borderXk)\n",
" plt.ylim(borderYp, borderYk)\n",
"\n",
" x = X(t)\n",
" y = Y(t)\n",
"\n",
" ax.set_aspect('equal')\n",
"\n",
" ax.plot(x,y, color='red')\n",
"\n",
" ax.plot(P0X, P0Y, color='blue', marker=\".\", markersize=20)\n",
" ax.plot(P1X, P1Y, color='blue', marker=\".\", markersize=20)\n",
" ax.plot(P2X, P2Y, color='blue', marker=\".\", markersize=20)\n",
" ax.plot(P3X, P3Y, color='blue', marker=\".\", markersize=20)\n",
"\n",
"\n",
"\n",
" plt.quiver(P0X,P0Y, Tp[0] , Tp[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
" plt.quiver(P3X,P3Y, Tk[0] , Tk[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
"\n",
"\n",
" #eg = ax.legend(loc='upper center', ncol=2, shadow='True')\n",
" #leg.get_frame().set_alpha(0.5)\n",
" plt.grid();\n",
"\n",
" plt.show()\n",
"\n",
"p0 = [0.0,0.0]\n",
"p1 = [0.25,1.0]\n",
"p2 = [0.75,1.0]\n",
"p3 = [1.0,0.0]\n",
" \n",
"#draw_Hermite_segment(Pp1[0],Pp1[1],Pk1[0],Pk1[1],Tp1[0],Tp1[1],Tk1[0],Tk1[1])\n",
"grid = widgets.GridspecLayout(4, 2)\n",
"grid[0, 0] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=p0[0],description='P0X')\n",
"grid[0, 1] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=p0[1],description='P0Y')\n",
"grid[1, 0] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=p1[0],description='P1X')\n",
"grid[1, 1] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=p1[1],description='P1Y')\n",
"grid[2, 0] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=p2[0],description='P2X')\n",
"grid[2, 1] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=p2[1],description='P2Y')\n",
"grid[3, 0] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=p3[0],description='P3X')\n",
"grid[3, 1] = widgets.FloatSlider(min=-5, max=5, step=0.2,value=p3[1],description='P3Y')\n",
"\n",
"k1 = widgets.VBox([grid[0,0],grid[1,0],grid[2,0],grid[3,0]])\n",
"k2 = widgets.VBox([grid[0,1],grid[1,1],grid[2,1],grid[3,1]])\n",
"ui = widgets.HBox([k1,k2])\n",
"\n",
"out = widgets.interactive_output(draw_Bezier_segment, {'P0X': grid[0,0], 'P0Y': grid[0,1], \n",
" 'P1X': grid[1,0], 'P1Y': grid[1,1],\n",
" 'P2X': grid[2,0], 'P2Y': grid[2,1], \n",
" 'P3X': grid[3,0], 'P3Y': grid[3,1]\n",
" })\n",
"\n",
"display(ui, out)\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "31c960d2",
"metadata": {},
"source": [
"### 2.4. Krzywe Beziera dowolnego stopnia"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "c0e13970",
"metadata": {},
"outputs": [],
"source": [
"import scipy.special\n",
"def bernstein(n,i,t):\n",
" return scipy.special.binom(n,i)*t**i*(1-t)**(n-i)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "ea3578d6",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8ff7f68765a64213b8aed50f2aa183f9",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"GridspecLayout(children=(FloatText(value=0.0, description='pX', layout=Layout(grid_area='widget001', width='20…"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5c51597250a147da82698a932816b9dc",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Output()"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "118d311db79b4725be01e9bdb5b36ab5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(Checkbox(value=False, description='Show convex hull', indent=False), Output()), _dom_cla…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"from IPython.display import clear_output\n",
"from scipy.spatial import ConvexHull, convex_hull_plot_2d\n",
"from ipywidgets import Button, Layout\n",
"from ipywidgets import interact\n",
"\n",
"out = widgets.Output()\n",
"\n",
"def onclick(event):\n",
" print('%s click: button=%d, x=%d, y=%d, xdata=%f, ydata=%f' %\n",
" ('double' if event.dblclick else 'single', event.button,\n",
" event.x, event.y, event.xdata, event.ydata))\n",
"\n",
"\n",
"def draw_Bezier_segment_n(control_points,out, hull = False):\n",
" t = np.arange(0.0, 1.01, 0.01)\n",
" \n",
" ### %matplotlib inline\n",
"\n",
" t = np.arange(0.0, 1.01, 0.01)\n",
" \n",
" n = len(control_points)-1\n",
"\n",
" Tp= [3.0*(control_points[1][0]-control_points[0][0]),3.0*(control_points[1][1]-control_points[0][1])]\n",
" Tk= [3.0*(control_points[n][0]-control_points[n-1][0]),3.0*(control_points[n][1]-control_points[n-1][1])]\n",
"\n",
" lenTp = math.sqrt(Tp[0]**2+Tp[1]**2)/2.54\n",
" lenTk = math.sqrt(Tk[0]**2+Tk[1]**2)/2.54 \n",
"\n",
" \n",
" with out:\n",
" fig, ax = plt.subplots()\n",
" \n",
" cid = fig.canvas.mpl_connect('button_press_event', onclick)\n",
"\n",
" #ustawienie rozmiaru obrazka na 10x10 cali\n",
" fig.set_size_inches(25.4/2.54, 25.4/2.54, forward=True)\n",
" plt.title(\"Segment krzywej Beziera stopnia \"+str(n))\n",
"\n",
"\n",
" def X(t):\n",
" res = 0\n",
" for i in range(n+1):\n",
" res += control_points[i][0]*bernstein(n,i,t)\n",
" return res\n",
" \n",
" \n",
" def Y(t):\n",
" res = 0\n",
" for i in range(n+1):\n",
" res += control_points[i][1]*bernstein(n,i,t)\n",
" return res\n",
" \n",
"\n",
" extr = find_ext(X,Y,0.0,1.01)\n",
"\n",
" \n",
" extr_points = [[control_points[0][0],control_points[0][0]],[control_points[0][1],control_points[0][1]]]\n",
" for i in range(1,n+1):\n",
" if control_points[i][0] < extr_points[0][0]:\n",
" extr_points[0][0] = control_points[i][0]\n",
" else:\n",
" if control_points[i][0] > extr_points[0][1]:\n",
" extr_points[0][1] = control_points[i][0]\n",
" if control_points[i][1] < extr_points[1][0]:\n",
" extr_points[1][0] = control_points[i][1]\n",
" else:\n",
" if control_points[i][1] > extr_points[1][1]:\n",
" extr_points[1][1] = control_points[i][1]\n",
"\n",
" borderXp = min(extr[0][0],control_points[0][0]+Tp[0],control_points[n][0]+Tk[0],extr_points[0][0])-0.2\n",
" borderXk = max(extr[0][1],control_points[0][0]+Tp[0],control_points[n][0]+Tk[0],extr_points[0][1])+0.2\n",
" \n",
" borderYp = min(extr[1][0],control_points[0][1]+Tp[1],control_points[n][1]+Tk[1],extr_points[1][0])-0.2\n",
" borderYk = max(extr[1][1],control_points[0][1]+Tp[1],control_points[n][1]+Tk[1],extr_points[1][1])+0.2\n",
" \n",
" \n",
"\n",
" plt.xlim(borderXp, borderXk)\n",
" plt.ylim(borderYp, borderYk)\n",
"\n",
" x = X(t)\n",
" y = Y(t)\n",
"\n",
" ax.set_aspect('equal')\n",
"\n",
" with out:\n",
" clear_output(True)\n",
" \n",
" ax.plot(x,y, color='red')\n",
"\n",
" for i in range(n+1):\n",
" ax.plot(control_points[i][0], control_points[i][1], color='blue', marker=\".\", markersize=20)\n",
"\n",
"\n",
"\n",
" plt.quiver(control_points[0][0], control_points[0][1], Tp[0] , Tp[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
" plt.quiver(control_points[n][0], control_points[n][1], Tk[0] , Tk[1],color='green', angles='xy', scale_units='xy', scale=1)\n",
"\n",
"\n",
" #eg = ax.legend(loc='upper center', ncol=2, shadow='True')\n",
" #leg.get_frame().set_alpha(0.5)\n",
" plt.grid();\n",
"\n",
" if hull and len(points)>2:\n",
" Hull = ConvexHull(points)\n",
" #print(Hull.vertices.tolist())\n",
" a=[]\n",
" b=[]\n",
" for i in Hull.vertices.tolist():\n",
" #ax.plot(points[i][0], points[i][1], color='orange', marker=\"*\", markersize=8)\n",
" a.append(points[i][0])\n",
" b.append(points[i][1])\n",
" a.append(a[0])\n",
" b.append(b[0])\n",
" #print(a)\n",
" #print(b)\n",
" for i in Hull.vertices.tolist():\n",
" #print(points[Hull.vertices.tolist()[i]])\n",
" #ax.plot(points[i][0], points[i][1], 'r--', color='black')\n",
" ax.plot(a, b, 'r--', color='black')\n",
" for i in Hull.vertices.tolist():\n",
" ax.plot(points[i][0], points[i][1], color='orange', marker=\"*\", markersize=8)\n",
" \n",
" #_ = convex_hull_plot_2d(Hull)\n",
" \n",
" plt.show()\n",
"\n",
"\n",
"points = [[0.0,0.0], [1.0,0.0],[2.0,2.0]]\n",
"\n",
"\n",
"pointX = widgets.FloatText(\n",
" value=0.0,\n",
" description='pX',\n",
" disabled=False,\n",
" layout=Layout(width='200px')\n",
")\n",
"\n",
"pointY = widgets.FloatText(\n",
" value=0.0,\n",
" description='pY',\n",
" disabled=False,\n",
" layout=Layout(width='200px')\n",
")\n",
"\n",
"\n",
"addIdx = widgets.IntText(\n",
" value=0,\n",
" description='Add Idx',\n",
" disabled=False,\n",
" layout=Layout(width='200px')\n",
")\n",
"\n",
"delIdx = widgets.IntText(\n",
" value=0,\n",
" description='Del Idx',\n",
" disabled=False,\n",
" layout=Layout(width='200px')\n",
")\n",
"\n",
"show_hull = widgets.Checkbox(\n",
" value=False,\n",
" description='Show convex hull',\n",
" disabled=False,\n",
" indent=False\n",
")\n",
"\n",
"def hull_fun(val):\n",
" draw_Bezier_segment_n(points,out,val)\n",
"\n",
"def update_plot(b):\n",
" if b.description == 'Add Point':\n",
" points.insert(addIdx.value,[pointX.value,pointY.value])\n",
" if b.description == 'Del Point':\n",
" del points[delIdx.value]\n",
" draw_Bezier_segment_n(points,out,show_hull.value)\n",
" \n",
"add_button = widgets.Button(description='Add Point',layout=Layout(width='200px'),merge=False)\n",
"del_button = widgets.Button(description='Del Point',layout=Layout(width='200px'))\n",
"add_button.on_click(update_plot)\n",
"del_button.on_click(update_plot)\n",
"\n",
"grid = widgets.GridspecLayout(4, 2,width='460px')\n",
"grid[0, 0] = pointX\n",
"grid[1, 0] = pointY\n",
"grid[2, 0] = addIdx\n",
"grid[3, 0] = add_button\n",
"grid[0, 1] = delIdx\n",
"grid[1, 1] = del_button\n",
"\n",
"\n",
"\n",
"display(grid,out)\n",
"interact(hull_fun,val=show_hull)\n",
"draw_Bezier_segment_n(points,out,show_hull.value)\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "dac98b97",
"metadata": {},
"source": [
"## Zadania "
]
},
{
"cell_type": "markdown",
"id": "a2ba0722",
"metadata": {},
"source": [
"\n",
" \\begin{enumerate}\n",
" \\item Do skryptu w punkcie 2.4. dodać możliwość modyfikacji dowolnego punktu kontrolnego (nieobowiązkowe)\n",
" \\item Napisać skrypt demonstrujący łączenie krzywych Beziera 3-go stopnia, z ciągłością parametryczną w punkcie łączenia.\n",
" \\item Napisać skrypt implementujący rysowanie krzywych Beziera 3-go stopnia algorytmem de Casteljau.\n",
" \\end{enumerate}\n",
" Alternatywnie napisać własny program realizujący te zadania.<p></p>\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9a635bc7",
"metadata": {},
"outputs": [],
"source": []
}
],
"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"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autoclose": false,
"autocomplete": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
}
},
"nbformat": 4,
"nbformat_minor": 5
}