dih-jupyter/4. Jupyter - kalkulator symboliczny.ipynb
2021-02-18 12:21:15 +01:00

1981 lines
233 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Przygotowanie innowacyjnych materiałów szkoleniowych i dokumentacji wewnętrznych w obszarze IT\n",
"\n",
"## 4. Jupyter - kalkulator symboliczny: zadanie \"Pudełko Pad Thai\"\n",
"### <i>Bartosz Naskręcki</i>\n",
"\n",
"W tym pliku rozważymy zadanie z geometrii, którego rozwiązanie może być w całości wykonane z wykorzystaniem możliwości symbolicznych pakietu SymPy. Wszystkie obliczenia będą wykonane w rachunku symbolicznym, co powoduje, że nasze wyniki nie są przybliżeniami i wszelkie uzyskane formuły są udowodnione w sposób algebraiczny."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Zadanie:\n",
"\n",
"Rozważamy pudełko, którego ściany są pięciokątami foremnymi o długości boku 1. Podstawa pudełka jest kwadratem o boku 1. Zakładając, że ściany pudełka stykają się, oblicz jaka jest odległość pomiędzy górnymi wierzchołkami ścian pudełka leżących naprzeciw siebie."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img src=\"pad_thai.png\"></img>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wykonujemy import z biblioteki SymPy. W przypadku komunikatu o błędzie importu, należy zainstalować bibliotekę w lokalnej instancji Pythona."
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [],
"source": [
"from sympy import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Biblioteka [SymPy](https://www.sympy.org) posiada wbudowane możliwości rachunków symbolicznych na zmiennych oraz obsługę funkcji matematycznych wraz z relacjami pomiędzy nimi. Konstruując rozwiązanie naszego zadania zapoznamy się z szeregiem standardowych funkcjonalności. Rozszerzone możliwości tej biblioteki są wbudowane w pakiet matematyczny [SageMath](https://www.sagemath.org)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Strategia rozwiązania zadania:\n",
"\n",
"Aby obliczyć pożądaną odległość spróbujemy \"wyobrazić\" sobie całą sytuację. Powstanie pudełka polega na obróceniu w przestrzeni 3D czterech pięciokątnych ścian o pewien kąt $\\alpha$. Wybór tego kąta jest jednoznacznie ustalony przez warunek stykania się ścian wzdłuż zewnętrznych krawędzi. Nasza strategia wygląda więc następująco:\n",
"\n",
"1. Generujemy mechanizm, który wyznacza symbolicznie współrzędne wierzchołków pięciokąta foremnego.\n",
"2. Pozycjonujemy cztery kopie takiego pięciokąta na płaszczyźnie.\n",
"3. Korzystając z transformacji obrotu o zadany kąt względem prostej obracamy wybrane ściany o pewien nieznany kąt $\\alpha$. \n",
"4. Formułujemy warunek stykania ścian (warunek ten jest równaniem).\n",
"5. Wyznaczamy kąt z równania (jako wyrażenie symboliczne).\n",
"6. Obliczamy odległość zadanych punktów korzystając z wbudowanych w SymPy tożsamości trygonometrycznych."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Macierz obrotu o zadany kąt\n",
"\n",
"Macierze w SymPy są inicjalizowane komendą <b>Matrix</b>. Jako argument funkcja ta pobiera listę składającą z się z list tej samej długości (reprezentujących wiersze)."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}1 & 2\\\\3 & 4\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([\n",
"[1, 2],\n",
"[3, 4]])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"M1=Matrix([[1,2],[3,4]])\n",
"M1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Na macierzach możemy wykonywać standardowe operacje dodawania i mnożenia, operację obliczania śladu, wyznacznika i wiele innych. Użytkownik może sprawdzić aktualną listę zaimplementowanych funkcji za pomocą nazwy obiektu i kropki oraz przez wciśnięcie tabulatora"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"M1. #<+tabulator>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Macierz obrotu wokół punktu $(0,0)$ o zadany kąt $t$ (przeciwnie do ruchu wskazówek zegara) jest macierzą postaci"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"def obrot(t):\n",
" m=Matrix([[cos(t),-sin(t)],[sin(t),cos(t)]])\n",
" return m"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}0 & -1\\\\1 & 0\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([\n",
"[0, -1],\n",
"[1, 0]])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"obrot(pi/2) #obrót o 90 stopni przeciwnie do ruchu wskazówek zegara"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Działanie macierzy obrotu możemy przetestować na wektorach (macierzach o wymiarach $1\\times n$). Wykorzystamy zmienne symboliczne, aby wyrazić działanie w ogólnym przypadku"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"x,y=symbols('x,y') #za pomocą komendy symbols możemy inicjalizować listę abstrakcyjnych zmiennych symbolicznych"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Na zmiennych symbolicznych $x,y$ możemy wykonywać operacje podstawiania, elementarne operacje oraz wykorzystywać je jako argumenty w funkcjach, a także podstawiać pod nie wartości."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle x + y$"
],
"text/plain": [
"x + y"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#dodawanie zmiennych\n",
"x+y"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle x y$"
],
"text/plain": [
"x*y"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#mnożenie zmiennych\n",
"x*y"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle x^{y}$"
],
"text/plain": [
"x**y"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#potęgowanie zmiennych\n",
"x**y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<b>UWAGA!</b>\n",
"\n",
"W standardowym Pythonie symbol ^ oznacza operację dodawania bitowego XOR. Do oznaczenia potęgowania używamy symbolu **"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\sin{\\left(y \\right)} + \\cos{\\left(x \\right)}$"
],
"text/plain": [
"sin(y) + cos(x)"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#funkcja z abstrakcyjnym argumentem\n",
"cos(x)+sin(y)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\sin{\\left(y^{2} + 1 \\right)}$"
],
"text/plain": [
"sin(y**2 + 1)"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#podstawienie argumentu\n",
"#w celu podstawienie wykorzystujemy strukturę słownika dict, której kluczami są podstawiane zmienne, a wartościami kluczy\n",
"#są wartości podstawiane\n",
"sin(x).subs({x:y**2+1})"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 0.900968867902419$"
],
"text/plain": [
"0.900968867902419"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#wartości symboliczne można przybliżać numerycznie\n",
"cos(pi/7).n()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9009688679024191"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#możemy konwertować wartości numeryczne do standardowego typu danych float\n",
"float(cos(pi/7))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ciekawostka:\n",
"Niektóre stałe matematyczne, np. $\\pi$ są wbudowane w SymPy i traktowane jako pewne zmienne symboliczne, które posiadają szczególne własności, np. wartości $\\cos(\\pi/n)$ można podać algebraicznie i numerycznie. To bardzo wygodny sposób operowania podstawowymi stałymi matematyki."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Zbadajmy działanie operacji obrotu o kąt $t$ na wektorze o zmiennych symbolicznych $(x,y)$ "
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"t,x,y=symbols('t,x,y') #UWAGA: nie musimy ponownie deklarować zmiennych symbolicznych, robimy to tylko dla zachowania\n",
" #przejrzystości kodu"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}x\\\\y\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([\n",
"[x],\n",
"[y]])"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"v=Matrix([[x],[y]])\n",
"v"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}\\cos{\\left(t \\right)} & - \\sin{\\left(t \\right)}\\\\\\sin{\\left(t \\right)} & \\cos{\\left(t \\right)}\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([\n",
"[cos(t), -sin(t)],\n",
"[sin(t), cos(t)]])"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"obrot_o_t=obrot(t)\n",
"obrot_o_t"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}x \\cos{\\left(t \\right)} - y \\sin{\\left(t \\right)}\\\\x \\sin{\\left(t \\right)} + y \\cos{\\left(t \\right)}\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([\n",
"[x*cos(t) - y*sin(t)],\n",
"[x*sin(t) + y*cos(t)]])"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#obrót wektora (x,y) o kąt t\n",
"obrot_o_t*v"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Zadanie: jakie są współrzędne wektora $(1,3)$ po obrocie o kąt $\\pi/4$ ?"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}- \\sqrt{2}\\\\2 \\sqrt{2}\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([\n",
"[ -sqrt(2)],\n",
"[2*sqrt(2)]])"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(obrot_o_t*v).subs({x:1,y:3,t:pi/4})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Zadanie: Korzystając z wektorów i macierzy obrotów wyznacz współrzędne wierzchołków wielokata foremnego (mającego $n$ boków) na płaszczyźnie, którego boki mają długość 1\n",
"\n",
"Rozwiązanie metodą \"żółwia\":\n",
"\n",
"1. Wystartuj w punkcie $(0,0)$.\n",
"2. Przesuń się o jednostkę w prawo za pomocą wektora $k=(1,0)$. Jesteś w punkcie $P_0=(1,0)$.\n",
"3. Obróć głowę żółwia o kąt $2\\cdot \\pi/n$.\n",
"4. Przesuń żółwia o jednostkę \"do przodu\". Jesteś w punkcie $P_1=P_0+\\theta(t)(k)$\n",
"5. Powtarzaj punkty (3)-(5) $n-1$ razy.\n",
"\n",
"Zwróć listę wierzchołków: $P_0,\\ldots, P_{n-1}$.\n",
"\n",
"Uwaga: Operacja $\\theta(t)$ to obrót wektora o zadany kąt $t$. W naszym przypadku mnożymy wektor kolumnowy z lewej przez macierz obrotu o kąt $t$."
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [],
"source": [
"def NkatForemny(n):\n",
" p0=Matrix([[0],[0]])\n",
" k=Matrix([[1],[0]])\n",
" ob=obrot(2*pi/n)\n",
" nkat=[]\n",
" w=p0+k\n",
" for i in range(0,n):\n",
" nkat.append(w)\n",
" k=ob*k #obróć żółwia\n",
" w+=k #przesuń o jednostkę w nowym kierunku\n",
" return nkat"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"⎡ ⎡1/2⎤ ⎤\n",
"⎢⎡1⎤ ⎢ ⎥ ⎡0⎤⎥\n",
"⎢⎢ ⎥, ⎢√3 ⎥, ⎢ ⎥⎥\n",
"⎢⎣0⎦ ⎢── ⎥ ⎣0⎦⎥\n",
"⎣ ⎣2 ⎦ ⎦\n"
]
}
],
"source": [
"pretty_print(NkatForemny(3)) #współrzędne trójkąta foremnego"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Rysowanie z biblioteką matplotlib\n",
"\n",
"Do rysowania wykorzystamy uniwersalną bibliotekę matplotlib. Na potrzeby prawidłowego rysowania korzystamy z dodatkowej \"magicznej komendy\"\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Rysowanie wielokątów\n",
"\n",
"Wielokąt w bibliotece matplotlib możemy narysować korzystając z komendy `fill`. Do narysowania wielokąta przekazujemy osobno jako argumenty wartości współrzędnych $x$-owych i $y$-owych. Do rozbicia listy wierzcholków na współrzędne używamy komendy \n",
"\n",
"`zip(*lista_wierzcholkow)`\n",
"\n",
"Uwaga: aby figury nie nachodziły na siebie przesuwamy macierzowo zbiory wierzchołków o odpowiedni wektor $(3i,0)$ dla każdej $i$-tej figury."
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {
"scrolled": true
},
"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": [
"fig = plt.figure()\n",
"for i in range(0,5):\n",
" wielokatli=(list(tuple(wierzcholek+Matrix([[3*i],[0]])) for wierzcholek in NkatForemny(i+3)));\n",
" wielokatli.append(wielokatli[0]) #dla domknięcia dodajemy ostatni wierzchołek równy pierwszemu\n",
" xli,yli=zip(*wielokatli)\n",
" plt.axis('equal') #proporcjonalne osie\n",
" #axis('off')\n",
" plt.fill(xli,yli)\n",
"plt.show() #rysowanie skonfigurowanej ilustracji"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Teraz jesteśmy już gotowi do wygenerowania naszego modelowego pięciokąta foremnego. Pamiętamy o dodaniu na końcu listy dodatkowego wierzchołka, który jest równy $P_0$. Jest to potrzebne dla prawidłowego rysowania wielokątów."
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {},
"outputs": [],
"source": [
"pieciokat0=NkatForemny(5)\n",
"pieciokat0.append(pieciokat0[0])\n",
"pieciokat=[Matrix([[list(y)[0].simplify()],[list(y)[1].simplify()]]) for y in pieciokat0] #upraszczamy formuły"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"W kodzie powyżej użyliśmy potężnej funkcjonalności \n",
"\n",
"`<wyrazenie>.simplify()`\n",
"\n",
"która upraszcza w znany SymPy sposób wyrażenia symboliczne. Do uproszczeń stosuje się znane zależności między funkcjami oraz tożsamości. Efekt działania tej komendy zależy w istotny sposób od wyrażenia i jest zawsze taki sam dla tego samego wyrażenia."
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 360x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"wielokatli=list(tuple(wierzcholek) for wierzcholek in NkatForemny(5));\n",
"wielokatli.append(wielokatli[0])\n",
"xli,yli=zip(*wielokatli)\n",
"fig=plt.figure(figsize=[5,5]) #wielkość figury w kierunku x i y\n",
"plt.axis('equal')\n",
"plt.axis('off') #wyłączenie wyświetlania osi\n",
"plt.fill(xli,yli,color='red')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wielokąty możemy na siebie nakładać i kolorować. Poniższy przykład polega na obracaniu pięciokątów o zadany kąt i ustawianiu ich jeden na drugim, ze zmieniającym się kolorem. Kolor jest zadany jako `color=(R,G,B)`, gdzie parametry $R$, $G$, $B$ są liczbami rzeczywistymi w przedziale $0$ do $1$."
]
},
{
"cell_type": "code",
"execution_count": 243,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 360x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#wyznaczanie środka ciężkości\n",
"def sumM(li): \n",
" sum0=li[0]\n",
" for el in li[1:]:\n",
" sum0+=el\n",
" return sum0*Rational(1,len(li))\n",
"\n",
"#obrót wielokąta po przesunięcia środka ciężkości do (0,0) i przesunięcie go z powrotem + zastosowanie skali\n",
"def obrotSkalaWielokat(wiel,t,skala): #wiel[:-1]==wiel[0]\n",
" s=sumM(wiel[:-1])\n",
" rot=[obrot(t)*((el-s)*skala)+s for el in wiel[:-1]]\n",
" return rot+[rot[0]]\n",
"\n",
"\n",
"#inicjalizacja figury\n",
"fig=plt.figure(figsize=[5,5]) #wielkość figury w kierunku x i y\n",
"plt.axis('equal')\n",
"#plt.axis('off') #wyłączenie wyświetlania osi\n",
"\n",
"#trzydzieści iteracji rysowania pięciokąta\n",
"iteracje=30\n",
"for i in range(0,iteracje):\n",
" wielokatli=obrotSkalaWielokat(pieciokat,2*i*pi/(5*iteracje),Rational(iteracje-i,40*iteracje))\n",
" xli,yli=zip(*wielokatli)\n",
" plt.fill(xli,yli,color=(1-(i/iteracje)**(1/2),(i/iteracje)**2,(iteracje-i)/iteracje))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wracając do naszego głównego zadania, pozycjonujemy cztery pięciokącie na płaszczyźnie, aby stworzyły makietę ścian naszego pudełka. Ponieważ dno pudełka nie będzie nam potrzebne, więc je ignorujemy.\n",
"\n",
"Pozycjonowanie odbywa się za pomocą obrotów o kąty $0,90,180$ i $270$ stopni, wraz z odpowiednimi przesunięciami o wektory na płaszczyźnie. Do szybkiego przetransformowania odpowiednich wektorów stosujemy komendę `map` wraz z argumentem, którym jest funkcja transformująca i lista (w tym przypadku `pieciokat`)."
]
},
{
"cell_type": "code",
"execution_count": 245,
"metadata": {},
"outputs": [],
"source": [
"pi1=list(map(lambda x: x+Matrix([[0],[1]]),pieciokat))\n",
"pi2=list(map(lambda x: obrot(-pi/2)*x+Matrix([[1],[1]]),pieciokat))\n",
"pi3=list(map(lambda x: obrot(-pi)*x+Matrix([[1],[0]]),pieciokat))\n",
"pi4=list(map(lambda x: obrot(-3/2*pi)*x+Matrix([[0],[0]]),pieciokat))"
]
},
{
"cell_type": "code",
"execution_count": 249,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 360x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#definiujemy pomocniczą funkcję rysującą pojedynczy wielokąt\n",
"def polygon_draw(li,color):\n",
" wielokatli=list(tuple(wierzcholek) for wierzcholek in li);\n",
" wielokatli.append(wielokatli[0])\n",
" xli,yli=zip(*wielokatli)\n",
" plt.fill(xli,yli,color)\n",
"\n",
"fig=plt.figure(figsize=[5,5])\n",
"plt.axis('equal')\n",
"polygon_draw(pi1,color='red')\n",
"polygon_draw(pi2,color='blue')\n",
"polygon_draw(pi3,color='green')\n",
"polygon_draw(pi4,color='black')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Teraz czeka nas trudniejsze zadanie. Musimy opracować wzory na obracanie naszych pięciokątów w trzech wymiarach, wokół krawędzi, która styka się z białym kwadratem. \n",
"\n",
"Nasze pięciokąty zyskają dodatkową, trzecią współrzędną, równą 0. Po obrocie ich współrzędne będą zazwyczaj niezerowe."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Obrót wokół osi $X$ odbywa się w ten sposób, że wektor $(x,y,z)$ zachowuje współrzędną $y$. Współrzędne $(x,z)$ obracamy za pomocą macierzy obrotu $\\theta(t)$ o zadany kąt $t$."
]
},
{
"cell_type": "code",
"execution_count": 258,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}x \\cos{\\left(t \\right)} - z \\sin{\\left(t \\right)}\\\\y\\\\x \\sin{\\left(t \\right)} + z \\cos{\\left(t \\right)}\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([\n",
"[x*cos(t) - z*sin(t)],\n",
"[ y],\n",
"[x*sin(t) + z*cos(t)]])"
]
},
"execution_count": 258,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x,y,z,t=symbols('x,y,z,t')\n",
"v=Matrix([[x],[y],[z]]) #wektor poddany transformacji\n",
"vtmp=obrot(t)*Matrix([v[0],v[2]]) #obrót tylko na 0 i 2 współrzędnej\n",
"vobr=Matrix([[vtmp[0]],[v[1]],[vtmp[1]]]) #złączenie ponowne w wektor 3D\n",
"vobr"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Bazując na powyższych kalkulacjach definiujemy zatem funkcję"
]
},
{
"cell_type": "code",
"execution_count": 256,
"metadata": {},
"outputs": [],
"source": [
"def ObrotWX0(v,t):\n",
" x,y,z=list(v)\n",
" return Matrix([[x*cos(t) - z*sin(t), y, x*sin(t)+z*cos(t)]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Podobnie wyznaczamy obrót wokół osi Y"
]
},
{
"cell_type": "code",
"execution_count": 257,
"metadata": {},
"outputs": [],
"source": [
"def ObrotWY0(v,t):\n",
" x,y,z=list(v)\n",
" return Matrix([[x, y*cos(t) - z*sin(t), y*sin(t)+z*cos(t)]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Teraz chcemy obrócić wokół osi zadanej równaniem $x=1$. W związku z tym, najpierw przesuwamy nasze punktu o $1$ jednostkę w lewo, obracamy, a następnie wracamy o jedną jednostkę w prawo. Tak uzyskana transformacja będzie obrotem o zadany kąt wokół osi przechodzącej przez $x=1$."
]
},
{
"cell_type": "code",
"execution_count": 259,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}- z \\sin{\\left(t \\right)} + \\left(x - 1\\right) \\cos{\\left(t \\right)} + 1\\\\y\\\\z \\cos{\\left(t \\right)} + \\left(x - 1\\right) \\sin{\\left(t \\right)}\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([\n",
"[-z*sin(t) + (x - 1)*cos(t) + 1],\n",
"[ y],\n",
"[ z*cos(t) + (x - 1)*sin(t)]])"
]
},
"execution_count": 259,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x,y,z,t=symbols('x,y,z,t')\n",
"v=Matrix([[x],[y],[z]]) #wektor poddany transformacji\n",
"vtmp=obrot(t)*Matrix([v[0]-1,v[2]]) #obrót tylko na 0 i 2 współrzędnej\n",
"vobr=Matrix([[vtmp[0]+1],[v[1]],[vtmp[1]]]) #złączenie ponowne w wektor 3D\n",
"vobr"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Przedstawiamy rezultat w formie stosownej funkcji"
]
},
{
"cell_type": "code",
"execution_count": 260,
"metadata": {},
"outputs": [],
"source": [
"def ObrotWX1(v,t):\n",
" x,y,z=list(v)\n",
" return Matrix([[-z*sin(t)+(x-1)*cos(t) +1 , y, z*cos(t) + (x-1)*sin(t)]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Analogiczny rachunek pozwala nam skonstruować funkcję obrotu wokół osi zadanej równaniem $y=1$"
]
},
{
"cell_type": "code",
"execution_count": 261,
"metadata": {},
"outputs": [],
"source": [
"def ObrotWY1(v,t):\n",
" x,y,z=list(v)\n",
" return Matrix([[x, 1 - cos(t) + y*cos(t) - z*sin(t), z*cos(t) - sin(t) + y*sin(t)]])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Teraz mając zadany wektor oraz kąt obrotu, możemy śledzić zmiany konkretnych wektorów pod wpływem obrotów. Przykładowo"
]
},
{
"cell_type": "code",
"execution_count": 262,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}\\cos{\\left(t \\right)} & 1 & \\sin{\\left(t \\right)}\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([[cos(t), 1, sin(t)]])"
]
},
"execution_count": 262,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t=Symbol('t')\n",
"ObrotWX0([1,1,0],t)"
]
},
{
"cell_type": "code",
"execution_count": 263,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}1 & \\cos{\\left(t \\right)} & \\sin{\\left(t \\right)}\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([[1, cos(t), sin(t)]])"
]
},
"execution_count": 263,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ObrotWY0([1,1,0],t)"
]
},
{
"cell_type": "code",
"execution_count": 264,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}\\cos{\\left(t \\right)} + 1 & 0 & \\sin{\\left(t \\right)}\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([[cos(t) + 1, 0, sin(t)]])"
]
},
"execution_count": 264,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ObrotWX1([2,0,0],t)"
]
},
{
"cell_type": "code",
"execution_count": 265,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}0 & \\cos{\\left(t \\right)} + 1 & \\sin{\\left(t \\right)}\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([[0, cos(t) + 1, sin(t)]])"
]
},
"execution_count": 265,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ObrotWY1([0,2,0],t)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Potrzebujemy teraz biblioteki do rysowania kształtów w 3D"
]
},
{
"cell_type": "code",
"execution_count": 266,
"metadata": {},
"outputs": [],
"source": [
"from mpl_toolkits.mplot3d import Axes3D\n",
"from numpy import arange"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wyrysujmy w 3D trajektorie ruchu czterech wierzchołków pod wpływem obrotu o zadany kąt. Funkcja `arange` pozwala nam wybrać częstotliwość próbkowania liczb z zadanego przedziału."
]
},
{
"cell_type": "code",
"execution_count": 270,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPkAAADyCAYAAACPiGNTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABaCUlEQVR4nO19eXRb1bn9vhotWfIgz7EdD3GcOImH2HGYAy+UB4RmoBDC8AgQeAXaQHgtlKHvl9K+MrRQpgIpLVCgi6ElARKSQKFQWqaQkMSzHdvxPMq2JFuTNZ7fH865SLKGq9FD7l6LRWxf3Xsk3X3Pd76zv/0xhBDw4MFj/kIw0wPgwYNHdMGTnAePeQ6e5Dx4zHPwJOfBY56DJzkPHvMcPMl58JjnEAX4O7+/xoNH9MFE8+T8TM6DxzwHT3IePOY5eJLz4DHPwZOcB495Dp7kPHjMc/Ak58FjnoMnOQ8e8xw8yXnwmOfgSc6DxzwHT3IePOY5eJLz4DHPwZOcB495Dp7kPHjMc/Ak58FjnoMnOQ8e8xw8yWcAhBBYrVbY7Xbwltg8oo1AphE8Igyn0wmr1YrJyUn2d0KhEGKxGCKRCEKhEAwTVQ8BHqcZmAAzCT/NRAiEENjtdtjtdjAMA5vNxv6eEAKn08mS22KxQKlUQiKR8KQ/PRDVL5ifyWMAGp67EpmCYRgwDAOBQMAee/LkSeTn50MulwPgZ3oe4YEneZRht9vR19cHh8OB7OxsMAzDzt7eyEpJLxQKIRQK2VnebDazx4tEIvY/nvQ8AoEneZTgGp47nU42TA8W3mZ6h8MBu93OHiMSidiZXiAQ8KTn4Qae5FGA0+mEzWZjw3M6e3OFv+Pp+Sg8Sc8wjNtMz5OeB0/yCIISjibV6Ozri7S+QvZg4I30drudHQNPeh48ySMEQghsNhscDsc04nmSPNDsHuzM7/lanvQ8XMGTPAKge990ZvaWQZ8p0Ys30ttsNoyNjcFgMCA7O5td0wuFQp708xA8ycOA5943Dc89Eck1ebigmXv6YKJ79q4zPU3iiUQirw8tHnMLPMlDhOfetz8ihELaaM/89PyU9K6/t1qtsFgsAKbyCmKxmJ3pedLPPfAkDwE0ueYrPPdEKDN5LOBrn94X6Wm04hne85jd4EkeBLiG556YTeF6sHAlPR2T1WqF1WoFAJ70cwA8yTnC2943V8wm0oYD+p550s8t8CQPALr33d7ejry8vJDWpLNxJo/E+b2Rnob3lPQOhwNCoRDx8fE86WcIPMn9wHXve3BwEAUFBSGdZ7bO5JFe+3vbrhsZGYHZbMbChQsBfJfIo7p7nvTRB09yH/Dc+w4Hs3EmjwVcZ3pabEMIgcVigcViASHELbSnW3Y8Igue5B5wlaa6Jtco8UItMpkPpA0Frp+Zt5ne6XTyBhpRBk9yF/jb+2YYBk6n0217iSu8kTxaslauiNVDx9+DkSd9bMCT/BQCSVMFAkFYevLZOJPHgjDBRD++SO9aS8+TPnic9iQPRprqdDpDusbpuiYHpj7fUJNr3mrpedIHj9Oa5MHsfQsEgpiRfD4hEolLikCkHxoaQnZ2Nk96D5yWJPes+46GNDXQa00mE4RCISQSSUSvxRWzYU0eLjxJ39/fj6ysrGlWWae7a85pR3LP8Jzrl05ncvvYGCYPH4Gtpwf2oUHYR0bAiCUQKBQQqlSIW7kSsqpKCJRK9rWupCWEoLOzE0NDQ+zvk5KSkJycjKSkpJASe6EiFje80+mM2V44Jbw3qyz6sDkdSX9akTxUaaqtvx/S3Xsw1tICe1sb+3thSgqEaWkgdjucBgMcY2MYf+UVQCCA7MwzkXTLzZBVVbFktlqtaGhogFwuR1VVFYApRZhOp4NGo0FHRwdLcqFQCJVKNefFItGcyQPBWyLvdLTKOi1I7mvvO9BrJg8fwfibb8D0r39DAoApK0PynXdAfuaZEBcVQSCVur/GasVkXR3Mhw5Bv+cdDG67GXGrViHp//0vrFYrjhw5gqKiImRkZLAPG5FIhNTUVKSmpgKY0oG3trZibGwMw8PDiIuLQ3JyMlQqFeRyecRuwvkQrnu7lj+crq45857kVJp67NgxVFRUcPrSrG1tGHv8cZgPfQNBcjKSbt6GwdJSpFZUIDEx0efrGIkEslWrIFu1Ckk33wz9O+9C+/zzGLr2OuCqzVj5wx+yXuq+IJFIoFAoIJfLkZaWBrPZDK1Wi87OThiNRigUCqhUKiQnJyMuLi7oz8NtvLNsCy3W8OWa40n6ue6aM69J7rr3bTKZAn5BDo0Gmud3Qb9nDwQKBVJ+9jMor7wCAqkUQ01NQWXXBTIZ4rdcha60VMif34XMP78Ce14+cPmmgK91VdfJ5XLI5XJkZ2eDEAKDwQCNRoOWlhZYrVYkJiYiOTkZycnJEIvFnMcXK8SS5JGQH3vW0vtyzZlLpJ+XJPe2983ly9C/vx/6d95BwtVbkHzbbRC6zNrBZrwnJibQ0NCAgtJSpL35Btq23YzRX/0KwsQExK9dG9L7YhgGSqUSSqUSeXl5cDqdGB8fh1arRW9vL5vEU6lUSExMjGkSzxdiRfJoLD/8GWgMDAwgIyMDcrl81ltlzTuSB2PL5InEa66GfM15kHipNuO6T04IQV9fH/r6+lBWVgaFQgGn0wndrT/Ewpdehvre+5D91psQ5uf7PB/XB4pAIGBncWCqW4tOp8Po6ChOnjwJkUjE/l2pVLrlIubbmtxbC6pIw5X0Go0GGRkZbq45dKafbbX0s2MUEYLdbsfk5KRPggdMzEgkXgkOcCOe3W5HfX09dDodVq9eDYVC8d1rJRJkPPUkGLkcI794EE6XDiiRAk3iFRcXo7q6GsuWLUNcXBwGBgbw7bffoq6uDr29vTAajTGdYWN1nViSitbJ0+o5Gi1arVYYjUZs3boVLS0tMRuPP8yLmZzL3jediUMNYQPN5AaDAfX19cjNzUVOTo7XY0QpKUi992dQ3/8A9G++ifhrrvF6XKTEMFKpFJmZmcjMzAQhhE3idXR0YGJiAhKJhJ3tw03i+UIsZ/JYktzzXvI00NBoNJDJZDEbjz/MeZJz3fsOl+T+iDcwMICuri6UlpZC6SKCcX0tRfyll0L2/n5MvPxnyDZtgjBAtj1S8EziDQwMwGg0wmq1uiXxVCoVkpKSIpbEm68kB/wn+uhOyGzAnCW5r5ZEvhCO9tzX6x0OB5qbm2G327F69WqIRIE/ToZhkHzrDzFww40wvvseEq671usxsVgzx8XFITc3d1oSr6enB4QQdj0fThJvvpI80PdjMpl4kocDfy2JfCFcknsSz2g0oq6uDtnZ2cjNzQ3qRo6rqIC0qhKG11+HcstVYDg8HKIB1zF7S+JptdppSTyVSgWlUsn5/c5XkgeCzWbzWpcwE5hzJA9U9+0LkZzJh4aG0NHRgeXLl/sVx/iD8uqrMXrPz2A5egxxZ6x2+9tsqFoTiURIS0tDWloaAMBisUCr1aKvrw8GgwFxcXGsKMefEm++knw2bpX5wpwheaie5xSRIDkNz81mM6qrq8Nat8adfTYYmQzmTz6ZRvLZCG9JPKq3N5lMUCqV7EwvdZH7zkeSB3oAzzaV35wgeTh73xThktxms6Gnpwd5eXlYunRp2F+iIC4OceeeC/M//4mkn93jFrKHY1DBFeFECq5JvJycHBBCoNfrodVq0dTUBLvdzirxHA5HTMgXS5LT7TN/mE1En/Ukdzgc6OzsDLtAIxySq9VqdHd3Iz09Hfn5+SGdwxvi1qyB+eOPYWtvh2TpUvb3c0UG6nqehIQEJCQkIC8vDw6HAxMTE9BoNJiYmEBdXR0b2kdLiRcLMQxFIJLb7fZZoTakmLUkdw3PJyYmgkr2eEMoJHc6nWhra4Ner0dRURHbBDASYBgG4rJSAIC1rt6N5EDsFGnRgFAoZJN4ExMTWLp0KQwGQ9hJPH+I9Uzu71pGoxHx8fExGQsXzEqSe+590/VwOKDterlicnISdXV1SElJQVVVFUZGRtxcRCMBYUYGBKmpsNbXA1dtZn8/GxJvkQIhBGKxeFoST6PRoK+vD3q9HnK5nH0ohBqtxZLkgfQWs2mPHJhlJPdlyxQsQb0hmAfF2NgYWlpasHTpUqSkpLBjifQ6mWEYSFasgLWpMaLn5YKZlLVKpVJkZWUhKyuLrRCkSjyz2exWTiv1qNn3d53ZsibnZ3If8Lf3LRQKw57JuYTrhBCcPHkSWq0Wq1atcrvBwrFk9gdxfj4mP/8cxOEAc+rGidVMPhu06wzDID4+HvHx8W5JPI1GMy2Jl5yc7FNwNJsSbwaDgZ/JPRFo7ztSM7m/c1gsFtTX1yMxMRGrVq2aNoZIz+TUkUSYlQU4HHCMjECUmRmx888WBBsxuCbx8vPz4XA4WCVed3c3GIZhy2kTEhJYslGXnVgg0JrcYDDwMzkFV1umSKzJ/ZGcbv0UFxez60Zvr4/U7KrT6dDY2DjV/M+ghwqA7kQrVOnpbDXTfFmTA+FFDNTrTqVSAZjaytTpdFCr1Whvb4dIJIJKpYLFYkFCQkKkhuwXgWby2SRpBWaQ5MHsfQuFQnadHioEAsG0cxBC0NXVBbVajcrKSr9VQ5GYyWmteX9/P8rLyyESiWBJTMTY75+Frr0dHbI4SKVSSCQStkFgtELqufoQ8ZXEGx4exujoKEZGRtjMvUwmi8rnxyXxdtrP5MFKU4VCYdiZbc+Z3NU5tbq6mlOBSzjEIISgoaEBAFBdXQ3glL45KQkAkJmYgKLVq2E2m9Hd3Q2NRoMjR45AqVSyM1mk7Z1mi1gjHNAknslkQmJiImQyGbRaLdrb2zE5ORlSEi8QHA6H36XBaZ1dD1WaGq5azfMc4+PjaGhoYJ1TuSCcmdxsNsNkMiEnJwcLFy4EwzDs8oM5VWpKzFMPMZlMhpSUFEilUuTl5bFJqL6+PrYyjNo7zaaCjJkGnV1dk3hOp5P1xAsmiRcIDofD7wPDaDSyy4vZgJiRPFTPcyBy2XWHw4Hu7m4MDg5i5cqVAZ1TPV8fykw+OjqKEydOQCaTIScnZ3pC75RZg9Ns+u53p9bkAoEAiYmJSExMREFBAVsZplar0dbWBqlUys7ykbRrnovwll0XCAQBk3iu5bRcH5pcxDC5ublhvZ9IIuokD6UlkSciMZMTQjA8PIzU1FRUV1cHLTsMdiYnhKCjowMajQarVq1CTU2N14cEIxCAkclATOaA5/SsDHMtEjGbzWxon5ycHLDMca6uyX2ByxaavyReW1sbJBIJGykpFAqf9ykvhnFBqC2JPBHuTD4xMYGWlhbIZDIsW7YspHMEM5NTrzeZTIaqqiqvGXPXz0L10K8hys52+xuXa8lkMmRnZyM7OxtOp5MN7fv7++F0OgOG9vNp5g9Fu+6ZxJucnGSdb6kSjz40XZN4XMQwpwXJaXLt8OHDWL16ddjbKKGQnBCC/v5+9Pb2ori4GKOjoyGPgetMbjAYUFdXh4KCAmRlZbm93hdxZeedN+1awSLY0H6+IRKKt7i4uGlKPI1GwybxaDmt1Wo9vbfQPPe+qYItHIQihrHb7WhqagLDMFi9ejVMJhPUanXIY+Ayk1MzCW9eb8HufYcbTgcK7anoRKVSzRoHk3AQacWbqxIvNzeXjZS0Wi2buKWRUlJSklsSLxQxDMMwlwB4GoAQwIuEkEc9/n4jgMcA9J/61bOEkBe5nDuiJA/FlokLghXDeHNODVc1528mdzqdaG1t9WsmEQzJoyGGcQ3tCSFobW1ltxG5hPazHdGWtbpGSjqdDkuWLGEfnF1dXWwST6/Xw2g0ejX09AWGYYQAngNwEYA+AEcYhtlHCGnyOPSvhJDtwY49YiQnhMBisQRty8QFwYTrvpxTI+EM4414FouFrVZbsmSJz/c9m1RsDMMgLi4OSUlJyMjImBdZ+1hr1yUSCWQymVsST6vV4o9//CNqampw00034ZJLLsGPf/xjLtbMqwG0E0I6AIBhmLcAbATgSfKQEDGSU2J7uyHCVW5xIajD4UBLSwtsNptX59RwpbHeSErlqUuWLGG7kgbz+kgcGwlEMms/U4h1qanntcRiMdLT0/Hoo4/i0KFDeOGFF/D5559z/byyAfS6/NwH4Awvx13BMMwaAK0A/ocQ0uvlmGmIaLjujYzh+p0DgRNRJpMJtbW1fp1TI7ENR0EIQW9vLwYGBgLKYSlm00wO+F/ze4b2er0eY2NjnLP2XK4RacTSGSbQpOVwOFBYWIhFixZF8rLvA3iTEGJhGOZWAK8C4NRUL+r75DTUjpYdDlfn1EiR3OFwsAm9YPbbZ+NMzoUUrlVhNGuv0+kwMjISMLSPtc/ZbLDNCvF76wfgqp7JwXcJNnreMZcfXwTwW64njzrJRSIR7HZ7xMM8p9OJEydOcHZOjQRxnE4nDh8+jJycnKAVTbNtJg8VtN8aXZ549k931doLhcJZQbxYI4Sc1BEAixmGKcAUua8G4NZ1g2GYLELI4KkfNwBo5nryiJLc2xuLhCTVE2azGXV1dUhPT+fsnBruTTAyMgKTyYTVq1cj6VRRSTDwRvK5kKQLBJlMBplMhgULFrgZPjQ0NMDhcMBqtUKj0SApKWlOZu29gYslc5DnszMMsx3A3zG1hfYyIaSRYZhfAfiWELIPwJ0Mw2wAYAegAXAj1/PHLFyPBAghGB0dRWtrK5YtW8Z2+4gmXOWpcrk8JIIDs4+40RiLp+EDfRiPjo6ivb0dEomEneXj4+Nn1ezLFYHW/larNaRqQULIQQAHPX630+Xf9wO4P+gTI0bheqRI3traCr1ej+rq6phkeW02G+rr6xEfH4+qqiocOnQo5HPN1TV5OBAKhZBKpSguLgYwJRul+8qeoX2432esHqBzrZYcmCPh+uTkJEwmE1JTU1FVVRWTGUCv16O+vh6FhYXIjIAtExfiMqYxCEaaIR9qQoZmFGLzV4BIBkf6MjhTlwKi6LQXjhY8E29xcXFYsGCB19De6XSytk7R8maPBOaabh2IUbhut9tDfj11To2Pj2drsaONwcFBdHZ2oqysLGJfmDeSE4cdosEjELXsg6jjYwgMwwAAOYAkwE0KQQQiOHLOgnXlTXAUXggIZicJXOEvu+4Z2tOsPfVmF4vFnEP7WGbx55pTKzCL1+SezqlNTU1Rbx1EM/aTk5M+WxGHekO5kXxyAo4vn4W87i8QT46BiGSwF34P1gWVcKaWQB+Xhb7BERQvWQLGMgGhugGCoVqIm9+FfO82OJPyMXnx43DknBnye40FMYK5hmfWPpjQnm+s4B9RD9dFIhGsVmtQ57Farairq0NCQgJbqhmpBJ6vG89isaC2thapqak+M/aUqKGSHJPjEH7+MpjDf4DUqoch6yx0pv8H+uTLIU9MRUpKClQqFYjNBpt4EpAlg8iSYU/KA4ovg/Xcn0HU9iGkXzwC2V83w7r6x7CeczcgmBWmu9MQzoMkmNCeb6zgH7MuXPflnBpJ73XPL4le07WZgr/XB31DEYLE/s+QUfcUhOYxjKWfhbj/3Aln+gpkMQwyPW5iu90OQgjGx8ehVCq/u55ABPuS78Ne8B+QfvYgpIefhcAwiMlLngSY2bc9FaloIVBoLxQKYbVa2eqvaEYoXDzX5/VM7g1cyRnIOTUSijVaiUa/JEIIenp6MDg4yEmeGlLWe2IAoo/uQ17bh9ArFmFo7W+Qu3o9AMBxKsLxvIknJibQ2tqKgYEBTExMID4+HiqVivV+gyQelv98DCQhF9IvfwsilsNy4cPALNuSitaSwDO01+l0aG1tjUrW3hN84s3bBThsodGtKn/OqZHuouJwOFjvc67y1KAfNEY1JC+eBzhsaFn4X7Cs3Ialy1YA8L/lIxaLIZVKUVJSAkIIjEajmxkhW8dc/WPAaoD0yPNwZpTBVnoN56HFYk0eqzBaLBYjPj4ey5cvdwvtGxsb3T6vSGTtT3uS+9pC8xeuc3VOjaSZIy1oca0354KgZ/L4dIyv3I4mx0LEZS1Fisr3UsDfNRUKBRQKBRYuXAiHwwGtVssKTOIS16Ei/RBkn/0S9rzzQRIWBH2NaCFWWW9XgUoks/bewCXxlp6eHtb7iTRmLFx3DZW5OKdGypZ5dHQUvb29WLFihd+ClnDHQJcfI/HnYMmKJejr74uIGEYoFLqFqiaTCYPSn6Pgw+tg3vMj9JzzW7YsdKb3mmNJcl/vlWvWnqsve6B2TPM+u+71Al7CdbvdjoaGBojFYs6hcrgzOSEEBoOBLWgJZa3GdSZ3OBzs+1u1ahV2n9yNp48/jfPSzsM14mtQllIWylvwCrlcDvnSM2AfvwtpXzwKO9QY0gnQ2dkJkUiElJQUpKSkzIj5w0zM5IHgmbU3GAwYGxubthTyFdpz8Vw/LcN1V3JOTEygoaEB+fn5WLCAe2gZTqskm82Guro6AMCSJUtCTsZwmcnNZrNbbTsAlKeW49yUc/HF6Bf4xz/+gfyEfGwo2ID/zP5PqOKmm/CHkuCzVmyF5PBzSD3xOhTrdwH4btbq6OhgO4zQUHW27ZOHe51Q1v4Mw0CpVEKpVLK+7DqdDmNjYzh58iT7kHQN7edaHzQgBjM5XQe7OqeGoiQLNVyn8tRFixZBo9GEpXEORD66FedZPLMkeQl+VPQj3IJb0ORowt6OvXim9hk8V/cc1mavxfVLrkdRYlHI4wIASBNOEf15MOMPgCTmus1aTqcTExMT0Gg06OnpgcVigc1mg1gs9usxHg5iOZNHIsEnFArZyAf4rs9ad3c3G4ZbrVa//m2nRbjuSQT6c319PeucGspaMZRwnfq90YeKTqcL2+fN1+t7e3vR39+PqqoqxMVN15gzDIM4Jg4b8zZiY+FGdIx34J22d7Cvax8+7vsYZ2eejeuLr0d5annIBSq2susgPfwcRK0HYKu+bdrYk5KSkJSUhMLCQpw4cQJCoRA9PT0wGAxR2XaaayT3BO2zRi2aDQYDWlpa0N3dje7ublaQk5SUxN7ToYTrHJxapQBeA1AFYAzAFkJIF9fzR30mNxgMMBqNyMvLCyqT7YlgSE7lqRaLxU2eGm7yzhv5nE4nmpub4XA4/OYXPF9bkFCAO0rvwI1Lb8Sejj14u/1t3P7v21GeUo5rF10LBQk+5COJC+FIL4W47eA0knvCtZuIN0UZ3Zd3E+MEO545TnJX0NBeLpcjPz8fcXFx0Ol07HJIJBKhubk56Jn81D0dyKn1ZgBaQkgRwzBXA/gNgC1crxFVktOZlPYBCwdcCTo5OYm6ujqkpaVNk6dGwrHV9fVUCpuWlob8/Hy/N7QvS+cESQJuWnoTri66Gu93vY83297EvYfvRXFcMR4oeADFScVBjdFevA7SL34DRj8AovSd83AloOe2E3Ue9SnG4Yj5RHIKuib3FtrX1dWho6MDl156KSoqKvCnP/0poMDq8OHDQGCn1o0AHjz1790AnmUYhiEcw72IfzI0OdHY2Ai1Ws2G5+HW+3KZybVaLY4ePYpFixahoKBg2g0WyZl8fHwc3377LQoLC71ey99rvUEmkuGqoqvwt4v/hh0rdqDf2o+bPr0JDx99GCPmEc5jtBdMefsJ+77h/BpPUOfRkpISrF69mt1vbmpqwpEjR9De3g6NRhPws5zPJPeEVCrFDTfcAKVSiWPHjuGee+7xumzzRH9/PzDdqTXb4zDWzZUQYgcwDoCz6CLiM7nRaERNTY2bc2okHFv9WSrTPfehoSGfa2J6jkjM5LQUtaKignNoxnWdLRaIcUXhFcgez8bxuON4u/1tfNL3Cf6r+L9wbfG1kAr9z6TO1CUgojgIh2pgL7mc09gCjduvGCcujp3lPWetWJI81DbEwSKQGMbpdEIsFqO8vDwm4+GCiH8y/f39WLZsmZvQhO6Vh0NyXx1Q6J60SCTyKYmliMRM3tfXBwA+S1H9vTaYY+VCOe4ovQOXF1yOXY278KfmP+HD3g/xQOUDKE/1cwMJRHCkl0I4VMv5esHAmxhHo9GgtbUVFouFTUYlJyfPy5nc37VCiVazpxpd+nVqxXdurn0Mw4gAJGIqAccJEf9klixZMk1JFq5xBD2H50xuMplw+PBhpKSkYPny5Zxa14ZKcpvNhsHBQTAMg5UrVwY9c/hak/sCvWFyFDl46IyH8My5z8DutONH//4Rnqh9Aia7yedrnZnlEKjrAeL7epEioFwuR05ODsrLy7Fq1SqkpqZCp9Ph2LFj6O7uhk6ng9FojKo9UyxJHsiJNVin1urqauCUUyvDMBJMObXu8zhsH4AbTv37SgCfcl2PAzHIrgOR0Z17EpS29AlGnhrqTE47lSYmJiI1NTX0evIwjl2Vvgp/+d5f8ELjC9h9cje+GvwK91Xeh1Xpq6Yd60wuAGO3gDGOgCh81wNEGgKBwK3/d2dnJ8xmM9uJhTZYVKlUEQ2vY9lYwR8IIUE/zE59DoGcWl8C8BeGYdox5dR6dVDXCGpEISISZo6uopr29naMj48HLU8NpVWSWq1Ge3s7SktLOSWbfCHUmdwVcpEc/1P+P1ibvRYPH3sYd35xJ65cdCW2r9gOifC7z8GpnMrbMPr+mJLcEyKRCMnJycjKypomxqEPhJSUlLDFOKEq3kK9li9Yrdagdh9czhnIqXUSwOagT3wKURHDeCISMzlNXB07dgxKpTIkQ8dgC0yoFfOqVasgkUig1WpDDjuDncn9Xac8tRyvXfgadjXswt9O/g1Nmib83xn/hyz5VD90WokmmBiAM6syImMKBa5LAk8xDvVjj4QYJ5bhuj/MRrUbEMNwPdw1+cTEBIxGY8CSVH/gSnJaQCOVSln7Kfr6cB5WrtcmhECn00GpVIYUukqFUtxVfhcqUivw0NGHcOMnN2Lnqp04J+scOBVTZGcMgz5fHwsLY3/rfolEgszMTGRmZoYtxokVyQNdZza6wgBzZE0+MDCA7u5uyGSykAkOcCM5rTVfuHAhzXy6vT7Uh5XrzWG321FXVwdCCCYnJyEWi0OuFrsg+wIUJRbh59/8HPd8fQ+2Fm/FLUtvBAAwVmNIY40UuCb3whXjxIrkc9EwApjl4brT6URLSwusViuqq6upOihkBCI5tX9evny5104pwa6rPeF0OmE2m1FTU4OFCxey17DZbNBoNGhvb8fk5CSSkpJgt9s5bzvmKHLwxwv+iCdqn8Brra+hdbwVTwnFENknQx5rJBBqBp+KcdLT0/0745xqvRTLmXyu2TEDMUy8WSyWoF4zOTmJ2tpaZGRkoKSkhL1Zwtn68UXyYMQ0oYa5AoEAFosFx44dQ0lJCZRKJZxOJyueSE9PZ6OU8fFxDA8P4+jRo4iLi2NneX8KKqlQivsr70dJcgl+V/M73JSZhiet40jwM6a5UGrKRYxjNpthtVo5tZAOB1xcYU6Lmdwbgp3JNRoNmpubUVJSwm7HAOFZIgPeSe50OtHY2AiGYQKKacKZycfGxqDRaLB69WpIpVIwDMOuxZ1OJwghLOllMhkkEgkqKysxOTkJrVaLlpYW2Gw2JCcnIyUlxWdv8E0Fm5AuS8f/++KnuGniEH430YX8hPxpx830mjxUeBPj1NbWorOzE1ar1U2ME2lnnLno1ArMsnCdEILu7m4MDw97nVHpeUINzTxJTqOFzMxMTt1ZQikBpVt+Y2Nj7JrSUzBB349QKITBYEBTUxPbwF4qlbolqHQ6HasRkMvlrKmB61r17Myz8UfVGuzQH8Wt/7oVj571KFamrgxq3JFALBRvcrkcEokEpaWlYBiGrQyLhjMOvyb3dxEO++R2ux2NjY2sJZQvx9ZIVZHpdDo0NjYG9Fr39XoucDgcqK+vR1xcHMrKylBbW4tjx46xM5GnkeDY2Bgr8KE3i+ss73A4kJyczBpS0N7gjY2NbhnphIQELFr7G/zROICffPkT3PXFXfjNmb/BmZmhd1wJBbG2f/IU47g640RCjDMXXWGAWbKFZjQaUVdX5zWj7Ypwt7AoSfv7+9HT08PJQNLz9Vxn8snJSbZQh5oOVFdXw2q1svZCJpMJSUlJSE1NhclkYj3nXfeJXWd5sVjMkp0QAplMhri4OPb8Wq0W/f39aGpuxgNf2XHNylQ8e86zuPvQ3bjv0H34zVm/wRkZZwCYfW2SwoW3ScGfM04oYhwuW2jBWJrFCjO+JqehZ2lpKRIS/KWJIiOqMRqNGBkZQXV1ddT059RmeunSpUhISHBTZEmlUrcbT6vVoq2tDWazGYmJiRgeHkZqaqrPJJJAIGDPRWd5h8MBp9PJhqb9ukmMfnIcxG5Dd0s3tim34Xnr87j363vx2FmPoTqjOqj3HSpi6fEWCJEQ43CZyU/bNbm3cD0UeWo4VWRWqxW1tbVgGAbl5eUh3XxcZvKhoSF0dHSgrKwMcXFxfgsWnE4nenp6kJaWhsLCQpjNZoyOjqK5uRk2mw0qlQqpqak+k2yuszw9n8PhQJdmautsZdEClOUkwG634xfqX2Bn/U7c/dXduCv3LuQL8yPWN94XYik3DRb+xDiEEDbB6SrG4ZJ4O23Cdc8ElWe4ThsaJiYmBiVPDXUmp2aORUVFaG9vD3l28TeTUxmsVqtFZWUlhEKhX4JTB5vc3FxkZU0p1ORyORYuXMhuFY2NjWFwcJBt3UzX8r4eiHSW75+YcrUtSp+6QUUiEYoWFOG5lOdw19d34Zm+Z3Cr6lZYT1ghkUiiZtscq8KRSGzT+RLj6PV6yOVyqFQqWCwWv9t0p/Wa3HUGppbMRUVFQXeaCIXkrjOrQqFAe3t7UK93hS+S05p2iUSCiooKNkz1dfONj4+jqakJJSUlXkU3wNR7dRWEGAwGjI6OorZ2qk48JSUFqampUCqV067TOWZCQpwIqco49m9OpxOpwlQ8edaT2P7ldryseRlPn/E08pPyMTY2xianaKWdqzlhqJhN4Xow8CXGGRoaAsMwMBqNXrcxwxHDMAyjAvBXAPkAugBcRQjRejnOAaD+1I89hJANgc4dE5LTL5omvMrLy0P6MILJrtPlwMTEBKqrqyEWi4O+nie8hesWiwU1NTXIyspiDfv9EXx4eBhdXV2oqKjgLN6gJoJKpRIFBQVs8q67uxsGg4ElJs0aH+nWYXmWO/npLJ+VkIUdOTvwYNuD+FX9r/Dcuc8hIyODFeLQ5NTJkychlUrZWT4UoUksE2/RgqsYx2azseH7yMgI2traWGecuLg4tiNLiLgPwCeEkEcZhrnv1M/3ejnOTAipCObEMQnXqZxzdHQ0pIQXBdfsOtWGx8fHo7KyMmI3mifJJyYmUF9fzxpl+FuD0rZJNJwP56EjkUhYq2CaNR4ZGUFnZyc0VgE6Rk24vDRt2uuo8GeBbAEeO/cx3Pn5nfjlsV/id2f/DgJMRVs0bC0oKIDFYoFWq0VraysrNElJSWHlpIEQqwx+rOBwOCCRSNgdEeA7Z5ydO3fim2++wW9+8xtcccUVuOiii4K9zzcCuODUv18F8Bm8kzxoRH0mp4ITgUCAsrKysL50LuG60WhEbW0tCgoK2LVupOAarg8PD+PkyZMoLS2FTCYLmGBrbm6GQCBARUVFRJNRrlljAPjzl50ADFjAaHDokBrJyclITU2FQqFAQ0MD0tPT2c4u91fdj19/+2s8UfcE7qu8j31/NFsvkUjYWZ6c6pc+MjKC9vZ2yGQydpb3VUMdK5LPpImjXC6HXC7H888/j4suuggbN27EZ599hgsvvDDY02cQQmjZ4BAAX5VYcQzDfAvADuBRQsh7gU4cVZK7ylNbWlrCPl+gKrDR0VGcOHGC03ZcqNd3Op3o6OjA2NgYpwSb1WpFfX090tLSWGPLaOLzjnEUpMhx6bmrWJ334OAghoeH2VDTYrFAKpVifcF69Bp68WrLq1iavBSXF17ud4vO9WFC5ba0aITuBCQkJESkzoArYu3U6u9aFosF69atw/r1673+/Xvf+x6Ghoam/b6xsXGj68+EEMIwjK8QJY8Q0s8wTCGATxmGqSeEnPQ37qiQnBCCzs5OqNVqVp5K19PhmjlarVav1+vq6sLIyAhWrVrl152Dzlah3Bg0AaZQKDgl2IxGI9uiKS1tevgcabSPGHGoU4vt5+cDmPq8pFIp9Ho9u0QYHR1FQ0MDHA4HVCoVrsm9Bi3aFjx5/EmUp5SjMLGQPZ+vLTpCCCvCcZXbDgwMoKWlBQqFAikpKXA4HDEheazW/YHu30BRxT/+8Q9ff9rLMMwwwzBZhJBBhmGyAKh9XKP/1P87GIb5DMBKALEneVtbG1se6nqjRMKx1TNcpx7vIpEIq1atCkjeUEsTaYJNIBCguLiY/UJ93WAajQYnTpzAihUrwknGBIU/f92DOJEA11Rns2NobW1FWVkZm+hUKBTsNpFGo8FA/wAuE1yGJqYJ931xH16+8GUo4rxvA/mb5WlRCMMwMJlM0Gq1rDceDeu97QSEi3AnjmDg7/6NQNRCzRofPfX/vZ4HMAyTDMBECLEwDJMK4BwAvw104qiQfNGiRdPeMN0rD6fPlqcYxlsH0WDPwQV6vR51dXUoLi5GY2Mj+vr6kJaW5rP0s7+/HwMDA6isrAzJ8ysUqPUWvF83jKuqFiBZLsHg4CB6e3uxcuVKr2MQi8XsensZWQbBSQH+9/j/4sHPHsTVqVf71NdT+JrlnU4nu04dHR3F0qVLodfr0dvbC4PBgISEBLaoJhJmjrGcyQNNUmES/VEAf2MY5mYA3QCuAgCGYVYBuI0QcguAEgAvMAzjxJTT8qMe7ZS8Iiok96Zwi5RjKz2Hrw6igRAsyV2NHGUyGSorKzE6OorGxkY4HA6kpKQgLS2Nna3b29thMpnY9Xqs8Ny/OuEkBFvPyEFnZyd0Oh0qKys5EYlhGFxUdBGajE14o/UNXLL0EmSJs6bp61Uqlc/35DnL9/X1QSgUQiKRsA8MhmGg1+uh1WpZ/Tid5X09TAIhlmtyfyQON8tPCBkDMC1bRwj5FsAtp/79FYDSYM8dtS20aReKgGMrJXmgDqL+wJXkdJ0/OjrqlmCLj49HfHw88vLyYLPZ2P1qvV4Ph8OBxMRELF++PKYE/6ZTi7ePDeKms3JhHO4GIQTl5eVB3/y3r7gdR9VH8bu63+HtS99GdnY2nE4ndDodRkZG2L1zSlpve+f0c9Pr9Vi5ciV7L9BZnu455+bmwm63Q6fTobOzk32YpKSkBFULHmvprD8FY7RNK0JFbHrLIDJmjgBYx1R/HUT9gQvJXY0kKioqAHg3zReLxcjMzERSUhLb+JAQgm+//RZSqRRpaWlITU0N+kEUDMw2B3buP4GFyXFYk6yHVJrIqTebN0iEEtxfdT9u+uQmvNDwAn668qfTyjdNJpNPfT3DMGhtbYXdbkdpaakb+VxneRrai0QiNwMIqh/v7Oyc5nvnC7xTa2DElOThzOQWiwVNTU0QCASsQUAoCERyq9WKmpoapKens2Wv/jLoer2erThzXTaYTCaMjIx4DesjtYYkhOA3H7WjV2vGfavjkLsgI+xSxxJVCa5YdAV2t+/GZfmXYWnyUre/+9PX2+12KBQKLFu2zCfxaFgvEomm1cpTVV9+fj6sViu0Wi3re0cLRjyFOLOF5LPVFQaIYbgeDsmpsqywsBB9fX1hC2p8kZxmg4uKiti+3f4ITkNY1+w1hVwuR15e3rSwnspQ09LS/K5xueDlr3rwt6MDuDRfhHWrFrMzYri4bcVt+LTvU/z22G/x4toXIWC8k4jq61NSUlBXV8e6tNTV1QHwr68H/NfKU/14WloaGIbB+Pi4m68bneVjRfJAa25+JsfUmjyUcH1wcJDVekulUvT09IQ1Dl9FJlSLvHz5cjY89CdR7enpwejoKKqqqgJKVGlYn5mZCafTySrH6Bo3lLD+QMMwfvdJB1ZnCPD/NpYhiWOrKC5QSpTYUb4Dvzj8C+zt3IvLC313R7XZbKirq0NmZiYb+XDR13uDvy26xMREdklAhTjNzc2YnJyERCKBTqdDQkJC1AgfKIs/W62fgBiH68E4thJC0NraCqPRyOrd6ZceDjzDdeorp1ar2UaGgSSqLS0tIIRg5cqVQd9UAoHAzcIplLD+QMMwHnivGUuSBXj62lVIVEZ+Brl44cV4t+NdvNj4Ii7NuxRxwukPIIvFgtraWuTn50+rKPTU19OZmK636Vrc13rbnxCH+t5lZGRgZGQEOp0OQ0NDOHHiBOLj49lZPpztWk9wsWM+rUgebrhOZ4eEhAS3DG0k1rKu4brT6URTUxNLWHoNX9ex2Wyor6+HSqVCXl5eRMYTTFhPCMEfPu/G7z/rxBKVEC9urUaiMjoZXYZh8MPlP8SP/vUj7O3Yiy2Lt7j9nWoUiouL3Rx1vcHzwTY5OclKkC0WC6uvT05ODriWB76b5Wl2PjExEenp6WAYhvW9c+3E4m/JwBVcTBz5cJ3jFhpdFxcWFiIzMzPi46AzOXWKSU1NRU5ODgD/BDeZTKivr0dBQUHQdfBc4S+sdwoleLPViU9O6nFergRPXbsaMmn45bP+UJVehcq0SrzW8ho2FW6CVDglqjEYDKivr5/Wh54r4uLikJOTg5ycHFZfPzIygtbWVsjlcnaW9yUkotWAJ0+eZM/lamctk8nc7LX6+vqg1+uhVCpZIU6wVYBz1RUGmGVbaK7Ck2hJQQUCAUwmEzo6OrBo0SKkpKQETLDpdDo0Nzdj+fLlUSl88TVOOvv9q3UUDx44AbXeig35DC5fIsJAX0/Es/XecMuyW9jZ/KrFV7GfhbdkYyhw9VGnBg2jo6Oor69nZ+K0tDS3whcagcXFxbHqStewnv4HgDVrZBgGBoMBWq0Wvb297NagP1WfK+ZqYwVglmyheesgGi24uqLKZLKAYgpXeWg097u9YXjCgsc+bsfBRjWyFQI8fukCXFq9JGrZem+oSq/CytSVeLXlVZyXeB66O7qj9lm4GjS46ut7e3vdZuLh4WEkJk7pATzhLaynpI+Pj4dcLneLILq6umA0GpGYmMgKcbwlBgOtyU0mU8Bly0xhxtfkvjqIRgPd3d0YHR1FTk5OwBpwGg4aDAbO8tBIoWPUiJe/6sW+uiEwDHB5kRi3X1CEnAVTy5doZOv94caSG7Hj8x14r/E93HzOzVF9CLvCVV9P69mpx7zdbgfDMEHr62kCzzWCYBgGExMTLOm9NWXg1+Re4OkO420LzV8HUX/nDXZvlGbE7XY7Fi9ejI6ODohEomlFJntrh/BVhwZn5Cci2apGdnJ8yM6uwcJsc+DLkxrsrR3CpydGIREJcHlpGlYpx3HuyhKf+vxIZOsDIcuaBZVIhQamIWYE9wSt41+4cCFyc3NhsVgwOjoakr7enxAnLy+PFeKcPHmSbUBJZc2+QG2dZyNmLFwP1EHU33mCIbnNZkNNTQ1SUlKwcOFCEEKgUCjcikxSU1ORlpYGjcmKL06O4f36YQBAYaoVZ55sw6q8JCzNUGChSgZBBNVqgxMWHOsZxz9aRvB5+xjMNieSZGLcdl4eLluihLrnJFasKAtqrRdJEQ71BdDr9fhB8Q/wYtOLGDAOYEF8bBsI2O12tp0VnQykUimys7ND0tcDwQlxJiYm0NvbC6PRCL1e79X3LhynVoZhNgN4EFNVZqtPFaV4O+4SAE8DEAJ4kRDyKJfzx4zkNKvNtYOov/NQ3XMgUCuowsJCNrHDMIybNNNms7H7t8VOPf6vyg4mKRtdZikOdenwbs0g3jjSDwCQiQVYnK7AkgwFClJkSFNKkRovQZpSglSFBHKJEAwYMAzAACAAtCYbRg1W9r9ujQmNg3o0DuihMU1ZJ6cqJNhYnomLlqahOj8JYyMj6O7uREVFRVghdzhhPdUp2O12lJWVIdOciZeaXsK+zn24bcVtIY8pWNhsNrac2JedVzD6+mC26KgQJyEhgZXVqlQqaLVanDhxgm1AabPZwpW1NgD4AYAXfB3AMIwQwHMALgLQB+AIwzD7uJSaMgHkeiHXz9lstmnKsi+//JLdcvGnb/aH48ePY8mSJQHbG9FIYcWKFQEVbMCUdVRbWxtyc3Oh1+uh0+mgUCiQpEqF1hmHttFJtKoNODFkQMuwAROToRXbCBkGi9LkWL5AieVZSqxYkIDlWUoIBVMRQnd3N8bGxlBWVhbVPAAN60dHR6eF9YQQNDU1QSqVoqioiA1T7/r8LrSPt2PvZXshZKJfZUejsIULF7JussHCbrdDo9FgdHQU4+PjnPzrPUFtxJctW+b2QKR5gj/84Q/4y1/+gvLyclx11VW49tprg304MwBwyunlbm8zOcMwZwF4kBBy8amf7z81hkcCnTxmM/nk5CRMJhNycnI4dRD1BS6imp6eHgwODmLlypUQi8V+E2wA0Nvby3ZSpV887aqhVqthHutBgViM1cvSkHZ+LqRSKSYm7ezsPGKwYsRgwaRtagYgAOizM1kuRqpCwv6XoZQiTjydIHTmtNlsETd79AZfYT0tmU1OTkZhYaHb53bxwovx9eGvcUJ7AstUy6I6PlooVFBQEJZ1lkgkCtm/HpiKBhsbG1nffm++d/feey++/PJLPPDAAzhy5Ei0yoyzAfS6/NwH4AwuL4wJyWkHUalUiry8vLDO5a+KzOl04sSJE7BaraxSLpBElYaklZWVbsRiXLpqFBUVwWw2uyW0UlNTkZ6WhsLUpLATc9TCSi6Xo7i4OOZe5TSsT0lJQU1NDVvocuTIEbewnjZLPDR0KKokp1ZbRUVFnDvOckGw/vW0EWdpaSm73vaWsf/qq6/Q0dGBkpISrFmzxuu1fZk4PvTQQ9i4caOXV0QOUc2uA3DrIFpTUxO2F5avmZyu3ZKSkrB48eKAAhe73Y76+nokJiZiyZIlAcckk8m8ruONRiOSk5ORnp7O2Y/c27gzMzNZ5d1MwJcO3TNbXyAvwJf9X+Kmkpui8jCi3WCXLFkSlONPKPCnr6eiqWXLlvlNqB07dgw/+9nPcOjQIb8Rhx8TR67oB+DqcZZz6ncBETWSU69xi8XCFphEwrHVW4MFk8nkFtoFIrjZbEZdXR3y8vJCks6KxWK3m0Or1WJ4eBgnTpyAQqFgZ75Aa2o6jsLCwpi4ufobhy8dumdYX3W0Cu/0voN/fvVPZCZnRlSEYzKZUFdXh6VLlwa14xIJuG5FmkwmHD9+HNnZ2ejr68PJkye96utrampwxx134J133gk7QuWAIwAWMwxTgClyXw3gWi4vjBrJ29vbIZFIsHTpUpZsVNoarmOra7hOvd1pgi2Qgo32IQtVd+0JV58yuo4fGRlBd3c3xGIx0tLSvJo+TkxMoLGxMWLjCBVUh85FsisWi/G9Rd/D7t7dwEIgS5EVMREODY1jKR32BvqgKSsrY/e9PfX1x48fh1qtxvvvv4+9e/di0aJFYV2TYZjLAfweQBqAAwzD1BBCLmYYZgGmtsrWEULsDMNsB/B3TG2hvUwIaeR0/lhm17lmxv2hs7OT7fHd19eHvr4+lJaWQiKRBEywDQ0Nobu7G2VlZTHx46Lr+JGRETaDnZ6eDovFgvb2dpSVlYX1WYQLnU6HlpYWlJaWct7+sTqsOP+d83FjyY24dcWt7O/9ZesDhfX0QeO69p0J0Ihm2bJlPh80hBB8+OGHeOihh9h77vXXX0dhYaHX4zkiqkmYqM3k3hJkkXRsbWlpweTkJNvrLJBEtbOzE+Pj46iqqoqZRNXbOr6pqQkGgwFZWVkwm82Ii4ubEfsi6rIS7F68RChBjiIHHRMdbr8PVYRDI5pIFbyECkrwkpISv5FEW1sbfvnLX+L1119HaWkpxsfHZ/RBzQWxE2QjdHcYV1AxTUZGBlasWBFw/U0rlkQiUUgOppGCSCSC2WyGVCpFZWUlJiYmoFar0draGtQ6PhIYGhpCb28vKisrQ5KpFiYWonOi0+ffuYpwLBYLmpubUV5ePqNEof36SkpK/C6dOjs7sXXrVrz66qsoLZ1yRp7JpRZXxJTk4c7kJpMJXV1dSEpKQkFBQUCCW61W1NXVIT09HQsXLgz5uuGCaucZhmG18KGs4yOB3t5eNxecUFCQUIDPBz6H1WGFROj/IeFLW19TUwOj0Yjs7GzY7fYZa3NMs/lLly71S9ienh5ce+21eOmll1iDkbmCqG+huSIcktNmCrm5uZiYmIDFYvFLAtqHrKioKGIGh6HA4XCgrq4OSUlJyM/Pn/a5uO7HL1q0aNp+PF3HKxSKsEjgqkMPxbbKFQUJBXAQB/oMfW6907hALpez7+WMM86AwWBAT08P9Hp9VEtmvcGV4P6y+f39/bj66quxa9cuVFdXR31ckUbMw/VQSN7f34/e3l5UVFSw2fX6+nowDMMWErgm0sbGxtDW1oYVK1bMaCLHYrGgrq4OOTk5nNsoB9qPT0tL82uT5A1UTedwOMJuHw0ASdIkAMCEbSLo19I+6itXroREIoFCoYhZyawrqOBmyZIlfgk+NDSELVu24Omnn8bZZ58d8XHEAjEP14NZk9Obk7YdoqF5QUEBCgoKMDk5iZGRETQ3N8NutyM1NRVOpxMajcZnD7BYgUYSixcvDlm15W0/Pth1PM1JSKXSiKnp5KKp9bPJZgrqdWq1Gl1dXazc2BWxKJmlsFgs7E6PP8GNWq3G5s2b8dhjj+H8888P65oziZiH61wdW+12O+rq6qBQKFBaWspa4rqeNy4uDrm5ucjNzYXVakVDQwMMBgPEYjG6u7uRnp7O2vjGEtQiKZIdTUPZj6dLheTkZOTn50dkHAAQL5rKgpvtZs6vGRwcRF9fn1eCe4O3bH0kwnqqiS8uLvZL8NHRUWzevBkPPfQQLrxwWouyOYWYh+smU+Cnv9lsdqs+CtQm2OFwoKmpiXV3dTqdGBsbQ39/P5qbm5GUlMTeFNHOrqvVajYcjZZdFJd1fHJyMk6ePIkFCxZwNuTgCploamlktBs5HT8wMMAWDIWS7IuUE47VasXx48fZ5hm+oNVqsXnzZuzcuROXXHJJ0OOdbZh14TotZlm2bBlb9ugvgz45Ocmue2mLINrZIz09nTUUUKvVaGtrg0KhYLt+RHq7imauKysrg3YDDQee6/ihoSHU1dVBKBRCr9djbGws6HW8P8jFU+E6l5m8t7cXIyMjbD4lXIQa1rsS3N/yaXx8HJs3b8a9996L9evXhz3e2YCoKd4ATAvNdTod+vv7sXz5cq/HDwwMoLu7G6WlpZBKpQEVbFRI4dmHzBdcy0fHxsYgkUjYxF04tkaEELZn1/Lly2e0N5erDj0pKYmVY2q1WnYdn5KSEtZDiBACq9MKiUDi9/vp7u6GVqtFWVlZTD4TGtaPjo66hfUKhYJts+Vvp0Wv1+PKK6/E9u3bsWXLFp/HRQFRXU/GlOR6vR6dnZ0oKytzv8gpkuj1epYkgQiuVqvR0dERljTUaDSyslOGYZCWlob09PSgJK+0A2pcXJybwcJMgDZf9Kb/dl3Hj46ORn0/nm7XrVixYkYeejSsHx4eRn9/PxQKBbKzs32G9UajEVdddRW2bduG66+/PtbDnbskt1qtbmaOZrMZLS0tbmICWvIpl8uxaNGigOE5bWuk0WhQWloasbDYYrFArVZjZGSEzdSnp6f79eSmnV7S0tJmVGwDBK9D96Wrj8R+PDVADNX9J1Kw2Ww4fvw4CgoKEB8f71NbPzk5iS1btuCaa67BzTffPBNDnT8kp11LqKCAihFycnKQmZnJSaLa3NwMhmGwdOnSqN1AdH9arVbDbDZDpVJNy9RTKWQ0O6pwBXUtLS8vD2lWpu93ZGQk7P34trY22O12lJSUzGhUQ62j8vPzp5Xxuob1d955JwwGA9asWYPHHnssbP18b28vtm7diuHh4alWUz/8IXbs2OF2DCEEO3bswMGDByGXy1FfX19FCDkW1oX9IKYkdzgcOHLkCM4880yMj4+joaGBLQgIRHA6a6ampoZlHxUsHA4HNBoN1Go1JiYmkJiYCKVSib6+PpSUlMS87tkTdGuqvLw8InbJdD8+2HU8IQQnTpwAAE4mHNGE3W7H8ePHkZeX5/cBbLVa8V//9V8oKiqCWCxGa2sr9u7dG9a1BwcHMTg4iMrKSuj1elRVVeG9997DsmXfOekcPHgQv//973Hw4EF88803OOussw4TQjhZOYWCqGbXPb3XaWWaaztiiUQSsAac1vgWFhbGfNYUCoXs2tXpdKK3txcnT56EWCxGb28vLBZLVDL1XEAz1+Ho0D0Ryn48IQTNzc0Qi8UznpegBF+4cKHfe8Vms2Hbtm244IIL8NOf/jRiY6biJQBQKpUoKSlBf3+/G8n37t2LrVu3gmEYnHnmmQCQxDBMFiFkMCKD8EDM70yLxYKBgQHWUy1Qgk2r1bL+7DNpJgAAw8PDGB4exllnnQWJRMJm6ru6uiKWqecC2lbKYDBE1fSRy358amoquru7ER8fP834Mdaw2+2c3F3tdjv++7//G1VVVREluCe6urpw/PhxnHGG+yTd39+P3FxXJyf0YcqocW6T3OFwoL6+HoQQlJeXBwzPgaktNaqSinUfMlfQZJ9Wq3VrmeRq9Eh7rNXW1oacqec6lhMnTsDpdEZEhx4MPPfjR0ZGUFtbC0IIJBIJNBpNRPfjgwEleE5Ojl+COxwO/OhHP0JJSQkeeOCBqH1+BoMBV1xxBZ566qkZn5yiHq4D3yXYsrOzYTQaMTQ0hLS0NJ8hJs3QGo1GVFVVxaQiyRdcSeWvHl0ulyM/Px/5+fmwWCyspt5ms7GZ+nAz167bdTO97hUIBFCr1cjPz0dOTo6bPVKk9uO5wuFwsA0Y/Hn2ORwO3HnnncjJycGDDz4Ytc/PZrPhiiuuwHXXXYcf/OAH0/6enZ2N3l5Xd2XupoyhIKqJN2ps39DQwNbrGgwGDA0NYWxsDDKZDOnp6UhNTWVvBmpPLJPJZnx953A40NDQAIVCEXIo6pm5pltVwWrqo6VDDwWUVOnp6dMcZl3X8WNjY245jWhYbjkcDtTU1GDBggV+K/2cTid+8pOfQKFQ4PHHH49atEEIwQ033ACVSoWnnnrK6zEHDhzAs88+65p4O0IIWR2VASHKJO/v70dra6tb5pd+uLQX9fDwMEZHRyGRSKBSqTA0NIScnJyI662DBd3ui6T221umPj09PaCmnto2L1iwgJXuzhRoX7KsrCxOY/G2Hx+pajL6sMnMzPQ7FqfTifvuuw8A8Mwzz0R1OfHFF1/gvPPOQ2lpKXudhx9+GD09PQCA2267DYQQbN++HR9++CHkcjkaGhqqffU/iwSiSvKxsTHWijnQ+ntkZARNTU0Qi8WQSqWs9nwmykVpNj+ahhOEEFZTr9FoEB8fz0Y1rssYX37oMwG695ybmxuSlTXdn1ar1WHtxwPfETwjI8PvQ9jpdOIXv/gF9Ho9/vCHP8yoOMcP5q4Y5tVXX0VhYWHA4gRaUUTVWvTpr1arASBqSSxvoJbNsczme0pOJRIJq7luaWnx6ocea9ASzUg9bDz34+lDjss6nivBCSH49a9/jcHBQbz00kszmtsJgLlL8nfffRdvvPEGTpw4gbVr12Ljxo2orq52C9npXi+1VfYElZuq1Wo4HA6kpaUhIyMjKsZ/IyMjrB4+Fg8UXzCZTOjt7UVfXx/i4+ORlZUVs4ecN9AKrkWLFkUlsqE9ymjhkL91vNPpRG1tLdLS0vx2nCGE4Le//S3a29vx6quvzoiOIQjMXZJTmM1mfPjhh9i9ezdqa2tx/vnn47LLLsP+/ftx9dVXT+tD5gtWq5Wd4a1WK1JTU5GRkeFXX84VfX19GBoaQnl5eUzLRL3BVYcuEonY9xzJTD1XUPnu4sWLYxZNmM1mNllJ33NaWhri4+NZ1aPHPrMbCCF4+umncfz4cbzxxhsz/n1ywNwnuSssFgvee+893H333UhPT8fKlSvxgx/8AOecc05QX4anvjwlJQUZGRlBJ3RchSUrVqyY8ZDOnw7dc01LNfVJSeE3XfQGWrYai75kvuD6nkdHR6FUKlFYWOhzHU8Iwa5du/DFF1/gb3/7W9SFSRHC/CI5AOzcuRPl5eVYv349/vnPf2LPnj348ssvsXr1amzatAnnn39+UF+Ow+FgCW8wGKBSqZCRkRFwm4oWvIhEohnpJuqJYHTo3jL1dG86EsklmnwM5EUeC1DjzqSkJCgUCrd1PHWFEYvFIITgpZdewkcffYQ9e/bMqMdfkJh/JPcGu92Ozz//HG+//Tb+9a9/YeXKldi0aRPWrl0blNrN8+b31XGUesilpKTEolldQNDcRFlZWdDrR66Zeq6YLX3JAHeCu35Pnuv41157DRaLBb29vfjoo48iopDctm0b9u/fj/T0dDQ0NEz7+2effYaNGzeioKAAAPCDH/wAO3fuDOVSpwfJXeFwOPDVV19h9+7d+PTTT7Fs2TJs2rQJF110UVAJN9eOo+Pj4+y+dHx8POrr67Fw4cKQtoIiCbpcMBqNETFYcL35qTkE1dRzmdmo8cRM9yUDpr6/hoYGJCQkBBQAPffcc/jrX/+KpKQkGAwGfPLJJ2GXjf773/+GQqHA1q1bfZL88ccfx/79+8O6DuZqL7RwIBQKcd555+G8886D0+nEkSNH8Pbbb+PRRx9FUVERNmzYgEsuuSSgE6pnRZVOp0NfXx/UajW7pnM4HDO2DneVzJaWlkZkucAwDJRKJZRKJRYtWsRq6uvq6gB8tx3p7WE5W/qSAd8RXKlUBiT422+/jf379+Ozzz6DQqGAwWCIyPjXrFmDrq6usM8z05iVM7kvOJ1O1NTUYPfu3fjggw+Qm5uLDRs2YN26dZzqurVaLU6cOIHly5fD6XSyoZ5cLg8rvA0FVIcuk8mwaNGimOQDqKbeW6Z+fHwcLS0tKC8vn9HtQ2Dq4UflxDQU9oX33nsPu3btwv79+6OSO+jq6sL3v/99nzP5FVdcwZqIPv744z79CwPg9AvXuYDeCLt378aBAweQmpqKTZs24bLLLvPqxjk8PMy2LfashTYYDKy8Ni4ujg1vo7X1QnXoKpVqxvIBdrudTVZOTEywbi7p6ekzmoAkhKCxsRFyuTxgO+ADBw7gySefxIEDB6KW/fdH8omJCQgEAigUChw8eBA7duxAW1tbKJfhSR4INOzdvXs33n//fSQkJGDDhg1Yv3490tLS8M0330AikXBKarnq6UUiESuvjdRWzGzSoQPftZTKy8uDVqtlcxeRzNRzBSEETU1NiIuLw6JFi/we+9FHH+GRRx7BwYMHQ+5QwwX+SO6J/Px8fPvtt6EIhniSBwNaprpnzx689957GB8fx4IFC7Br1y4sWLAgqFmKrmdHRkYgEAjY9WyomVvaf2s2+MIB3/Ulow49QOQz9VxBCS6VSgMuX/75z3/iwQcfxIEDB6L+Ofoj+dDQEDIyMsAwDA4fPowrr7wS3d3doURCPMlDASEE1113HVQqFQoKCrB37144nU6sX78emzZtQk5OTlBfxuTkJCuvJYSw8lqu61e67zwbdOjA1PKlp6cHFRUVPpcl4WbquSIY+6jPP/8cDzzwAA4cOBD1nZFrrrkGn332GUZHR5GRkYFf/vKXsNlsAKaqyZ599lns2rULIpEIMpkMTzzxRKhNEXmSh4qGhgasWLECwNSNNDg4iD179uDdd9+F2WzGZZddho0bNwZdK261WlnC2+12dob3ldH154c+ExgcHER/fz8qKiqCmp1pt5KRkRH2QecrU88VhBC0tLRAJBIFJPjXX3+Nu+++G/v375/xUuQIgyd5NKBWq/Huu+/inXfegUajwbp167Bp06aglW/UBml4eBgWi4W98am2nDY/nA3bUsBUjT/V6IcTftMH3cjICFtHEKymnhJcKBRi8eLFfl/37bff4s4778S+fftm3OM+CuBJHm2MjY1h79692LNnD4aGhnDxxRfj8ssvR0lJSVCJJ9eMtclkgkwmg9FoxMqVK2d8WwqYUtWNjo6irKwsotoA1/fNVVNPk6UMwwR8sNbU1OD222/Hu+++GzDjPkfBkzyW0Ol0eP/99/HOO++gs7MTF110ETZt2uTX380b+vv70dXVBYVCAZPJFPVikkDo6uqCTqeLel8y2h9erVZjfHwcCQkJrPsNfbDQvvOEkIBedQ0NDbjllluwe/duFBcXR23cMwye5DMFvV6PAwcOYM+ePThx4gQuvPBCbNy4EatWrfJLlJ6eHnbGFIlE7I0/PDyMiYkJJCUlIT09PWbOpq5VdrHeEhsfH2dFR7SgZHx8HEDgJgzNzc246aab8NZbb7n5ls9D8CSfDXCtia+rq8P555+PjRs34swzz3SboQLp0Gkr5eHhYeh0Onami8aetGtfsuXLl8+4yMVgMKClpQUmkwlKpdJvpr61tRVbt27F66+/jtLS0hkYcUwx+0n+4YcfYseOHXA4HLjllltY0zwKi8WCrVu34ujRo0hJScFf//rXGXccDQeTk5P4+OOPsXv3bhw9ehRnn302NmzYgAMHDmDLli2orq7mRCg60w0PD0Oj0bC901NTU8NeM9OQ2OFwzHhfMjqe9vZ22Gw2lJSUsFuS3jL1nZ2duPbaa/HKK6+4NccMFYGqyTx7k73yyiuorKwM+7pBYHaT3OFwoLi4GB9//DFycnJQXV2NN9980y28ev7551FXV4c//OEPeOutt/Duu+/ir3/9awSGP/OwWq34+OOPcdddd0Eul6OyshKXX3451qxZE5RKjhCCiYkJNrSldtX+/On9naulpQUMw8y4Pzsdz8mTJ2GxWLBs2bJp46GOP7W1tfj5z38Om82GX/3qV7juuusiMvZA1WSevcl27NiBb775JuzrBoGofkFhx4eHDx9GUVERCgsLIZFIcPXVV09rGrd3717ccMMNAIArr7wSn3zyCQI8XOYMJBIJ2tvb8eMf/xhHjx7F9ddfjw8++ADnnnsubr31VnzwwQeYnJwMeB6GYZCYmIjFixfjjDPOYCvIjh49iuPHj2NgYIAVYvgDVY6JRKJZQXBgKifgi+DA1GeYnZ2N8vJyKJVK3HjjjThw4ADuueeeiFx/zZo1fgVInr3JdDodBgej0rFoRhC2TtGzr1NOTs60p6DrMSKRCImJiRgbG4ua3XGsceedd7I379q1a7F27Vo4HA58+eWX2LNnDx588EEsX74cmzZtwve+972A4hGGYaBQKKBQKLBo0SIYjUao1WocP36c1dN7W8vSyjZa3DFbCG42mwPmBIaGhrBlyxY89dRTWLNmTQxH6P0e7u/v99usYS5hVtaTzzV4u3mFQiHWrFmDNWvWwOl04vDhw9i9ezceeeQRFBUVYdOmTbj44os5GTPEx8ejoKAABQUFMJvNbH04wzBuBTT19fVITEycNfmOzs5ONgnpj+BqtRqbN2/GY489FnOCnw4Im+SefZ36+vqmSQ7pMTk5ObDb7RgfH49q5dBsg0AgwJlnnokzzzyTrYl/++238cQTT2DhwoVsTTyXemiZTIa8vDzk5eWxdtUNDQ3Q6/Xs1txsQGdnJ/R6fUCCj46OYvPmzXjooYdw4YUXxnCE34HLPTyXEfaavLq6Gm1tbejs7ITVasVbb72FDRs2uB2zYcMGvPrqqwCA3bt3Y+3atbMilJwJCAQCVFZW4pFHHsGxY8fw61//Gt3d3Vi/fj2uuOIKvPbaa9BoNJzOJZVKsWDBAggEArayraWlBd988w27Nz4T6OrqYgnub1tQq9Vi8+bN2LlzJy655JIYjtAdGzZswGuvvQZCCA4dOoTExMR5E6oDEdpCO3jwIO666y44HA5s27YNP//5z7Fz506sWrUKGzZswOTkJK6//nocP34cKpUKb7311nyVJ4YMmhHfvXs363KyYcMGfP/730daWprXhyJt1+tZm07tqoeHhzE5OcnqyiPRfywQuru7odPp3HqBecP4+DiuuOIK3H333V47f0YSgarJPHuT/fnPf8aqVauiOiYPzO4tNB6Rh2tN/N69eyGVSrF+/Xps3LgRmZmZYBiGc18yu92OsbExDA8Ph9VVlQt6enqg1WoDElyv1+PKK6/E9u3bsWXLloiOYY6CJzlFINHNK6+8gnvuuYddT23fvh233HLLTAw1YiCEoKenhy2RBYALL7wQH330EV5++eWgKrKoXfXw8DD0ej1rV52cnBw24Xt6eqDRaAJq441GI6666ips27YN119/fVjXnEfgSQ5wE9288sor+Pbbb/Hss8/O4EijB0II6urqsGHDBuTl5cFms+H73/8+6/0dDFG92VVnZGSEpKen1W2BinjMZjOuuuoqXHfdddi2bVtQ15jnOP0smb3BVXQDgBXdzPPCBTcwDIOvv/4af/7zn/Ef//EfbE38T37yE+h0Oqxbtw4bN27kVBPvaVet1WqhVqvR2toKpVKJjIwMt8oxX+jr6+NE8MnJSVx33XXYvHkzbrrpppDeP4/QMGdIzkV0AwB79uzBv//9bxQXF+PJJ5/02xhvLuK2225j/52RkYHbbrsNt912G8bGxvDee+/hf//3fzE8POxWEx+I8AzDQKVSQaVSuVWOtbe3Iz4+HhkZGV719NTDPhDBrVYrtm7dinXr1uHWW289bXdWZgpzhuRcsH79elxzzTWQSqV44YUXcMMNN+DTTz+d6WHFBCkpKbj55ptx8803Q6fTYd++fez2HK2J51JLzjAMkpKSkJSUxPZNV6vV6OzsRFxcHEt4an9VXl7ud7a32Wy46aabcMEFF+COO+7gCT4DmDNr8q+//hoPPvgg/v73vwMAHnnkEQDA/fff7/V4h8MBlUrF1i6frnCtiW9tbWVr4quqqoJee1NTx4GBAdjtdixatAgZGRk+C3HsdjtuvvlmrFy5Evfffz9PcN+Y3QUqsQIX0Y1rUcG+fftQUlIS62HOOiiVSlx99dV4++238fXXX+Occ87BCy+8gLPPPhv33nsvvvrqKzgcDk7nUigUkMlkkMlkqKqqgsPhQE1NDY4ePYre3l5YLBb2WIfDgdtvvx3Lli2LKME//PBDLFmyBEVFRXj00Uen/f2VV15BWloaKioqUFFRgRdffDEi153LmDMzORBYdHP//fdj3759EIlEUKlU2LVrF5YuXTrTw56VcK2JP3bsGM4++2xcfvnlOPvss32Wtg4ODmJgYAAVFRVuIbqrXbVWq8VXX32F3t5e5OXl4eGHH44YwefxDgu/hcYjurBarfj000+xZ88efP311zjjjDOwadMmnHfeeWwoPjQ0hL6+voA2zmq1Gjt27EB9fT0yMzNxyy23RGy7jMuSjSf5dMyZcD2W2LZtG9LT01nPdk8QQnDnnXeiqKgIZWVlOHbsWIxHGFlIJBJccskl+NOf/oSamhpcd911OHjwIM4991zcdttt+MUvfoHf/va3AQnudDrx+OOPIzc3F+3t7di/fz8qKioiNk5fJaGe2LNnD8rKynDllVe6FZ6cruBJ7gU33ngjPvzwQ59//+CDD9DW1oa2tjb88Y9/xO233x7D0UUXIpEIa9euxa5du1BbW4vi4mK89dZb+Oabb3Drrbdi3759MJlM017ndDqxc+dOWK1WPPPMMxAIBFCpVLG2UcL69evR1dWFuro6XHTRRaxZyekMnuRecLo7iVBQY8qGhgYcPXoUO3bswJEjR3DhhRdi69ateOedd2AwGEAIwa9//WtoNBrs2rUrao6wXEpCU1JSWDONW265BUePHo3KWOYS5tU+eaww351EKEQiEV5++WX2Z9ea+OPHj+Ptt9/G7373O1itVhQXF2P37t0RbdrgCdcdluzsbLz11lt444033I4ZHBxkvwd+h2UKPMl5BA2BQICqqipUVVXh4Ycfxv79+7F27dqoEhyYeug8++yzuPjii9kdluXLl7vtsDzzzDNuOyyvvPJKVMc0F8Bn133AX8vaW2+9FRdccAGuueYaAFNNAj777LN5N5PziBn47Ppsw3x3EuExv8CH617g6iSSk5MzzUlk3bp1OHjwIIqKilgnER48Ziv4cJ0Hj5kHH67PZwQS3nz22WdITExktdi/+tWvYjxCHnMdfLg+w7jxxhuxfft2bN261ecx5513Hvbv3x/DUfGYT+Bn8hlGIOENDx7hgif5HMDXX3+N8vJyXHrppWhsbJzp4fCYY+BJPstRWVmJ7u5u1NbW4o477sCmTZtmekhhI1BNuMViwZYtW1BUVIQzzjgDXV1dsR/kPAJP8lmOhIQEtl/aunXr2MYJcxUOhwM//vGP8cEHH6CpqQlvvvkmmpqa3I556aWXkJycjPb2dvzP//wP7r333hka7fwAT/JZjqGhIbbN8+HDh+F0Oud0H7nTvdX1TIDPrs8wAglvdu/ejV27dkEkEkEmk+Gtt96a015pfKvr2IMn+QzjzTff9Pv37du3Y/v27TEaDY/5iECKNx7zCAzD5AJ4DUAGptSMfySEPO1xDAPgaQDrAJgA3EgIiZj1DcMwZwF4kBBy8amf7wcAQsgjLsf8/dQxXzMMIwIwBCCN8DdrSODX5KcX7AB+SghZBuBMAD9mGMazBc2lABaf+u+HAHZFeAxHACxmGKaAYRgJgKsB7PM4Zh8AaulyJYBPeYKHDp7kpxEIIYN0ViaE6AE0A8j2OGwjgNfIFA4BSGIYJmIldoQQO4DtAP5+6vp/I4Q0MgzzK4ZhqMf2SwBSGIZpB/ATAPd5PxsPLuDX5KcpGIbJB7ASgGevqWwAru6Hfad+FzF/K0LIQQAHPX630+XfkwA2R+p6pzv4mfw0BMMwCgB7ANxFCJmY6fHwiC54kp9mYBhGjCmCv04IecfLIf0AXLtE5pz6HY85Cp7kpxFOZc5fAtBMCHnCx2H7AGxlpnAmgHFCyPyzoj2NwG+hnUZgGOZcAJ8DqAfgPPXrBwAsBABCyB9OPQieBXAJprbQbiKEfDsDw+URIfAk58FjnoMP13nwmOfgSc6DxzwHT3IePOY5eJLz4DHPwZOcB495Dp7kPHjMc/Ak58FjnoMnOQ8e8xz/H0Tf8Ka9qGdkAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"ax = fig.gca(projection='3d')\n",
"\n",
"x,y,z=list(ObrotWX0([1,1,0],t))\n",
"xli=list(map(lambda v:x.subs({t:v}),arange(-pi/2,0,0.1)))\n",
"yli=list(map(lambda v:y.subs({t:v}),arange(-pi/2,0,0.1)))\n",
"zli=list(map(lambda v:z.subs({t:v}),arange(-pi/2,0,0.1)))\n",
"ax.plot(xli, yli, zli)\n",
"\n",
"x,y,z=list(ObrotWY0([1,1,0],t))\n",
"xli=list(map(lambda v:x.subs({t:v}),arange(0,pi/2,0.1)))\n",
"yli=list(map(lambda v:y.subs({t:v}),arange(0,pi/2,0.1)))\n",
"zli=list(map(lambda v:z.subs({t:v}),arange(0,pi/2,0.1)))\n",
"ax.plot(xli, yli, zli)\n",
"\n",
"x,y,z=list(ObrotWX1([2,0,0],t))\n",
"xli=list(map(lambda v:x.subs({t:v}),arange(0,pi/2,0.1)))\n",
"yli=list(map(lambda v:y.subs({t:v}),arange(0,pi/2,0.1)))\n",
"zli=list(map(lambda v:z.subs({t:v}),arange(0,pi/2,0.1)))\n",
"ax.plot(xli, yli, zli)\n",
"\n",
"x,y,z=list(ObrotWY1([0,2,0],t))\n",
"xli=list(map(lambda v:x.subs({t:v}),arange(0,pi/2,0.1)))\n",
"yli=list(map(lambda v:y.subs({t:v}),arange(0,pi/2,0.1)))\n",
"zli=list(map(lambda v:z.subs({t:v}),arange(0,pi/2,0.1)))\n",
"ax.plot(xli, yli, zli)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wprowadźmy teraz cztery pięciokąty jako trójwymiarowe figury. Będziemy na nich wykonywać operacje obrotu (na ich wierzchołkach), wokół wybranych wcześniej osi."
]
},
{
"cell_type": "code",
"execution_count": 272,
"metadata": {},
"outputs": [],
"source": [
"pi1_3d=list(map(lambda x: Matrix(list(x)+[0]),pi1))\n",
"pi2_3d=list(map(lambda x: Matrix(list(x)+[0]),pi2))\n",
"pi3_3d=list(map(lambda x: Matrix(list(x)+[0]),pi3))\n",
"pi4_3d=list(map(lambda x: Matrix(list(x)+[0]),pi4))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Funkcjonalność SymPy pozwala nam obrócić dany pięciokąt o abstrakcyjny kąt $t$."
]
},
{
"cell_type": "code",
"execution_count": 315,
"metadata": {},
"outputs": [],
"source": [
"t=symbols('t')\n",
"pol1_3d=list(map(lambda x: ObrotWY1(x,t),pi1_3d)) #obrót przeciwny do ruchu wskazówek zegara\n",
"pol2_3d=list(map(lambda x: ObrotWX1(x,t),pi2_3d)) #obrót przeciwny do ruchu wskazówek zegara\n",
"pol3_3d=list(map(lambda x: ObrotWY0(x,-t),pi3_3d)) #obrót zgodny z ruchem wskazówek zegara\n",
"pol4_3d=list(map(lambda x: ObrotWX0(x,-t),pi4_3d)) #obrót zgodny z ruchem wskazówek zegara"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Efekt takiej operacji jest skomplikowanym wyrażeniem wierzchołków jako funkcji zależnych od $t$.\n",
"\n",
"Uwaga: rezygnujemy z wektorów kolumnowych, od teraz będziemy posługiwać się tylko wektorami wierszowymi"
]
},
{
"cell_type": "code",
"execution_count": 277,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Matrix([[1, 1, 0]]),\n",
" Matrix([[sqrt(5)/4 + 3/4, -cos(t) + (sqrt(2*sqrt(5) + 10)/4 + 1)*cos(t) + 1, -sin(t) + (sqrt(2*sqrt(5) + 10)/4 + 1)*sin(t)]]),\n",
" Matrix([[1/2, -cos(t) + (1 + (sqrt(2) + sqrt(10))*sqrt(sqrt(5) + 5)/8)*cos(t) + 1, -sin(t) + (1 + (sqrt(2) + sqrt(10))*sqrt(sqrt(5) + 5)/8)*sin(t)]]),\n",
" Matrix([[1/4 - sqrt(5)/4, -cos(t) + (sqrt(2*sqrt(5) + 10)/4 + 1)*cos(t) + 1, -sin(t) + (sqrt(2*sqrt(5) + 10)/4 + 1)*sin(t)]]),\n",
" Matrix([[0, 1, 0]]),\n",
" Matrix([[1, 1, 0]])]"
]
},
"execution_count": 277,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pol1_3d"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wreszcie jesteśmy gotowi rozwiązać nasze zadanie. Mając dane dwa sąsiednie pięciokąty pod wpływem obrotu, czekamy na moment, gdy parametr $t$ spełnia warunek, że drugi wierzchołek pierwszego pięciokąta pokryje się z czwartym wierzchołkiem drugiego pięciokąta. Wtedy nasze pudełko domyka się."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Chcemy zatem, aby następujące trzy wyrażenia przyjęły wartość $0$."
]
},
{
"cell_type": "code",
"execution_count": 289,
"metadata": {},
"outputs": [],
"source": [
"#boki zetkną się, gdy wyrażenia poniżej zerują się\n",
"wyrazenia=list(pol1_3d[1]-pol2_3d[3])\n",
"eq1=Eq(wyrazenia[0],0) #komenda Eq służy do formowania równań\n",
"eq2=Eq(wyrazenia[1],0)\n",
"eq3=Eq(wyrazenia[2],0)"
]
},
{
"cell_type": "code",
"execution_count": 290,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle - \\frac{\\sqrt{2 \\sqrt{5} + 10} \\cos{\\left(t \\right)}}{4} - \\frac{1}{4} + \\frac{\\sqrt{5}}{4} = 0$"
],
"text/plain": [
"Eq(-sqrt(2*sqrt(5) + 10)*cos(t)/4 - 1/4 + sqrt(5)/4, 0)"
]
},
"execution_count": 290,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eq1"
]
},
{
"cell_type": "code",
"execution_count": 291,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle - \\cos{\\left(t \\right)} + \\left(\\frac{\\sqrt{2 \\sqrt{5} + 10}}{4} + 1\\right) \\cos{\\left(t \\right)} - \\frac{\\sqrt{5}}{4} + \\frac{1}{4} = 0$"
],
"text/plain": [
"Eq(-cos(t) + (sqrt(2*sqrt(5) + 10)/4 + 1)*cos(t) - sqrt(5)/4 + 1/4, 0)"
]
},
"execution_count": 291,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eq2"
]
},
{
"cell_type": "code",
"execution_count": 292,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle - \\sin{\\left(t \\right)} - \\frac{\\sqrt{2 \\sqrt{5} + 10} \\sin{\\left(t \\right)}}{4} + \\left(\\frac{\\sqrt{2 \\sqrt{5} + 10}}{4} + 1\\right) \\sin{\\left(t \\right)} = 0$"
],
"text/plain": [
"Eq(-sin(t) - sqrt(2*sqrt(5) + 10)*sin(t)/4 + (sqrt(2*sqrt(5) + 10)/4 + 1)*sin(t), 0)"
]
},
"execution_count": 292,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eq3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Upraszczanie wyrażeń\n",
"\n",
"Nasze równania $eq_1,eq_2,eq_3$ możemy uprościć stosując komendę `.simplify()`. Zauważymy, że dwa pierwsze równania są równoważne. Trzecie upraszcza się do postaci $0=0$."
]
},
{
"cell_type": "code",
"execution_count": 296,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\frac{\\sqrt{2 \\sqrt{5} + 10} \\cos{\\left(t \\right)}}{4} - \\frac{\\sqrt{5}}{4} + \\frac{1}{4} = 0$"
],
"text/plain": [
"Eq(sqrt(2*sqrt(5) + 10)*cos(t)/4 - sqrt(5)/4 + 1/4, 0)"
]
},
"execution_count": 296,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eq1.simplify()"
]
},
{
"cell_type": "code",
"execution_count": 297,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\frac{\\sqrt{2 \\sqrt{5} + 10} \\cos{\\left(t \\right)}}{4} - \\frac{\\sqrt{5}}{4} + \\frac{1}{4} = 0$"
],
"text/plain": [
"Eq(sqrt(2*sqrt(5) + 10)*cos(t)/4 - sqrt(5)/4 + 1/4, 0)"
]
},
"execution_count": 297,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eq2.simplify()"
]
},
{
"cell_type": "code",
"execution_count": 299,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 299,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(eq1.simplify())==(eq2.simplify())"
]
},
{
"cell_type": "code",
"execution_count": 300,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\text{True}$"
],
"text/plain": [
"True"
]
},
"execution_count": 300,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eq3.simplify()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pozostaje nam zatem wyznaczyć wartość kąta $t$ z wykorzystaniem równania $1$. Do tego wykorzystamy funkcję `solve`, która równanie symboliczne rozwiązuje ze względu na wskazane zmienne. Zachowanie tej komendy będzie zależało w istotny sposób od wybranego równania."
]
},
{
"cell_type": "code",
"execution_count": 303,
"metadata": {},
"outputs": [],
"source": [
"#rozwiązujemy równanie ze względu na t (rozwiązanie dokładne)\n",
"solv=solve(eq1,t)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Obiekt rozwiązania `solv` przechowuje listę wszystkich rozwiązań. Są dokłądnie 2 - jedno odpowiadające obrotowi naszych ścian w górę, drugie obrotowi w dół. Zauważmy, że rozwiązania są wyrażone symbolicznie za pomocą funkcji arcus cosinus."
]
},
{
"cell_type": "code",
"execution_count": 304,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 304,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(solv)==2"
]
},
{
"cell_type": "code",
"execution_count": 305,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle - \\operatorname{acos}{\\left(\\frac{- \\sqrt{2} + \\sqrt{10}}{2 \\sqrt{\\sqrt{5} + 5}} \\right)} + 2 \\pi$"
],
"text/plain": [
"-acos((-sqrt(2) + sqrt(10))/(2*sqrt(sqrt(5) + 5))) + 2*pi"
]
},
"execution_count": 305,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"solv[0]"
]
},
{
"cell_type": "code",
"execution_count": 306,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\operatorname{acos}{\\left(\\frac{- \\sqrt{2} + \\sqrt{10}}{2 \\sqrt{\\sqrt{5} + 5}} \\right)}$"
],
"text/plain": [
"acos((-sqrt(2) + sqrt(10))/(2*sqrt(sqrt(5) + 5)))"
]
},
"execution_count": 306,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"solv[1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Gdy interesuje nas wartość numeryczna tych kątów wyrażona w stopniach, możemy posłużyć się przybliżeniem."
]
},
{
"cell_type": "code",
"execution_count": 307,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 288.960709881923$"
],
"text/plain": [
"288.960709881923"
]
},
"execution_count": 307,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(solv[0]*180/pi).n()"
]
},
{
"cell_type": "code",
"execution_count": 308,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 71.0392901180775$"
],
"text/plain": [
"71.0392901180775"
]
},
"execution_count": 308,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(solv[1]*180/pi).n()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Naszym \"magicznym\" kątem będzie wybór podyktowany obrotem w górę."
]
},
{
"cell_type": "code",
"execution_count": 309,
"metadata": {},
"outputs": [],
"source": [
"magiczny_kat=solv[1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Teraz zobaczmy, że faktycznie znaleziony przez nas kąt odpowiada prawidłowemu złożeniu pudełka."
]
},
{
"cell_type": "code",
"execution_count": 314,
"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": [
"from mpl_toolkits.mplot3d.art3d import Poly3DCollection\n",
"def VertFloat(li):\n",
" xl,yl,zl=zip(*li)\n",
" xl=[float(x) for x in xl]\n",
" yl=[float(x) for x in yl]\n",
" zl=[float(x) for x in zl]\n",
" return [list(zip(xl,yl,zl))]\n",
"fig = plt.figure()\n",
"ax = Axes3D(fig)\n",
"\n",
"#zakres\n",
"ax.set_xlim3d(-3,3)\n",
"ax.set_ylim3d(-3,3)\n",
"ax.set_zlim3d(0,3)\n",
"\n",
"#ustawienia kamery\n",
"ax.dist=5\n",
"ax.elev=8\n",
"ax.azim=170\n",
"\n",
"#wierzchołki wielokątów\n",
"tt=magiczny_kat\n",
"pol1_3d_float=[VertFloat(list(map(lambda x: ObrotWY1(x,tt),pi1_3d))),['red','black']]\n",
"pol2_3d_float=[VertFloat(list(map(lambda x: ObrotWX1(x,tt),pi2_3d))),['blue','black']]\n",
"pol3_3d_float=[VertFloat(list(map(lambda x: ObrotWY0(x,-tt),pi3_3d))),['green','black']]\n",
"pol4_3d_float=[VertFloat(list(map(lambda x: ObrotWX0(x,-tt),pi4_3d))),['black','white']]\n",
"#print(verts)\n",
"\n",
"#dodawanie figur\n",
"for verts in [pol1_3d_float,pol2_3d_float,pol3_3d_float,pol4_3d_float]:\n",
" ax.add_collection3d(Poly3DCollection(verts[0],facecolor =verts[1][0],edgecolor=verts[1][1]))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Obliczamy odległość wierzchołków\n",
"\n",
"Pozostaje nam zatem ostatnie zadanie. Obliczymy odległość naprzeciwległych wierzchołków. Wybieramy je jako trzeci wierzchołek pierwszego pięciokąta i trzeci wierzchołek trzeciego pięciokąta."
]
},
{
"cell_type": "code",
"execution_count": 316,
"metadata": {},
"outputs": [],
"source": [
"wierzcholek1=pol1_3d[2]\n",
"wierzcholek2=pol3_3d[2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Odległość wierzchołków od siebie to długość wektora ich różnicy"
]
},
{
"cell_type": "code",
"execution_count": 318,
"metadata": {},
"outputs": [],
"source": [
"roznica=wierzcholek1-wierzcholek2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Współrzędne pierwsza i trzecia wektora roznica zerują się. Jedno zerowanie wynika automatycznie, drugie uzyskujemy po zastosowaniu metody `simplify()`"
]
},
{
"cell_type": "code",
"execution_count": 319,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 0$"
],
"text/plain": [
"0"
]
},
"execution_count": 319,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"roznica[0]"
]
},
{
"cell_type": "code",
"execution_count": 322,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\frac{\\sqrt{2 \\sqrt{5} + 10} \\cos{\\left(t \\right)}}{4} + \\frac{\\sqrt{10 \\sqrt{5} + 50} \\cos{\\left(t \\right)}}{4} + 1$"
],
"text/plain": [
"sqrt(2*sqrt(5) + 10)*cos(t)/4 + sqrt(10*sqrt(5) + 50)*cos(t)/4 + 1"
]
},
"execution_count": 322,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"roznica[1].simplify()"
]
},
{
"cell_type": "code",
"execution_count": 323,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 0$"
],
"text/plain": [
"0"
]
},
"execution_count": 323,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"roznica[2].simplify()"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\frac{\\sqrt{2} \\sqrt{\\sqrt{5} + 5} \\cos{\\left(t \\right)} + \\sqrt{10} \\sqrt{\\sqrt{5} + 5} \\cos{\\left(t \\right)} + 4}{4}$"
],
"text/plain": [
"(sqrt(2)*sqrt(sqrt(5) + 5)*cos(t) + sqrt(10)*sqrt(sqrt(5) + 5)*cos(t) + 4)/4"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(wierzcholek1-wierzcholek2)[1].factor()"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 0$"
],
"text/plain": [
"0"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(wierzcholek1-wierzcholek2)[2].factor()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Zatem odległość między wierzchołkami wynosi ostatecznie `abs(roznica[1])`. Obliczmy wprost to wyrażenie dla naszego kąta styku obliczonego wcześniej."
]
},
{
"cell_type": "code",
"execution_count": 324,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle 2$"
],
"text/plain": [
"2"
]
},
"execution_count": 324,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(roznica)[1].subs({t:magiczny_kat}).expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Zatem udowodniliśmy matematycznie, że odległość między wybranymi wierzchołkami wynosi dokładnie 2. Wykorzystana przez nas biblioteka obliczeń symbolicznych SymPy pozwala nam na tę absolutną konluzję."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Inny sposób obliczenia odległosci\n",
"\n",
"W naszych obliczeniach wyliczenie kąta $t$ dla styku nie było tak istotne. Kluczowe było, że obliczyliśmy wartość funkcji $cos(t)$ dla tego kąta. To pozwala nam inaczej podejść do poprzednich rachunków i wyrugować z użycia funkcji solve odwracanie funkcji cosinus."
]
},
{
"cell_type": "code",
"execution_count": 345,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\left[\\begin{matrix}0 & 2 & 0\\end{matrix}\\right]$"
],
"text/plain": [
"Matrix([[0, 2, 0]])"
]
},
"execution_count": 345,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sol=(roznica).subs({cos(t):solve(eq1,cos(t))[0]})\n",
"sol.simplify()\n",
"sol"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Na koniec obejrzyjmy jeszcze raz całą sytuację z wybranego kąta. Korzystamy w naszej funkcji rysującej dodatkowo z interaktywnych widżetów zawartych w bibliotece `ipywidgets`"
]
},
{
"cell_type": "code",
"execution_count": 350,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5527cbe2eed445faaeed7fdf612f5124",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(FloatSlider(value=0.61, description='tt', max=1.2398695108399236, step=0.01), FloatSlide…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from ipywidgets import interactive\n",
"from mpl_toolkits.mplot3d.art3d import Line3DCollection\n",
"\n",
"def VertFloat(li):\n",
" xl,yl,zl=zip(*li)\n",
" xl=[float(x) for x in xl]\n",
" yl=[float(x) for x in yl]\n",
" zl=[float(x) for x in zl]\n",
" return [list(zip(xl,yl,zl))]\n",
"def f(tt,dist,elev,azim):\n",
" fig = plt.figure(figsize=[3,3])\n",
" ax = Axes3D(fig)\n",
"\n",
" #zakres\n",
" ax.set_xlim3d(-3,3)\n",
" ax.set_ylim3d(-3,3)\n",
" ax.set_zlim3d(0,3)\n",
"\n",
" #ustawienia kamery\n",
" ax.dist=dist\n",
" ax.elev=elev\n",
" ax.azim=azim\n",
"\n",
" #wierzchołki wielokątów\n",
"\n",
" pol1_3d=[VertFloat(list(map(lambda x: ObrotWY1(x,tt),pi1_3d))),['red','black']]\n",
" pol2_3d=[VertFloat(list(map(lambda x: ObrotWX1(x,tt),pi2_3d))),['blue','black']]\n",
" pol3_3d=[VertFloat(list(map(lambda x: ObrotWY0(x,-tt),pi3_3d))),['green','black']]\n",
" pol4_3d=[VertFloat(list(map(lambda x: ObrotWX0(x,-tt),pi4_3d))),['black','white']]\n",
"\n",
" #dodawanie figur\n",
" for verts in [pol1_3d,pol2_3d,pol3_3d,pol4_3d]:\n",
" ax.add_collection3d(Poly3DCollection(verts[0],facecolor =verts[1][0],edgecolor=verts[1][1]))\n",
" w1=[float(x) for x in ObrotWY1(pi1_3d[2],tt)]\n",
" w2=[float(x) for x in ObrotWY0(pi3_3d[2],-tt)] \n",
" ax.add_collection3d(Line3DCollection([[w1,w2]], colors='black',linewidth=3,linestyle='dashed'))\n",
" plt.show()\n",
"\n",
"interactive_plot = interactive(f, tt=(0, float(magiczny_kat),0.01),dist=(0,10,0.1),elev=(0,10,0.1),azim=(0,360,1))\n",
"output = interactive_plot.children[-1]\n",
"output.layout.height = '350px'\n",
"interactive_plot"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"hide_input": false,
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.15"
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 4
}