7e3dbd37e5e99ab83ce539f3add1fa2bdd5e97bd
[matches/FYP2014.git] / ipython_notebooks / de_Casteljau.ipynb
1 {
2  "metadata": {
3   "name": ""
4  },
5  "nbformat": 3,
6  "nbformat_minor": 0,
7  "worksheets": [
8   {
9    "cells": [
10     {
11      "cell_type": "markdown",
12      "metadata": {},
13      "source": [
14       "Described in Goldman, used as argument that Beziers are fractals because they are fixed points of an iterated function system.\n",
15       "\n",
16       "The de Casteljau algorithm splits a Bezier curve into two Bezier segments.\n",
17       "\n"
18      ]
19     },
20     {
21      "cell_type": "heading",
22      "level": 3,
23      "metadata": {},
24      "source": [
25       "Bezier Curve Definition"
26      ]
27     },
28     {
29      "cell_type": "markdown",
30      "metadata": {},
31      "source": [
32       "\n",
33       "Bezier curve $P(t)$ of degree $n$\n",
34       "\n",
35       "$ P(t) = \\sum_{j=0}^{n} B_j^n (t) P_j  \\quad \\quad \\quad 0 \\leq t \\leq 1$\n",
36       "\n",
37       "For control points $P_0 ... P_n$, with Bernstein basis functions $B_j^n(t) = \\left(^n_j\\right)t^j(1 - t)^{n-j} \\quad \\quad j=0,...n$\n",
38       "\n",
39       "Binomial Coefficients: $\\left(^n_j\\right) = \\frac{n!}{n!(n-j)!}$"
40      ]
41     },
42     {
43      "cell_type": "heading",
44      "level": 2,
45      "metadata": {},
46      "source": [
47       "Helpers"
48      ]
49     },
50     {
51      "cell_type": "code",
52      "collapsed": false,
53      "input": [
54       "from operator import mul    # or mul=lambda x,y:x*y\n",
55       "from fractions import Fraction\n",
56       "\n",
57       "def nCk(n,k): \n",
58       "    \"\"\" Binomial Coefficient nCk \"\"\"\n",
59       "    # Based on:\n",
60       "    # http://stackoverflow.com/questions/3025162/statistics-combinations-in-python\n",
61       "    # http://stackoverflow.com/questions/279561/what-is-the-python-equivalent-of-static-variables-inside-a-function\n",
62       "\n",
63       "    \n",
64       "    # Dynamic programming is possible in python!\n",
65       "    # Not sure if it's actually worth it though\n",
66       "    try:\n",
67       "        return nCk.dynamic[(n,k)]\n",
68       "    except KeyError:\n",
69       "        nCk.dynamic.update({(n,k) : int( reduce(mul, (Fraction(n-i, i+1) for i in range(k)), 1) )})\n",
70       "    return nCk.dynamic[(n,k)]\n",
71       "nCk.dynamic = {}\n",
72       "\n",
73       "# Simpler version...\n",
74       "def nCr(n,r):\n",
75       "    f = math.factorial\n",
76       "    return f(n) / f(r) / f(n-r)"
77      ],
78      "language": "python",
79      "metadata": {},
80      "outputs": [],
81      "prompt_number": 216
82     },
83     {
84      "cell_type": "code",
85      "collapsed": false,
86      "input": [
87       "from time import time\n",
88       "t0 = time()\n",
89       "nCk(100,50)\n",
90       "print str(time() - t0)\n",
91       "t0 = time()\n",
92       "nCr(100,50)\n",
93       "print str(time() - t0)"
94      ],
95      "language": "python",
96      "metadata": {},
97      "outputs": [
98       {
99        "output_type": "stream",
100        "stream": "stdout",
101        "text": [
102         "0.000294923782349\n",
103         "0.000556945800781\n"
104        ]
105       }
106      ],
107      "prompt_number": 215
108     },
109     {
110      "cell_type": "heading",
111      "level": 2,
112      "metadata": {},
113      "source": [
114       "Bezier from Definition"
115      ]
116     },
117     {
118      "cell_type": "code",
119      "collapsed": false,
120      "input": [
121       "def B(n,j, t):\n",
122       "    \"\"\" Bernstein Basis Function of degree n \"\"\"\n",
123       "    assert(0 <= j <= n)\n",
124       "    return nCk(n,j) * t**j * (1. - t)**(n-j)\n",
125       "\n",
126       "def Bezier(P, t):\n",
127       "    \"\"\" Apply Bezier definition to produce a point on the Bezier curve with control points P \"\"\"\n",
128       "    n = len(P)-1\n",
129       "    return [sum([B(n, j, t) * P[j][i] for j in xrange(n+1)]) for i in xrange(len(P[0]))]\n",
130       "        \n",
131       "def PlotBezier(P,nPoints=50,style='o-'):\n",
132       "    \"\"\" Plot a Bezier \"\"\"\n",
133       "    points = map(lambda t : Bezier(P,t), linspace(0,1,nPoints))\n",
134       "    x = [p[0] for p in points]\n",
135       "    y = [p[1] for p in points]\n",
136       "    plot(x,y, style)\n",
137       "    plot([p[0] for p in P], [p[1] for p in P],'ro--')\n"
138      ],
139      "language": "python",
140      "metadata": {},
141      "outputs": [],
142      "prompt_number": 266
143     },
144     {
145      "cell_type": "code",
146      "collapsed": false,
147      "input": [
148       "title(\"Bezier Curves of Degree 2\")\n",
149       "PlotBezier([(0,0),(0.4,0.8),(1,1)],nPoints=100,style='-')\n",
150       "PlotBezier([(0,0),(0.4,-0.8),(1,1)],nPoints=100,style='-')\n",
151       "legend()"
152      ],
153      "language": "python",
154      "metadata": {},
155      "outputs": [
156       {
157        "metadata": {},
158        "output_type": "display_data",
159        "png": "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\ngg==\n",
160        "text": [
161         "<matplotlib.figure.Figure at 0x3c4ee50>"
162        ]
163       }
164      ],
165      "prompt_number": 267
166     },
167     {
168      "cell_type": "heading",
169      "level": 2,
170      "metadata": {},
171      "source": [
172       "Fractal Beziers"
173      ]
174     },
175     {
176      "cell_type": "markdown",
177      "metadata": {},
178      "source": [
179       "Urgh"
180      ]
181     },
182     {
183      "cell_type": "code",
184      "collapsed": false,
185      "input": [],
186      "language": "python",
187      "metadata": {},
188      "outputs": []
189     }
190    ],
191    "metadata": {}
192   }
193  ]
194 }

UCC git Repository :: git.ucc.asn.au