{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Described in Goldman, used as argument that Beziers are fractals because they are fixed points of an iterated function system.\n", "\n", "I think the algorithm developed by Goldman might be worse than just applying the Bezier definition...\n", "\n" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Binomial Coefficients" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from operator import mul # or mul=lambda x,y:x*y\n", "from fractions import Fraction\n", "\n", "def nCk(n,k): \n", " \"\"\" Binomial Coefficient nCk \"\"\"\n", " # Based on:\n", " # http://stackoverflow.com/questions/3025162/statistics-combinations-in-python\n", " # http://stackoverflow.com/questions/279561/what-is-the-python-equivalent-of-static-variables-inside-a-function\n", "\n", " \n", " # Dynamic programming is possible in python!\n", " # Not sure if it's actually worth it though\n", " try:\n", " return nCk.dynamic[(n,k)]\n", " except KeyError:\n", " nCk.dynamic.update({(n,k) : int( reduce(mul, (Fraction(n-i, i+1) for i in range(k)), 1) )})\n", " return nCk.dynamic[(n,k)]\n", "nCk.dynamic = {}\n", "\n", "# Simpler version...\n", "def nCr(n,r):\n", " f = math.factorial\n", " return f(n) / f(r) / f(n-r)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "from time import time\n", "t0 = time()\n", "nCk(100,50)\n", "print str(time() - t0)\n", "t0 = time()\n", "nCr(100,50)\n", "print str(time() - t0)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.00108003616333\n", "0.000107049942017\n" ] } ], "prompt_number": 3 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Bezier from Definition" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Bezier curve $P(t)$ of degree $n$\n", "\n", "$P(t) = \\sum_{j=0}^{n} B_j^n (t) P_j \\quad \\quad \\quad 0 \\leq t \\leq 1$\n", "\n", "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", "\n", "Binomial Coefficients: $\\left(^n_j\\right) = \\frac{n!}{n!(n-j)!} = \\text{nCj}$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def B(n,j, t):\n", " \"\"\" Bernstein Basis Function of degree n \"\"\"\n", " assert(0 <= j <= n)\n", " return nCk(n,j) * t**j * (1. - t)**(n-j)\n", "\n", "def Bezier(P, t):\n", " \"\"\" Apply Bezier definition to produce a point on the Bezier curve with control points P \"\"\"\n", " n = len(P)-1\n", " return [sum([B(n, j, t) * P[j][i] for j in xrange(n+1)]) for i in xrange(len(P[0]))]\n", "\n", "def BezierCurve(P, nPoints):\n", " return map(lambda t : Bezier(P,t), linspace(0,1,nPoints))\n", " \n", "def PlotBezier(P,nPoints=50,style='-'):\n", " \"\"\" Plot a Bezier \"\"\"\n", " points = map(lambda t : Bezier(P,t), linspace(0,1,nPoints))\n", " x = [p[0] for p in points]\n", " y = [p[1] for p in points]\n", " plot(x,y, style)\n", " plot([p[0] for p in P], [p[1] for p in P],'ro--')\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "title(\"Bezier Curves of Degree 2\")\n", "PlotBezier([(0,0),(0.4,0.8),(1,1)],nPoints=100,style='-')\n", "PlotBezier([(0,0),(0.4,-0.8),(1,1)],nPoints=100,style='-')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/usr/lib/pymodules/python2.7/matplotlib/axes.py:4486: UserWarning: No labeled objects found. Use label='...' kwarg on individual plots.\n", " warnings.warn(\"No labeled objects found. \"\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\ngg==\n", "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "De Casteljau Algorithm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Subdivide the original $n$ control points $\\{P_0 ... P_n\\}$ into $\\{Q_0 ... Q_n\\}$ and $\\{R_0 ... R_n\\}$ (ie: Makes $2n$ points)\n", "\n", "Defining $(n+1)\\times(n+1)$ matrices $L$ and $M$ such that $L P = Q$ and $M P = R$\n", "\n", "Then it can be shown (subdividing at $t = 1/2$)\n", "\n", "$L_{i,j} = \\left(\\frac{\\left(^j_k\\right)}{2^j}\\right)$ and $M_{i,j} = \\left(\\frac{\\left(^{n-j}_{n-k}\\right)}{2^{n-j}}\\right)$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Confusion:** Do $Q$ and $R$ converge to the same curve as applying the definition to produce points along $P(t)$?\n", "\n", "It is implied in Goldman, but it doesn't look like it, unless I made a mistake. See below." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def L(n):\n", " \"\"\" Gives L of size (n+1)*(n+1) \"\"\"\n", " try:\n", " return L.dynamic[n]\n", " except KeyError:\n", " result = asarray([asarray([ nCk(j,k) / (2.**j) for k in xrange(n+1)]) for j in xrange(n+1)])\n", " L.dynamic.update({n : result})\n", " return result\n", "L.dynamic = {} \n", "\n", "def M(n):\n", " \"\"\" Gives M of size (n+1)*(n+1) \"\"\"\n", " try:\n", " return M.dynamic[n]\n", " except KeyError:\n", " result = asarray([asarray([ nCk(n-j,n-k) / (2.**(n-j)) for k in xrange(n+1)]) for j in xrange(n+1)])\n", " M.dynamic.update({n : result})\n", " return result \n", "M.dynamic = {}\n", "\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "L(2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "array([[ 1. , 0. , 0. ],\n", " [ 0.5 , 0.5 , 0. ],\n", " [ 0.25, 0.5 , 0.25]])" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "def Casteljau(P, nPoints):\n", " \"\"\" Approximates the Bezier curve with control points P using the de Casteljau subdivision algorithm \"\"\"\n", " while len(P) < nPoints:\n", " Q = dot(L(len(P)-1), P)\n", " R = dot(M(len(P)-1), P)\n", " P = list(Q) + list(R)\n", " return P\n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "points = [(0,0), (0.5,1),(1,0),(1.4,-2)]\n", "c = Casteljau(points,50)\n", "PlotBezier(points)\n", "plot([p[0] for p in c], [p[1] for p in c], 'g-')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nSUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, it sort of works but not giving the same curve? Or maybe I just need *lots* more points and they will converge." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Iterated Function Systems" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Defining $L_p = P^{-1} L P$ and $M_p = P^{-1} M P$, then $P L_p = L P = Q$ and $P M_p = M P = R$\n", "\n", "\n", "$\\{L_p, M_p\\}$ is an iterated function system, $\\implies$ Beziers are fractals.\n", "\n", "Problem: $P$ needs to be invertable; introduce homogeneous coordinates $\\langle$insert hand waving here$\\rangle$ to \"lift\" it and then it all magically works" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def lift(P):\n", " \"\"\" Lift P to make it square by introducing homogeneous coordinates\"\"\"\n", " n = len(P)\n", " result = []\n", " for i in xrange(len(P)):\n", " ones = min(n-len(P[i]), max(1, i-1))\n", " zeroes = max(n-len(P[i])-ones, 0)\n", " result += [asarray(list(P[i]) + [1. for _ in xrange(ones)] + [0. for _ in xrange(zeroes)])]\n", " return asarray(result)\n", "\n", "def lower(P):\n", " \"\"\" Lower square P back to list of 2D points \"\"\"\n", " return [row[0:2] for row in P]\n", "\n", "def Lp(P):\n", " return dot(inv(P), dot(L(len(P)-1), P))\n", "\n", "def Mp(P):\n", " return dot(inv(P), dot(M(len(P)-1), P)) # Typo in Goldman? Reads \"P^-1 * R * P\" instead of \"P^-1 * M * P\"" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, Goldman's method is:\n", "\n", "
\n", "
1. lift the control points\n", "P from the ambient affine space of dimension $d$ to the\n", "ambient affine space of dimension $n$;\n", "
2. generate the corresponding higher dimensional Bezier curve using the\n", "iterated function system $\\{L_p , M_p \\}$ ; \n", "
3. project the\n", "resulting $n$-dimensional Bezier curve orthogonally back\n", "down to the original dimension $d$.\n", "
\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def Goldman(P, nPoints):\n", " while len(P) < nPoints:\n", " Pl = lift(P)\n", " LP = Lp(Pl)\n", " MP = Mp(Pl)\n", " Q = dot(Pl, LP)\n", " R = dot(Pl, MP)\n", " P = lower(Q) + lower(R)\n", " return P\n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "points = [(0,0), (0.5,1),(1,0),(1.4,-2)]\n", "c = Casteljau(points,50)\n", "c2 = Goldman(points,50)\n", "PlotBezier(points)\n", "plot([p[0] for p in c], [p[1] for p in c], 'g-')\n", "plot([p[0] for p in c2], [p[1] for p in c2], 'r-')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The algorithm works, I guess, but is it useful? It will be a lot slower than de Casteljau, because it does a lot more matrix manipulation stuff, but it gives no more accuracy on each iteration." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Time Performance of Casteljau, Goldman, and Basic Bezier creation" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from time import time\n", "points = [(0,0), (0.5,1),(1,0),(1.4,-2)]\n", "costs = {BezierCurve : [], Casteljau : [], Goldman : []}\n", "stddev = {}\n", "nAverages = 10\n", "depth=8\n", "for method in costs:\n", "\n", " stddev.update({method : []})\n", " for n in xrange(1,depth):\n", " #display(\"depth %d for %s\" % (n, str(method)))\n", " c = []\n", " for _ in xrange(nAverages):\n", " t0 = time()\n", " p = method(points, nPoints=len(points) * 2.**n)\n", " c += [time()-t0]\n", " costs[method] += [mean(c)]\n", " stddev[method] += [var(c)**0.5]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "title(\"Time to produce $n$-dimensional Bezier Curve\")\n", "xlabel(\"$n$\")\n", "ylabel(\"$t$ (s)\")\n", "x = [len(points) * 2.**n for n in xrange(1,depth)]\n", "for method in costs:\n", " errorbar(x,costs[method],yerr=stddev[method],label =str(method).split(\" \")[1])\n", "legend(loc=\"upper left\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n+LAKCAhQhYWF6tSpU6pdu3ZKr9ebJe6KyszMVElJSUoppfLy8lSHDh3UkSNHGsw+5ufnK6WUKioq\nUmFhYWrHjh0NZt+ue//999XIkSPVoEGDlFIN6/3p6+urzp8/b/S3hrR/Y8aMUZ999plSSnuP5uTk\n1Oj+1ftEsnv3btW/f3/D/XfffVe9++67Zoyo6k6dOmWUSDp27KiysrKUUtoHcceOHZVS2reF0kde\n/fv3V3v27DFtsNX06KOPqp9++qnB7WN+fr4KDg5Whw4dalD7lpqaqh544AG1detWwxFJQ9o/X19f\nlZ2dbfS3hrJ/OTk5qk2bNjf9vSb3r97PinSra08agrNnz+Lm5gaAm5sbZ89q18JkZGQYjVqrb/uc\nkpJCUlISYWFhDWYfS0pKCAwMxM3Njfvvv58777yzwewbwIwZM1i0aBGWpSZSa0j7Z2FhwYMPPkhw\ncDCffvop0HD279SpU7i4uDB+/Hi6devGU089RX5+fo3uX71PJFUq314PWVhYlLuv9eV5uHz5MhER\nESxZsgR7e3ujZfV5Hy0tLTlw4ABpaWls376dn3/+2Wh5fd63jRs34urqSlBQ0C2v16rP+wewa9cu\nkpKSiI2N5V//+hc7duwwWl6f96+4uJj9+/fz7LPPsn//fuzs7Jg/f77ROtXdv3qfSCpyfUp95ebm\nRlZWFgCZmZm4umpzupd1vY1OpzNLjJVRVFREREQEo0ePZsiQIUDD20cHBwceeeQRfv311wazb7t3\n72b9+vW0adOGESNGsHXrVkaPHv3/27t7lUaiMIzjj6BgYykkMFYBBcM4CRgrQVAsExiwsPcGvABb\nU3gRQrBJYxtFLYQUgoWIkCZBp7ASFCKiAZvXYt2wLAu77Jns4Nn/r0z1Ps08zEfe400+Scp/HuEw\nPT2tOI51eXnpTb4gCBQEgSqViiRpY2NDV1dXyuVyqeX78kXi839MarWaGp+7TBqNxvDiW6vV1Gw2\n9f7+riRJ1Ov1tLS0lOWov2Vm2tra0vz8vLa3t4e/+5Dx8fFR/f63/W6DwUCnp6cql8teZJOker2u\n+/t7JUmiZrOp1dVVHRwceJPv7e1NLy8vkqTX11ednJwoDENv8uVyOc3MzKjb7UqSzs7OVCwWVa1W\n08uX2hudDLVaLZudnbVCoWD1ej3rcf7K5uam5fN5m5iYsCAIbH9/356enmxtbe2Xn+ft7u5aoVCw\nubk5Oz4+znDyP9Nut21sbMyiKLJSqWSlUsmOjo68yHhzc2PlctmiKLIwDG1vb8/MzItsPzs/Px9+\nteVLvru7O4uiyKIosmKxOLyG+JLPzOz6+toWFxdtYWHB4ji2fr+faj5vDrYCAGTjyz/aAgBkiyIB\nADihSAAATigSAIATigQA4IQiAQA4+WfnkQD/m3a7rcPDQ62srEiSOp2OdnZ2Mp4KSB93JMCIfN9P\nFASB4jhWr9fLeCJgNCgSYESWl5d1e3urSqWi5+dnjY/zAAB+okiAERkMBpqcnJQktVotra+v6+Li\nIuOpgPRRJMCIdDqd4fuRqakpPTw8eLOZGvgRu7YAAE64IwEAOKFIAABOKBIAgBOKBADghCIBADih\nSAAATigSAIATigQA4OQDGQo6bPj82VkAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 18 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Approximating a Circle using Cubic Beziers" ] }, { "cell_type": "code", "collapsed": false, "input": [ "k = 4. * (2.**0.5 - 1.) / 3.\n", "points = [(0,1), (k, 1), (1, k), (1,0)]\n", "c = BezierCurve(points, 50) # This appears to be more accurate than using the de Casteljau algorithm :S\n", "c += list(array([-1,1]) * c)\n", "c += list(array([1,-1]) * c)\n", "scatter([p[0] for p in c], [p[1] for p in c])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 125, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 125 }, { "cell_type": "code", "collapsed": false, "input": [ "scatter([arctan2(p[0], p[1]) for p in c], [p[0]**2. + p[1]**2. for p in c])\n", "title(\"$r$ vs Angle\")\n", "xlabel(\"Angle (rad)\")\n", "ylabel(\"$r$\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 126, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nKbNdVlaW1q8eR3Uw0Erge5rNXfjcc8/XakytWrXXvoCtqXYPLSXQjsHBLVhUVGTb7sKFC3R2rk+1\nNdCJQBaBA3R2DuEnn6zVXV5RUREDAiKpKC8T+InASgJNaTa354wZz5bZdvny5VrrawKBDALLCETT\nyanZLXUJ/drVq1dpNjsTWEXgLIFLBJrRaGzDESNGldn2X//6l1bbXkbgMtU+9xC6ujbi8ePHdZd5\n+PBhOjs3pNoltUb7PCyhg4Mnt2/fXmbbgQOH0GCI0xLGVQJnCLxLBwfXWu0K2bhxI52cmmsJLIlq\nq3IsTaZ6XLu27P/xuHGTaTZ3pVrzX03gJyrKs4yIuKtaCX358vfo7NyCQDrVcYy7CTxON7dGvH79\num27goIC+voGa5+95dpnJ5zAaLZv37PWzgFJTpjwJI3Gvtr7t1LtOuxIJyfPcl1wamXqQa3ik08g\nnA4OMZw8+ZlajckeJGn8BjRo4K99MSZT7Z7yoadnxbWzzZs3U1E8qQ6ADqHaDG5DR8f6PHToUK3E\n89FHH2txHKTaf6zG5OHRlCdOnCi3/ZYtW7Qa5tdUuxF+JjCbgwcP111mZmYmnZ39tJpbkXacVmzf\nvkuZJFXqmWeeo9odEqSdg0ME7mVwcAv+8ssvt/L2Sao13SFDHqM6O6YD1YkAOwm0Z9u2HSqM6S9/\neZHq4HBpTD/Q1XUgP/roI93lLl26lE5Oj1HtovTVLtSOfP318mNX165dY8uWbah2z2ylOpOrI4F6\nHDfuyVt6/6UuXLigXZTvI7CXaktXjWn+/NfKbX/9+nVaLG21c0aqExkO08HBk6dPn9ZdbrduA6h2\ny53VjpNCg6FRhZWCY8eO0dm5tBXuQeA5At9SUepz/fpPb+n9l/r+++9pNtfTklfpeMV2GgwN+c03\n35Tb/r///S9dXb34vzGvZwnso59fi1qJx54kadzhVq9eo3V/pGpfjtN0cEjg/PnzK91nyJDHaDS2\nozqecE2r9bzBVq3a33I858+f17paHqDaN11I4CAdHUNtXUQViYvrTrV1MFf7kvjR2bkR09PTqyzT\narVy+PCxVGcINSPQkkAmXVyace/evRXuU1JSwiZNgqh26V3XLuiN6ODQl88990LN3vwNNmzYQBeX\nyBsuWv8kEERn54aVthyKiopoMjkR+IrqDKJiAhGMjIzhlStXqizz/PnzDAqKoNoXbtXe1wY6O9er\n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\n", "text": [ "" ] } ], "prompt_number": 126 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Perfect circle $\\implies r = 1 \\forall \\theta$" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }