{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2023年度計算機演習A・B\n",
    "\n",
    "# 第12回：ベジェ曲線1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "CAD（Computer Aided Design）の分野など、コンピュータ上で滑らかな曲線や曲面を表現するために、多項式がよく使用されます。文字のフォントも、その一例です。\n",
    "\n",
    "今回と次回の授業では、そのような多項式によって表される曲線の一つである**ベジェ曲線（Bezier curve）**に焦点を当てます。\n",
    "\n",
    "特に、今回の授業では準備として、ベジェ曲線の基になる多項式について説明します。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. バーンスタイン基底関数とバーンスタイン多項式\n",
    "\n",
    "### 1.1. 定義\n",
    "\n",
    "非負整数 $n$ に対して、次の式で定義される $(n+1)$ 個の関数を $n$ 次**バーンスタイン基底関数（Bernstein basis function）**と呼びます。\n",
    "\n",
    "$$\n",
    "B_{i,n}:\\mathbb{R}\\to\\mathbb{R}, \\quad B_{i,n}(x)={}_n C_i x^i (1-x)^{n-i}, \\quad i=0,\\ldots,n\n",
    "$$\n",
    "\n",
    "ここで、${}_n C_i$ は二項係数（$n$ 個から $i$ 個選ぶ組合せの総数）であり、階乗を用いれば\n",
    "\n",
    "$$\n",
    "{}_n C_i=\\frac{n!}{i!(n-i)!}\n",
    "$$\n",
    "\n",
    "と表されます。\n",
    "\n",
    "具体的に書いてみると、$0$ 次バーンスタイン基底関数は\n",
    "\n",
    "$$\n",
    "B_{0,0}(x)=1,\n",
    "$$\n",
    "\n",
    "$1$ 次バーンスタイン基底関数は\n",
    "\n",
    "$$\n",
    "B_{0,1}(x)=1-x, \\quad B_{1,1}(x)=x,\n",
    "$$\n",
    "\n",
    "$2$ 次バーンスタイン基底関数は\n",
    "\n",
    "$$\n",
    "B_{0,2}(x)=(1-x)^2, \\quad B_{1,2}(x)=2x(1-x), \\quad B_{2,2}(x)=x^2\n",
    "$$\n",
    "\n",
    "となります。\n",
    "\n",
    "$n$ 次以下の多項式からなるベクトル空間を考えるとき、$\\left\\{1,x,x^2,\\ldots,x^n\\right\\}$ が基底になることは容易に分かりますが、$(n+1)$ 個の $n$ 次バーンスタイン基底関数もまた基底になります。このことから、任意の $n$ 次以下の多項式は線形結合\n",
    "\n",
    "$$\n",
    "\\sum_{i=0}^n r_i B_{i,n}(x)\n",
    "$$\n",
    "\n",
    "の形で書けることが分かります。\n",
    "\n",
    "このような形で表された多項式を、$n$ 次**バーンスタイン多項式（Bernstein polynomial）**と呼びます。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2. 例\n",
    "\n",
    "例として、$n=3$ の場合について考えます。\n",
    "\n",
    "$3$ 次バーンスタイン基底関数は\n",
    "\n",
    "$$\n",
    "B_{0,3}(x)=(1-x)^3, \\quad B_{1,3}(x)=3x(1-x)^2, \\quad B_{2,3}(x)=3x^2(1-x), \\quad B_{3,3}(x)=x^3\n",
    "$$\n",
    "\n",
    "であり、$0\\leq x\\leq 1$ の範囲でこれらのグラフを描画すると次のようになります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Matplotlib is building the font cache; this may take a moment.\n"
     ]
    },
    {
     "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": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "x = np.linspace(0,1,101)  #0から1まで101個の数からなる1次元配列\n",
    "\n",
    "B = [(1-x)**3,3*x*(1-x)**2,3*x**2*(1-x),x**3]  #各バーンスタイン基底関数の値（1次元配列）からなるリスト\n",
    "\n",
    "for i in range(4):  #i=0から3\n",
    "    plt.plot(x,B[i],label=\"$B_{\"+str(i)+\",3}(x)$\")  #labelの指定は少し複雑、strは文字列に変換する関数\n",
    "\n",
    "plt.grid()\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "さらに、\n",
    "\n",
    "$$\n",
    "r_0=1,\\quad r_1=2,\\quad r_2=3,\\quad r_3=1\n",
    "$$\n",
    "\n",
    "に対して $3$ 次バーンスタイン多項式\n",
    "\n",
    "$$\n",
    "\\sum_{i=0}^3 r_i B_{i,3}(x)\n",
    "$$\n",
    "\n",
    "を考えるとき、$0\\leq x\\leq 1$ におけるグラフは次のようになります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "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": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "x = np.linspace(0,1,101)\n",
    "\n",
    "B = [(1-x)**3,3*x*(1-x)**2,3*x**2*(1-x),x**3]\n",
    "r = [1,2,3,1]  #バーンスタイン多項式の係数のリスト\n",
    "\n",
    "y = 0\n",
    "for i in range(4):\n",
    "    y = y+r[i]*B[i]\n",
    "\n",
    "plt.plot(x,y,label=\"$1,2,3,1$\")\n",
    "\n",
    "plt.grid()\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 演習1\n",
    "\n",
    "$4$ 次バーンスタイン基底関数の $0\\leq x\\leq 1$ におけるグラフを描画してください。ただし、五つのグラフを一つの図に描画すること。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#演習1のコード"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 演習2\n",
    "\n",
    "$3$ 次バーンスタイン多項式\n",
    "\n",
    "$$\n",
    "\\sum_{i=0}^3 r_i B_{i,3}(x)\n",
    "$$\n",
    "\n",
    "を\n",
    "\n",
    "$$\n",
    "r_0=1,\\quad r_1=1,\\quad r_2=1,\\quad r_3=1\n",
    "$$\n",
    "\n",
    "と\n",
    "\n",
    "$$\n",
    "r_0=0,\\quad r_1=\\frac{1}{3},\\quad r_2=\\frac{2}{3},\\quad r_3=1\n",
    "$$\n",
    "\n",
    "に対してそれぞれ考えるとき、$0\\leq x\\leq 1$ におけるグラフを描画してください。ただし、二つのグラフを一つの図に描画すること。\n",
    "\n",
    "さらに、一つ目のグラフについて、得られた結果の理由を考察してください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#演習2のコード"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. バーンスタイン多項式による関数の近似\n",
    "\n",
    "バーンスタイン多項式は、関数の近似に用いることができます。\n",
    "\n",
    "$0\\leq x\\leq 1$ における連続関数 $f(x)$ が与えられたとき、\n",
    "\n",
    "$$\n",
    "r_i=f\\left(\\frac{i}{n}\\right),\\quad i=0,\\ldots,n\n",
    "$$\n",
    "\n",
    "に対して $n$ 次バーンスタイン多項式\n",
    "\n",
    "$$\n",
    "\\sum_{i=0}^n r_i B_{i,n}(x)\n",
    "$$\n",
    "\n",
    "を考えると、これは $n$ が大きいほどに $0\\leq x\\leq 1$ における $f(x)$ の良い近似になります。\n",
    "\n",
    "（より厳密に言うと、$n\\to\\infty$ のときに $0\\leq x\\leq 1$ において $f(x)$ に一様収束します。）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 演習3\n",
    "\n",
    "$n$ 次バーンスタイン基底関数の値を返す関数`Bernstein(i,n,x)`を定義した上で、関数\n",
    "\n",
    "$$\n",
    "f(x)=\\sin (\\pi x^2)\\quad (0\\leq x\\leq 1)\n",
    "$$\n",
    "\n",
    "を $6$次までのバーンスタイン多項式によって近似し、元の関数と得られた多項式の $0\\leq x\\leq 1$ におけるグラフを描画してください。ただし、二つのグラフを一つの図に描画すること。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "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": [
    "#演習3のコード\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "x = np.linspace(0,1,101)\n",
    "y=np.sin(np.pi*x**2)\n",
    "plt.plot(x,y,'-')\n",
    "plt.grid()\n",
    "\n",
    "#階乗の計算は、mathライブラリのfactorial関数を使うとよい"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第12回レポート課題\n",
    "\n",
    "演習1～演習3に取り組んでください。"
   ]
  }
 ],
 "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.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
