{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 再帰的計算とフラクタル\n",
    "\n",
    "<div style='border-bottom:1px solid #000;margin:15px 0px 15px 0px' align=right> 計算機演習A,B　2021年７月26日　担当教員： 劉　雪峰 </div>\n",
    "\n",
    "\n",
    "## 再帰的作業の例\n",
    "\n",
    "教室の授業で資料を配布するとき、以下のやり方がよく使用されます。\n",
    "\n",
    "「自分の資料を取って、残りを後ろの方に渡してください。」という指示によって、資料を一番前にいる学生に渡せば、資料を全員に届けることができます。\n",
    "\n",
    "この例では、以下の特徴があります。\n",
    "\n",
    "- 「資料を取って、残りを後ろの方に渡す」という作業（関数と考える）が繰り返し行われます。\n",
    "- 授業の教員によって、最初に一回の作業（関数）が実行されます。\n",
    "\n",
    "作業の終了条件は、\n",
    "\n",
    "- 「資料がなくなること」または「資料を受け取った学生の後ろに他の学生がいないこと」です。\n",
    "\n",
    "\n",
    "## 再帰的計算の例\n",
    "\n",
    "$n$の階乗の計算$F(n)$を考えます。$n$の階乗は「$n-1$の階乗」と「$n$」との積ですので、以下の再帰的計算によって$n$の階乗を算出することができます。\n",
    "\n",
    "- $n\\geq 2$ のとき、$F(n) = n\\times F(n-1)$　（関数自身を呼び出す）\n",
    "- $n=1$ のとき、$F(n)=1$　 (終了条件)\n",
    "\n",
    "**特徴：**　関数が関数自身を呼び出します。\n",
    "\n",
    "\n",
    "<div align=center>\n",
    "<img src=\"http://www.ces-alpha.org/hp/image/?conf_id=CM2020&label=IMG7\" style=\"height:300px;border:1px dotted #AAA;padding:10px\">\n",
    "</div>\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "def F(n):\n",
    "    if n==1: \n",
    "        return 1\n",
    "    else:\n",
    "        return n*F(n-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "120"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上記の階乗の例では、$F(n)$は$F$自身を呼び出して$F(n-1)$の値を計算してから、$F(n-1)$と$n$の積を返します。コードはシンプルであるという特徴があります。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 演習1\n",
    "\n",
    "再帰的計算により、$1$から$n$までの各整数の平方の和を計算する$S(n)$を作成してください。\n",
    "\n",
    "$$S(n) = 1+2^2+3^2+\\cdots + n^2$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def S(n):\n",
    "    if n==1: \n",
    "        return 1 #S(1)の値を返す。\n",
    "    else:\n",
    "        return ?? #ここに返却値を書いてください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "S(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 再帰的計算によるフラクタルの描画\n",
    "\n",
    "コッホ曲線（Koch curve）の例を再検討します。\n",
    "\n",
    "**コッホ曲線の作業**（関数 draw_koch の作成）\n",
    "\n",
    "- 下の図のように、与えられる線分（p1, p2）について、3等分を取ってから真ん中の線分を「山」にして、合わせて4つの線分（節点p1, p2, p3, p4, p5を持つ）を作成する。\n",
    "- 各線分に対してdraw_kochを呼び出し、線分の処理を行う。\n",
    "\n",
    "<div align=center>\n",
    "<img src=\"http://www.ces-alpha.org/hp/image/?conf_id=CM2020&label=IMG5\" style=\"height:350px;padding:15px\">\n",
    "</div>\n",
    "\n",
    "draw_kochは一層ずつ呼ばれますが、毎回の計算では、残りの計算回数（再帰的計算の回数）nが1ずつ減ります。\n",
    "\n",
    "**終了条件**として、\n",
    "- 残り回数が0になったら、線分を描画して終了します。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "theta = np.pi/3\n",
    "A = np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]])\n",
    "\n",
    "def draw_koch(line, n):\n",
    "    if n == 0:\n",
    "        #残りの回数が0であるとき、線分の加工はせずに線分を描く。\n",
    "        plt.plot(line[0,:], line[1,:], 'r-')\n",
    "    else:\n",
    "        #残りの回数が1以上であるとき、線分の加工を行う。\n",
    "\n",
    "        #3等分を取る\n",
    "        p1 = line[:,0]\n",
    "        p2 = line[:,1]\n",
    "        p3 = 2/3*p1+1/3*p2\n",
    "        p4 = 1/3*p1+2/3*p2\n",
    "        \n",
    "        #「山」にするための新しい節点を計算する。\n",
    "        p5 = A@(p4-p3) + p3\n",
    "\n",
    "        #4つの線分を処理する。残りの計算回数をn-1にする。\n",
    "        draw_koch( np.array([p1,p3]).T, n-1 )\n",
    "        draw_koch( np.array([p4,p2]).T, n-1 )\n",
    "        draw_koch( np.array([p3,p5]).T, n-1 )\n",
    "        draw_koch( np.array([p5,p4]).T, n-1 )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "線分を用意して、関数draw_kochを呼び出します。\n",
    "\n",
    "注意：draw_kochの中の再帰的計算の回数nを大きい値にすると、計算時間が長くなります。5以下の値を使ってください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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5f1znHfK+vfX77dv1zdQX8d8Ou+UhXJtgEg0bZr+vhcu9P45J06IlCih874cDj3RV6umJ35fJkM6K55ZWQTCWZmtShXfKrM5xxZ/8IF+77xZ4Muq01nL0AZSXIOIrOdvGfesF2UieiPH15EFwap4tmaN72u+ORwiN9ygd9CPH9dtXbvqDUFfepZWrtTfw8CBvsUca5wjC667zrfkZOBA/f06595Mnqzff/ON9/s4flz/zlZXPPPnZsG5c9pT2LSp/j+kpfl/syBMBJTgAOgAYAuA7QAGung8H4CPMx//E0DVLI8Nyty+BUD7nF4rIhMc50XZhx9e3LZpk3Zl9ujh3T6cF2WBVjxzxVmZ7b77vGvvcOjdijJlRJKSLm4fMEB/zj//9G4/Vt8pi2apqSJ164rUrOn9379XL73799dfF7d9/rn+zqdP924fzopnwVgb4OefNZbRo71rn5Skx1yrVpeeBG67zbebBXaXoSUiz3wdWXD27KUXZU533+3byIK33tLX/egj32POSffuvq359tlnl79X79mjNwQfeMC7fWRk6HC/smUDK1AQK5wjCz7+2Lv2rm7spqToyIJatbwfWfC//wVe8cwV580CXyqzDR+uv4Pffru4zXmzYOxYa+MLEb8THAC5AewAUB1AXgB/A6iXrc0zAN7M/LorgI8zv66X2T4fgGqZ+8nt6fUiLsFxXpS1bn15Zt67t97VyXoB6o7zouzLL4MSpowapfv/+eec2374obadPfvS7b6Mn05PF2nc2N61ASLN99/r7/2VV3Juu3Gjztt56qlLtzscepco611BT554IrhrA9x3nybX+/bl3LZ//0vvlDn9+6/3NwtYLpUoMvhSxn3YsMsvykR0SFbevDpEKyenTukwsmuvDc57w6FD3q/5duGC3jF31ds+YoT+rL/+mvN+3ntP286Z41/MsSbrmm/eXJfcdZfrKQOLFunvfeLEnPfxzz96rn7mGb9CzpHzZsGLL+bcds8e7SHs2vXyx5w3CxITrY8xyAJJcFoBWJzl+0EABmVrsxhAq8yv4wAcA2Cyt83azt1HxCU4zouy1asvf+zECe8mWzsvym6+OXgXZefP6z91o0aeS+aePatD7Zo1c53EOCfb5VS+d9YsCXhtgFh05516kjx40H0bh0NLOhctKnLkyOWPr1+vd4tyKu3tHFYR6NoAnuzapRcxDz3kuV1OxTX69PHuZoFzbQAueEcU3pwLHN97r+d2znmcri7KRC5Otl650vN++vXT95CEBP/i9caECeLVAsdjx4rb+ZLnzumNwSZNPJ+rz5zRO/fNm0fFWiYh4+2ab0uWaLvx410/3rGjjn44dMj9PhwOnVtbrJhe5wWL82ZBTnOwHnjAfXEN582C//wnODEGkbsEx+hj7hlj7gPQQUSeyPz+PwBaisizWdr8k9kmMfP7HQBaAhgBYKWIfJC5/R0A34nIAnevFx8fLwkJCR5jCpnevYF169w/npIC/PknULcusHGj6zY33QQsXQo0aACUKOG6zY4dwP79WqqvQYNAo3bv00+B++8H6tQBypZ13WbvXmDXLi133br15Y87HEC5ckBSEtCihZZgdNVm5UqgVCktX2yMtT9HNNu2DbjqKv371Krlus3Jk3qstG2rJaJdufpqbdOiBVCggOs269drudQDBwIvW+lJy5bAqlVAs2buy7Ju2gScOgXs2aPHV3anTgHlywP58wONGrnex4UL+jqNGgF//21V9EQULK1bAytWAE2aaAlpVzZvBo4f1/Nk5cqXP37mjL5nxMUBjRu73kdysr431KsH/POPZeFfJjUVKFNGS9w3a+b63JeWpufHatWA7dtd7+fjj4GuXfVcUKaM6zZ79gC7dwN//AG0amXZjxATatfW4+maa4A8eS5/XARYuxbInVuX/cif//I2W7bo8VSuHFCzpuvXOXEC2LABaNcO+OUXS3+ES+zfD1StChQvrtejrpw5oz9Ty5Z6/LnSvLkuN+HpXA3o/9nUqQEGbR1jzBoRic++Pc6OYLIzxvQA0AMAKrt6AwtX+fIB9evrP4k79evrBWTx4u7bVKmiF6TBTG4A4L77gPbtPddOr1BB31RdJTeAJjQ336wnHVfJjbNNgwb6z8/kxje1agEdO+oboztXXql/I3cX+oAekxkZrt+YnWrX1qQhmMkNAMTH65trwYLu29SsqQmxq+QG0Bg7dND/JXfy58/5/5GIwkfTpnrzwtNaVdWr640ad9cGhQvreS0x0f0+QvXekDcvcOutwM6d7s99efIADRtqUufO/fcD777r+VxdsaJezDK58V2bNnrjz1VyA+jfrm5dTRrcnUPr1Mn5XF2smJ6rGzYMOGSPKlTQWI4edd+mUCH9mZo1c9+meXM95jydqyOINz04rQCMEJH2md8PAgARGZ+lzeLMNiuMMXEADgEoBWBg1rZZ27l7vbDqwSEiIiIiorDkrgfHzS34S6wGUMsYU80YkxdaRGBhtjYLATya+fV9AJZmjotbCKCrMSafMaYagFoAVvn7QxAREREREXmS4xA1EUk3xjwLLRCQG8BsEdlojBkFndizEMA7AN43xmwHcAKaBCGz3ScANgFIB9BTRDKC9LMQEREREVGMy3GIWqhxiBoREREREeUkkCFqREREREREEYEJDhERERERRQ0mOEREREREFDWY4BARERERUdRggkNERERERFEj7KqoGWOOAthjdxxZlARwzO4gKOLwuCF/8Lghf/C4IX/wuCF/hNtxU0VESmXfGHYJTrgxxiS4Kj9H5AmPG/IHjxvyB48b8gePG/JHpBw3HKJGRERERERRgwkOERERERFFDSY4OZtldwAUkXjckD943JA/eNyQP3jckD8i4rjhHBwiIiIiIooa7MEhIiIiIqKowQSHiIiIiIiiBhOcTMaYDsaYLcaY7caYgS4ez2eM+Tjz8T+NMVVtCJPCjBfHTV9jzCZjzHpjzE/GmCp2xEnhJafjJku7e40xYowJ+5KcFHzeHDfGmPsz33M2GmPmhTpGCj9enKcqG2N+Nsb8lXmu6mhHnBQ+jDGzjTFHjDH/uHncGGNezTym1htjmoY6xpwwwQFgjMkNYDqA2wDUA9DNGFMvW7PuAE6KSE0AUwC8HNooKdx4edz8BSBeRBoBWADgldBGSeHGy+MGxpjCAHoB+DO0EVI48ua4McbUAjAIwLUiUh9A71DHSeHFy/ebIQA+EZEmALoCeCO0UVIYmgOgg4fHbwNQK/OjB4AZIYjJJ0xwVAsA20Vkp4ikApgPoHO2Np0BzM38egGAm4wxJoQxUvjJ8bgRkZ9F5HzmtysBVAxxjBR+vHm/AYDR0BspyaEMjsKWN8fNkwCmi8hJABCRIyGOkcKPN8eNACiS+XVRAAdCGB+FIRH5FcAJD006A3hP1EoAVxpjyoUmOu8wwVEVAOzL8n1i5jaXbUQkHUASgBIhiY7ClTfHTVbdAXwX1IgoEuR43GR291cSkW9DGRiFNW/eb2oDqG2M+d0Ys9IY4+kOLMUGb46bEQAeNsYkAlgE4H+hCY0imK/XPyEXZ3cARLHAGPMwgHgA7eyOhcKbMSYXgMkAHrM5FIo8cdAhI9dDe4t/NcY0FJFTdgZFYa8bgDkiMskY0wrA+8aYBiLisDswIn+xB0ftB1Apy/cVM7e5bGOMiYN24x4PSXQUrrw5bmCMuRnAYACdRCQlRLFR+MrpuCkMoAGAX4wxuwFcA2AhCw3EPG/ebxIBLBSRNBHZBWArNOGh2OXNcdMdwCcAICIrAOQHUDIk0VGk8ur6x05McNRqALWMMdWMMXmhk+wWZmuzEMCjmV/fB2CpcJXUWJfjcWOMaQJgJjS54Xh4AnI4bkQkSURKikhVEakKnbvVSUQS7AmXwoQ356kvob03MMaUhA5Z2xnCGCn8eHPc7AVwEwAYY+pCE5yjIY2SIs1CAI9kVlO7BkCSiBy0O6isOEQNOqfGGPMsgMUAcgOYLSIbjTGjACSIyEIA70C7bbdDJ151tS9iCgdeHjcTABQC8GlmTYq9ItLJtqDJdl4eN0SX8PK4WQzgVmPMJgAZAF4QEY40iGFeHjf9ALxljOkDLTjwGG/gxjZjzEfQmyUlM+dmDQeQBwBE5E3oXK2OALYDOA/gcXsidc/wGCYiIiIiomjBIWpERERERBQ1mOAQEREREVHUYIJDRERERERRgwkOERERERFFDSY4REREREQUNZjgEBERERFR1GCCQ0REREREUeP/AQV9tYmjb1JpAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1008x1008 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['figure.figsize'] = [14, 14]\n",
    "plt.gca().set_aspect('equal')\n",
    "\n",
    "draw_koch(np.array([[0,0],[1,0]]).T,4)\n",
    "#draw_koch(np.array([[1,0],[1/2,-np.sqrt(3)/2]]).T,4)\n",
    "#draw_koch(np.array([[1/2,-np.sqrt(3)/2],[0,0]]).T,4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## ツリーの描画\n",
    "\n",
    "\n",
    "**関数名**：draw_tree(line, times)\n",
    "\n",
    "\n",
    "**作成方法**\n",
    "\n",
    "- 与えられる線分の3等分を取ります。\n",
    "- 3等分の節点を順番にp1, p3, p4, p2として、p3とp4の場所で線分の両側に30度の「枝」を作成します。\n",
    "- 2つの枝を含めて、5つの線分をdraw_treeで再加工します。\n",
    "\n",
    "**終了条件**\n",
    "\n",
    "- 残りの再帰的計算の回数nが0になるとき、関数に与えられる線分を描きます。\n",
    "\n",
    "<div  align=center>\n",
    "    <img src=\"http://www.ces-alpha.org/hp/image/?conf_id=CM2020&label=IMG6&\" style=\"height:350px\">\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "theta = np.pi/3\n",
    "A1 = np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]])\n",
    "theta = -np.pi/3\n",
    "A2 = np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]])\n",
    "\n",
    "def draw_tree(line, n):\n",
    "    if n == 0:\n",
    "        #残りの回数が0であるとき、線分の加工はせずに線分を描く。\n",
    "        plt.plot(line[0,:], line[1,:], 'r-')\n",
    "    else:\n",
    "        #残りの回数が1以上であるとき、線分の加工を行う。\n",
    "\n",
    "        #3等分を取る\n",
    "        p1 = line[:,0]\n",
    "        p2 = line[:,1]\n",
    "        p3 = 2/3*p1+1/3*p2\n",
    "        p4 = 1/3*p1+2/3*p2\n",
    "        \n",
    "        #左側の「枝」の新しい節点を計算する。\n",
    "        p5 = A1@(p4-p3) + p3\n",
    "        #右側の「枝」の新しい節点を計算する。\n",
    "        p6 = A2@(p2-p4) + p4\n",
    "\n",
    "        #4つの線分を処理する。残りの計算回数をn-1にする。\n",
    "        draw_tree( np.array([p1,p3]).T, n-1 )\n",
    "        draw_tree( np.array([p3,p4]).T, n-1 )\n",
    "        draw_tree( np.array([p4,p2]).T, n-1 )\n",
    "        #新しく作成した2つの「枝」を処理する。\n",
    "        draw_tree( np.array([p3,p5]).T, n-1 )\n",
    "        draw_tree( np.array([p4,p6]).T, n-1 )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "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": [
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['figure.figsize'] = [10, 10]\n",
    "plt.gca().set_aspect('equal')\n",
    "\n",
    "draw_tree(np.array([[0,0],[0,1]]).T,3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "フラクタルを使って、家を飾ってみます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "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": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "#家を描画する関数を定義します。\n",
    "def home():\n",
    "    roof_nodes = np.array([[-3,2],[3,2],[0,3],[-3,2]])\n",
    "    roof_nodes = roof_nodes.T\n",
    "    wall_nodes = np.array([[-2,2],[-2,0],[2,0],[2,2],[-2,2]])\n",
    "    wall_nodes = wall_nodes.T\n",
    "\n",
    "    plt.gca().set_aspect('equal')\n",
    "\n",
    "    #家の描画\n",
    "    plt.plot(roof_nodes[0,:], roof_nodes[1,:], 'ro-')\n",
    "    plt.fill(roof_nodes[0,:], roof_nodes[1,:], color=\"r\", alpha=0.4)\n",
    "    plt.plot(wall_nodes[0,:], wall_nodes[1,:], 'ro-')\n",
    "    plt.fill(wall_nodes[0,:], wall_nodes[1,:], color=(0.2,0.2,0.9), alpha=0.4)\n",
    "    plt.grid()\n",
    "    \n",
    "home()\n",
    "draw_tree(np.array([[3,0],[3,1]]).T,3)\n",
    "draw_tree(np.array([[3.5,0],[3.5,0.6]]).T,3)\n",
    "draw_tree(np.array([[4,0],[4,1.6]]).T,4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 注意：\n",
    "\n",
    "上記の2つの例にある「残りの再帰的計算の回数n」の役割を理解してください。\n",
    "\n",
    "- $n\\geq 1$ のとき、線分の描画をせずに、線分の加工を行います。さらに、新しいそれぞれの線分に対して、関数自身を呼び出します。\n",
    "- $n=0$ のとき、線分の加工をせずに、線分の描画を行います。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## レポート課題\n",
    "\n",
    "フラクタルを自分で設計して、作成してください。また、フラクタルを使って、以前のレポートで作成した家を飾ってください。\n",
    "\n",
    "- 既知のフラクタルの例でもよいです。\n",
    "- Minkowski Sausageのフラクタルを再帰的な計算で作成してもよいです。\n",
    "- コッホ曲線とツリーは不可です。しかし、コッホ曲線またはツリーを改造したもの（再分割の割合や回転の角度の変更など）はOKです。\n",
    "\n",
    "ヒント：Googleの画像検索の中で「フラクタル 木」の例を参考にしてください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "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"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
