From: Sam Moore Date: Thu, 16 Jan 2014 05:36:01 +0000 (+0800) Subject: Beziars from Iterated Function Systems X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;h=84bd0152f58f92049357d184d1cee7c57722cb83;p=matches%2FFYP2014.git Beziars from Iterated Function Systems Using Goldman's Iterated Function System to generate a Bezier is horribly inefficient. I guess the point is that it proves that a Bezier is a fractal. The subdivision still looks like it gives a slightly different curve to just sampling P(t), but maybe I aren't using enough points. --- diff --git a/ipython_notebooks/de_Casteljau.ipynb b/ipython_notebooks/de_Casteljau.ipynb index 976a6b6..c7a2805 100644 --- a/ipython_notebooks/de_Casteljau.ipynb +++ b/ipython_notebooks/de_Casteljau.ipynb @@ -13,38 +13,16 @@ "source": [ "Described in Goldman, used as argument that Beziers are fractals because they are fixed points of an iterated function system.\n", "\n", - "The de Casteljau algorithm splits a Bezier curve into two Bezier segments.\n", + "I think the algorithm developed by Goldman might be worse than just applying the Bezier definition...\n", "\n" ] }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Bezier Curve 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)!}$" - ] - }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ - "Helpers" + "Binomial Coefficients" ] }, { @@ -78,7 +56,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 216 + "prompt_number": 2 }, { "cell_type": "code", @@ -99,12 +77,12 @@ "output_type": "stream", "stream": "stdout", "text": [ - "0.000294923782349\n", - "0.000556945800781\n" + "0.00108003616333\n", + "0.000107049942017\n" ] } ], - "prompt_number": 215 + "prompt_number": 3 }, { "cell_type": "heading", @@ -114,6 +92,20 @@ "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, @@ -127,8 +119,11 @@ " \"\"\" 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='o-'):\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", @@ -139,7 +134,7 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 266 + "prompt_number": 4 }, { "cell_type": "code", @@ -147,36 +142,58 @@ "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='-')\n", - "legend()" + "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": 267 + "prompt_number": 5 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ - "Fractal Beziers" + "De Casteljau Algorithm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "$ L P = Q$ and $ M P = R$" + "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." ] }, { @@ -184,6 +201,7 @@ "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", @@ -193,6 +211,7 @@ "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", @@ -205,44 +224,56 @@ "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 296 + "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ - "points = [(0,0), (0.5,1), (1,0)]" + "L(2)" ], "language": "python", "metadata": {}, - "outputs": [], - "prompt_number": 298 + "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)[1:]\n", + " P = list(Q) + list(R)\n", " return P\n", " " ], "language": "python", "metadata": {}, "outputs": [], - "prompt_number": 329 + "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ - "points = [(0,0), (0.5,1), (1,0)]\n", + "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], 'go-')" + "plot([p[0] for p in c], [p[1] for p in c], 'g-')" ], "language": "python", "metadata": {}, @@ -250,36 +281,225 @@ { "metadata": {}, "output_type": "pyout", - "prompt_number": 332, + "prompt_number": 9, "text": [ - "[]" + "[]" ] }, { "metadata": {}, "output_type": "display_data", - "png": "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\nSXIXQggv9P8BcEdRFyfaa+oAAAAASUVORK5CYII=\n", + "png": "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\nSUVORK5CYII=\n", "text": [ - "" + "" ] } ], - "prompt_number": 332 + "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ - "So, it sort of works but not giving the same curve as the vanilla method" + "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": [], + "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": [] + "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 } ], "metadata": {} diff --git a/ipython_notebooks/fractals_basic.ipynb b/ipython_notebooks/fractals_basic.ipynb index 38b7eee..7ce2dea 100644 --- a/ipython_notebooks/fractals_basic.ipynb +++ b/ipython_notebooks/fractals_basic.ipynb @@ -169,7 +169,7 @@ " normal = asarray([-s[1], s[0]])\n", " normal = normal / sum(normal*normal)**0.5\n", " # Calculate the three points \n", - " # Are these are the maps that form the iterated function system?\n", + " # Are these are the maps that form the iterated function system? I don't think so.\n", " # \"Notice that in each case the entire fractal can be recovered from a single point.\" Goldman\n", " # But for this I need *two* points :S\n", " \n",