{
 "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年７月19日　担当教員： 劉　雪峰 </div>\n",
    "\n",
    "フラクタル（fractal）は、フランスの数学者ブノワ・マンデルブロが導入した幾何学の概念です。\n",
    "図形の部分と全体が自己相似になっているものなどをいいます。\n",
    "\n",
    "フラクタルの作成では反復計算などが使われます。フラクタルの特徴の一つとして、シンプルな計算式で綺麗なフラクタルを作成することができます。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. コッホ曲線（Koch curve）の例\n",
    "\n",
    "まず、コッホ曲線の例でフラクタルの作成方法を勉強します。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"https://upload.wikimedia.org/wikipedia/commons/6/6f/How_to_make_Koch_curve.svg\">\n",
    "\n",
    "- ステップ0：線分を1本引く。（図左上）\n",
    "- ステップ1：線分を3等分し、中央の線分を1辺とする正三角形を線分の上側に描き、下の辺を消す。（図右上）\n",
    "- ステップ2：得られた4本の線分に対して同じ操作を繰り返す。（図左下）\n",
    "- ステップ3：得られた16本の線分に対して同じ操作を繰り返す。（図右下）\n",
    "\n",
    "\n",
    "コッホ曲線を作成するために、上記の作業の中の繰り返している部分を考えます。\n",
    "\n",
    "繰り返している作業：　\n",
    "\n",
    "- [1] 与えられる線分を3等分して、節点$p3$,$p4$を追加します。\n",
    "- [2] 線分$p3p4$の回転し、新しい節点$p5$を得ます。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Step ０: 準備：節点の描画\n",
    "\n",
    "まず、与えられる節点のリストを描画する関数``draw_node_list``を作成します。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "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": [
    "def draw_node_list(node_list,plot_option):\n",
    "    import numpy as np\n",
    "    import matplotlib.pyplot as plt\n",
    "    plt.rcParams['figure.figsize'] = [10, 10]\n",
    "\n",
    "    plt.gca().set_aspect('equal')\n",
    "    if node_list.shape[0]:\n",
    "        x_list = node_list[0,:]\n",
    "        y_list = node_list[1,:]\n",
    "        plt.plot(x_list, y_list, plot_option)\n",
    "    plt.grid()\n",
    "\n",
    "    \n",
    "import numpy as np\n",
    "p1 = np.array([0,0])\n",
    "p2 = np.array([1,0])\n",
    "draw_node_list(node_list, 'k.-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "### Step 1:  線分の３等分による節点を追加する\n",
    "\n",
    "与えられる線分を以下の配列で表示します。\n",
    "\n",
    "$$\n",
    "\\left[\n",
    "\\begin{array}{cc}x1 & x2 \\\\ y1 & y2 \\end{array}\n",
    "\\right]\n",
    "$$\n",
    "\n",
    "3等分後の節点は4つになりますが、これを以下のように表示します。\n",
    "\n",
    "$$\n",
    "\\left[\n",
    "\\begin{array}{cc}x1 & \\color{red}{x3}  & \\color{red}{ x4 } & x2 \\\\ y1  & \\color{red}{ y3 } & \\color{red}{ y4 } & y2 \\end{array}\n",
    "\\right]\n",
    "$$\n",
    "\n",
    "新しい節点の座標は次のように計算できます。\n",
    "\n",
    "$$p3=\\frac{2}{3} p_1 + \\frac{1}{3} p_2,~ \\quad p4=\\frac{1}{3} p_1 + \\frac{2}{3} p_2. $$\n",
    "\n",
    "### 例1\n",
    "\n",
    "与えられる線分の3等分を算出するPythonのコード例\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最初の節点のリスト\n",
      "[[0 1]\n",
      " [0 0]]\n",
      "２点を追加した節点のリスト\n",
      "[[0.         0.33333333 0.66666667 1.        ]\n",
      " [0.         0.         0.         0.        ]]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "p1 = np.array([0,0])\n",
    "p2 = np.array([1,0])\n",
    "\n",
    "node_list = np.array([p1,p2]).T\n",
    "\n",
    "p3 = 2/3*p1+1/3*p2\n",
    "p4 = 1/3*p1+2/3*p2\n",
    "\n",
    "new_node_list = np.array([p1,p3,p4,p2]).T\n",
    "\n",
    "print(\"最初の節点のリスト\")\n",
    "print(node_list)\n",
    "print(\"２点を追加した節点のリスト\")\n",
    "print(new_node_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### Step 2:  線分の回転による節点を追加する\n",
    "\n",
    "線分$p_3p_4$を利用して、$p_5$を作成します。具体的な操作については、$p_4$を$p_3$を中心にして、反時計回りに$\\theta=\\pi/3$回転します。\n",
    "\n",
    "即ち、\n",
    "\n",
    "$$\n",
    "p5\n",
    "=\\left(\n",
    "\\begin{array}{cc}\n",
    "\\cos \\theta  & - \\sin \\theta \\\\\n",
    "\\sin \\theta  & \\cos \\theta\n",
    "\\end{array}\n",
    "\\right) \n",
    "(p4-p3) + p3 \\quad  (\\theta = \\frac{\\pi}{3})\n",
    "$$\n",
    "\n",
    "節点$p3$, $p4$, $p5$を使って、以下の新しい節点のリストを作成します。\n",
    "\n",
    "$$\n",
    "\\left[\n",
    "\\begin{array}{ccccc}x1 & \\color{red}{x3} & \\color{blue}{x5}   & \\color{red}{ x4 } & x2 \\\\ y1  & \\color{red}{ y3 } & \\color{blue}{x5}  & \\color{red}{ y4 } & y2 \\end{array}\n",
    "\\right]\n",
    "$$\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3点を追加した節点のリスト\n",
      "[[0.         0.33333333 0.5        0.66666667 1.        ]\n",
      " [0.         0.         0.28867513 0.         0.        ]]\n"
     ]
    }
   ],
   "source": [
    "theta = np.pi/3;\n",
    "A = np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]])\n",
    "\n",
    "p5 = A@(p4-p3) + p3\n",
    "new_node_list = np.array([p1,p3,p5,p4,p2]).T\n",
    "\n",
    "print(\"3点を追加した節点のリスト\")\n",
    "print(new_node_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###  Step 3: 結果の確認\n",
    "\n",
    "更新した節点のリストを描画します。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "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"
    },
    {
     "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",
    "\n",
    "plt.figure(1)\n",
    "draw_node_list(node_list, 'k.-')\n",
    "plt.figure(2)\n",
    "draw_node_list(new_node_list, 'bo-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 節点作成のコードのまとめ\n",
    "\n",
    "与えられる線分（node_listで表す）について、節点の作業を``add_nodes``にまとめます。また、節点リストの描画関数``draw_node_list``もここに書いておきます。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_nodes(node_list):\n",
    "    p1 = node_list[:,0]\n",
    "    p2 = node_list[:,1]\n",
    "    \n",
    "    p3 = 2/3*p1+1/3*p2\n",
    "    p4 = 1/3*p1+2/3*p2\n",
    "\n",
    "    theta = np.pi/3;\n",
    "    A = np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]])\n",
    "    p5 = A@(p4-p3) + p3\n",
    "    \n",
    "    new_node_list = np.array([p1,p3,p5,p4,p2]).T\n",
    "    return new_node_list\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2点の線分を更新して新しい節点のリストを作成し、グラフを描きます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "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": [
    "p1 = np.array([0,0])\n",
    "p2 = np.array([1,0])\n",
    "\n",
    "node_list = np.array([p1,p2]).T\n",
    "new_node_list = add_nodes(node_list)\n",
    "\n",
    "draw_node_list(new_node_list,'b-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 演習1\n",
    "\n",
    "以下の2つの線分を``add_nodes``で処理して、その結果を確認しなさい。\n",
    "\n",
    "- node_list_1 = np.array([[0,0], [1,2]]).T\n",
    "- node_list_2 = np.array([[1,2], [2,0]]).T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "node_list_1 = np.array([[0,0], [1,2]]).T\n",
    "node_list_2 = np.array([[1,2], [2,0]]).T\n",
    "\n",
    "#ここにコードを書いてください。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.4 複数節点のリストの処理\n",
    "\n",
    "以下の関数``update_node_list``は、node_listに格納された各点と次の点がなす線分を``add_nodes``で処理します。\n",
    "\n",
    "各線分から得られる新しい4つの線分の節点をnew_node_listに入れて、新しい点のリストを作成します。\n",
    "\n",
    "節点の計算では、隣の2つの線分は同じ節点を共有しているので、new_node_listを更新するときに節点が重複しないように注意してください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "def update_node_list(node_list):\n",
    "    \n",
    "    #節点リストの最初の点を新しい節点リストの1番目の点とします。\n",
    "    new_node_list = [node_list[:,0]]\n",
    "    node_num = node_list.shape[1] # 列の数\n",
    "    for k in range(node_num - 1):\n",
    "        two_node_list = node_list[:,k:(k+2)]        \n",
    "        tmp_node_list = add_nodes(two_node_list)\n",
    "        \n",
    "        #節点が重複しないように、4点のみを追加します。\n",
    "        new_node_list.append(tmp_node_list[:,1])\n",
    "        new_node_list.append(tmp_node_list[:,2])\n",
    "        new_node_list.append(tmp_node_list[:,3])\n",
    "        new_node_list.append(tmp_node_list[:,4])\n",
    "        \n",
    "    return np.array(new_node_list).T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 演習2\n",
    "\n",
    "以下の線分処理の回数（N）を順番に1, 2, 3, 4, 5として結果を確認してください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "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": [
    "p1 = np.array([0,0])\n",
    "p2 = np.array([1,0])\n",
    "node_list = np.array([p1,p2]).T\n",
    "\n",
    "#Nの値を1,2,3,4,5に修正してみてください。\n",
    "N = 1\n",
    "for k in range(N):\n",
    "    node_list = update_node_list(node_list)\n",
    "draw_node_list(node_list,'b-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.5 コードのまとめ"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x864 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#与えられる節点のリストを描画します。\n",
    "def draw_node_list(node_list,plot_option):\n",
    "    import numpy as np\n",
    "    import matplotlib.pyplot as plt\n",
    "    plt.rcParams['figure.figsize'] = [12, 12]\n",
    "\n",
    "    plt.gca().set_aspect('equal')\n",
    "    if node_list.shape[0]:\n",
    "        x_list = node_list[0,:]\n",
    "        y_list = node_list[1,:]\n",
    "        plt.plot(x_list, y_list, plot_option)\n",
    "    plt.grid()\n",
    "\n",
    "#与えられる2点のリスト（線分）に新しい三つの節点を追加します。\n",
    "def add_nodes(node_list):\n",
    "    p1 = node_list[:,0]\n",
    "    p2 = node_list[:,1]\n",
    "    \n",
    "    p3 = 2/3*p1+1/3*p2\n",
    "    p4 = 1/3*p1+2/3*p2\n",
    "\n",
    "    theta = np.pi/3;\n",
    "    A = np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]])\n",
    "    p5 = A@(p4-p3) + p3\n",
    "    \n",
    "    new_node_list = np.array([p1,p3,p5,p4,p2]).T\n",
    "    return new_node_list\n",
    "\n",
    "#節点のリストの全ての線分を処理します。\n",
    "def update_node_list(node_list):\n",
    "    \n",
    "    #節点リストの最初の点を新しい節点リストの1番目の点とします。\n",
    "    new_node_list = [node_list[:,0]]\n",
    "    node_num = node_list.shape[1];\n",
    "    \n",
    "    for k in range(node_num - 1):\n",
    "        two_node_list = node_list[:,k:(k+2)]        \n",
    "        tmp_node_list = add_nodes(two_node_list)\n",
    "        \n",
    "        #節点が重複しないように、4点のみを追加します。\n",
    "        for idx in range(1,5):\n",
    "            new_node_list.append(tmp_node_list[:,idx])\n",
    "        \n",
    "    return np.array(new_node_list).T\n",
    "\n",
    "\n",
    "p1 = np.array([0,0])\n",
    "p2 = np.array([1,0])\n",
    "node_list = np.array([p1,p2]).T\n",
    "\n",
    "N = 1\n",
    "for k in range(N):\n",
    "    node_list = update_node_list(node_list)\n",
    "draw_node_list(node_list,'b-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## レポート課題１\n",
    "\n",
    "初期の線分のリストを正三角形の三つの辺として、上記のupdate_node_listで処理してみてください。\n",
    "\n",
    "正三角形の頂点の座標：\n",
    "\n",
    "$$\n",
    "(0,0), (1/2,\\sqrt{3}/2), (1,0)\n",
    "$$\n",
    "\n",
    "また、``add_nodes``の関数では、新しい節点の作成方法（角度、線分の長さなど）を試み、新しいフラクタルを作成して、自分の「家」の飾りとして活用してください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x864 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "p1 = np.array([0,0])\n",
    "p2 = np.array([0.5, np.sqrt(3)/2.0])\n",
    "p3 = np.array([1,0])\n",
    "\n",
    "node_list = np.array([p1,p2,p3,p1]).T\n",
    "draw_node_list(node_list,'b-')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## レポート課題２(オプション)\n",
    "\n",
    "Minkowski Sausageのフラクタルは以下のような反復計算を使っています。\n",
    "コッホ曲線の計算コードを参考にして、Minkowski Sausageのフラクタルを作ってください。\n",
    "\n",
    "\n",
    "<img src=\"http://mathworld.wolfram.com/images/eps-gif/MinkowskiSausageLengths_1000.gif\">\n",
    "\n",
    "以下は正方形から作ったMinkowski Sausageの図です。\n",
    "\n",
    "<img src=\"http://www.ces-alpha.org/download/gs/?label=F13&conf_id=CM2017&verify=fd742\">\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## ヒント\n",
    "\n",
    "以下の作業の流れに従って、Minkowski Sausageに必要な線分の変形ができます。\n",
    "\n",
    "\n",
    "<img src=\"http://www.ces-alpha.org/download/gs/?label=F19&conf_id=CM2018&verify=4b545\" width=450px>\n",
    "\n",
    "\n",
    "### Step 1\n",
    "線分の2つの節点を$p_1=(x1,y1),p_2=(x2,y2)$とします。$p_1p_2$線分上で$|p_1p_3|=|p_1p_2|/\\sqrt{5}$を満たす$p_3$は以下の式で算出できます。\n",
    "\n",
    "$$\n",
    "p3 = p1 + \\frac{1}{\\sqrt{5}}(p2-p1)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.4472136, 0.       ])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p1 = np.array([0,0])\n",
    "p2 = np.array([1,0])\n",
    "p3 = p1 + 1/np.sqrt(5)*(p2-p1)\n",
    "p3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Step 2\n",
    "\n",
    "$p_1$を中心にして、ベクトル$p_1p_3$を時計回りに角度$\\theta$回転します。ただし、$\\theta$は以下のように算出されます。\n",
    "$$\n",
    "\\theta = \\sin^{-1}\\left(\\frac{1}{\\sqrt{5}}\\right)\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Step 3\n",
    "\n",
    "$p_1p_2$線分上で$|p_2p_4|=|p_1p_2|/\\sqrt{5}$を満たす$p_4$を算出します。\n",
    "\n",
    "$p_2$を中心にして、ベクトル$p_2p_4$を時計回りに角度$\\theta$回転します。"
   ]
  },
  {
   "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
}
