Attempt de Casteljau stuff
[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       "$ L P = Q$ and $ M P = R$"
180      ]
181     },
182     {
183      "cell_type": "code",
184      "collapsed": false,
185      "input": [
186       "def L(n):\n",
187       "    try:\n",
188       "        return L.dynamic[n]\n",
189       "    except KeyError:\n",
190       "        result = asarray([asarray([ nCk(j,k) / (2.**j) for k in xrange(n+1)]) for j in xrange(n+1)])\n",
191       "        L.dynamic.update({n : result})\n",
192       "        return result\n",
193       "L.dynamic = {}                        \n",
194       "\n",
195       "def M(n):\n",
196       "    try:\n",
197       "        return M.dynamic[n]\n",
198       "    except KeyError:\n",
199       "        result = asarray([asarray([ nCk(n-j,n-k) / (2.**(n-j)) for k in xrange(n+1)]) for j in xrange(n+1)])\n",
200       "        M.dynamic.update({n : result})\n",
201       "        return result       \n",
202       "M.dynamic = {}\n",
203       "\n"
204      ],
205      "language": "python",
206      "metadata": {},
207      "outputs": [],
208      "prompt_number": 296
209     },
210     {
211      "cell_type": "code",
212      "collapsed": false,
213      "input": [
214       "points = [(0,0), (0.5,1), (1,0)]"
215      ],
216      "language": "python",
217      "metadata": {},
218      "outputs": [],
219      "prompt_number": 298
220     },
221     {
222      "cell_type": "code",
223      "collapsed": false,
224      "input": [
225       "def Casteljau(P, nPoints):\n",
226       "    while len(P) < nPoints:\n",
227       "        Q = dot(L(len(P)-1), P)\n",
228       "        R = dot(M(len(P)-1), P)\n",
229       "        P = list(Q) + list(R)[1:]\n",
230       "    return P\n",
231       "    "
232      ],
233      "language": "python",
234      "metadata": {},
235      "outputs": [],
236      "prompt_number": 329
237     },
238     {
239      "cell_type": "code",
240      "collapsed": false,
241      "input": [
242       "points = [(0,0), (0.5,1), (1,0)]\n",
243       "c = Casteljau(points,50)\n",
244       "PlotBezier(points)\n",
245       "plot([p[0] for p in c], [p[1] for p in c], 'go-')"
246      ],
247      "language": "python",
248      "metadata": {},
249      "outputs": [
250       {
251        "metadata": {},
252        "output_type": "pyout",
253        "prompt_number": 332,
254        "text": [
255         "[<matplotlib.lines.Line2D at 0x5a3a6d0>]"
256        ]
257       },
258       {
259        "metadata": {},
260        "output_type": "display_data",
261        "png": "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\nSXIXQggv9P8BcEdRFyfaa+oAAAAASUVORK5CYII=\n",
262        "text": [
263         "<matplotlib.figure.Figure at 0x5942790>"
264        ]
265       }
266      ],
267      "prompt_number": 332
268     },
269     {
270      "cell_type": "markdown",
271      "metadata": {},
272      "source": [
273       "So, it sort of works but not giving the same curve as the vanilla method"
274      ]
275     },
276     {
277      "cell_type": "code",
278      "collapsed": false,
279      "input": [],
280      "language": "python",
281      "metadata": {},
282      "outputs": []
283     }
284    ],
285    "metadata": {}
286   }
287  ]
288 }

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