{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "One of my favorite activities in mathematics is exploring simple rules that can create complex systems. [Fractals](http://mathworld.wolfram.com/Fractal.html), such as those generated by Lindemayer systems (L-systems), are a great example of this. They are simple enough that they can be explained in ten minutes, but you could easily spend hours exploring what they are capable of.\n", "\n", "In this tutorial, I begin with line-drawing as a primitive and build up to a working L-system." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cartesian Plotting\n", "\n", "To draw fractals, first we need to be able to draw lines. I'll use a library called [**matplotlib**](https://matplotlib.org/) to do the drawing. If you are already familiar with matplotlib, you can [skip to the next section](#Turtle-Graphics).\n", "\n", "The following code loads matplotlib:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "plt.style.use('bmh') # Use some nicer default colors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can use matplotlib to draw lines by calling `plt.plot`. We need to pass it two lists: a list of values on the x-axis, and a list of values on the y-axis. matplotlib steps through both of these lists at the same time to create coordinate pairs, and then draws a line through them.\n", "\n", "For example, to draw a line from the point `(0, 0)` to `(1, 1)`, and then another line from `(1, 1)` to `(2, 0)`, we can make the following call to `plot`:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(\n", " [0, 1, 2], # X-values\n", " [0, 1, 0] # Y-values\n", ")\n", "# The next two lines add labels to the axes.\n", "plt.xlabel('x')\n", "plt.ylabel('y');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I find it easier to think about lists of coordinate pairs than it is to think about two lists of coordinates. Below is a function below that takes a list of coordinates, converts them to the lists that matplotlib expects, and plots them." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def plot_coords(coords, bare_plot=False):\n", " if bare_plot:\n", " # Turns off the axis markers.\n", " plt.axis('off')\n", " # Ensures equal aspect ratio.\n", " plt.axes().set_aspect('equal', 'datalim')\n", " # Converts a list of coordinates into \n", " # lists of X and Y values, respectively.\n", " X, Y = zip(*coords)\n", " # Draws the plot.\n", " plt.plot(X, Y);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can draw a series of points with matplotlib like this:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgwAAAFdCAYAAABvvDXAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3X+Unmdd5/H31RCp9GwxEmjKCdrEYIrr2ko1Al1+JRIU\njyCWVc6zCyXhR9XZwHaPscezNebIOUZBxUlWjg3YFqOwy3GWpdthbaXDj6N1QGpJkN0yFaaQaUva\nDKV0+5AS2mv/mEmd30/mxz3Xfd/f9+ucOYfcuZ/h+/3M9Tz59rmv+5mUc0aSJGkh55QuQJIk1Z8D\ngyRJ6smBQZIk9eTAIEmSenJgkCRJPTkwSJKknhwYJElST08pXcBy3Xbbbc8AXgncA5wqW40kSY1y\nLnARcMuOHTvGFzqx8QMDE8PCX5YuYj5DQ0Ns3769dBlFRc8gev9gBtH7BzOA2mfw74EPLnRCavon\nPd52220vAv7uoosu4txzzy1dziy7du3ihhtuKF1GUdEziN4/mEH0/sEMoJ4ZnDp1invuuQfg8h07\ndty+0LlteIfhFMC5557L0572tNK1zLJmzZpa1rWaomcQvX8wg+j9gxlA7TPoeUnfTY8VO3HiROkS\nioueQfT+wQyi9w9mAM3PwIGhYvfff3/pEoqLnkH0/sEMovcPZgDNz8CBoWKXXnpp6RKKi55B9P7B\nDKL3D2YAzc/AgaFiV1xxRekSioueQfT+wQyi9w9mAM3PoA13STwfuOPiiy+u82YSSZJqp9vtctdd\ndwFctmPHjn9c6FzfYZAkST05MFSsr6+vdAnFRc8gev9gBtH7BzOA5mfgwFCxGn+q16qJnkH0/sEM\novcPZgDNz8A9DJIkBeUeBkmStKIcGCRJUk8ODBUbHh4uXUJx0TOI3j+YQfT+wQyg+Rk4MFTs4MGD\npUsoLnoG0fsHM4jeP5gBND8DNz1WrNvt1rKu1RQ9g+j9gxlE7x/MAOqZgZsea6Rui6OE6BlE7x/M\nIHr/YAbQ/AwcGCRJUk8ODJIkqScHhort27evdAnFRc8gev9gBtH7BzOA5mdQ6cCQUnpxSummlNK9\nKaUnUkqv7nH+SyfPm/r1eErpWVXWWaWNGzeWLqG46BlE7x/MIHr/YAbQ/AwqvUsipfQzwIuAO4D/\nAbw253zTAue/FBgCfhh45MzxnPMD8z2m7ndJSJJUV4u5S+IpVRaSc/5r4K8BUkppEQ99MOf8rWqq\nkiRJi1XHPQwJ+HxK6b6U0q0ppReVLkiSpOjqNjDcD1wFXAH8InAc+GRK6dKiVS3DyMhI6RKKi55B\n9P7BDKL3D2YAzc+gVgNDznkk5/y+nPOdOefhnPObgduBqxd63KFDh9i2bRudTmfa186dOxkcHJx2\n7tDQEJ1OZ9b32Lt3L0eOHJl27OjRo3Q6HcbHx6cdP3DgAP39/dOOjY2N0el0Zi2IXbt2zdoZ2+12\n6XQ6sz5XfGBggL6+vlm17d69u3gfhw8fXnIf+/fvb0UfZyy2j7e85S2t6GM5P49rrrmmFX0s9edx\n5jnQ9D6mWmwfP//zP9+KPpbz89i/f3/RPgYGBp78t3Hr1q10Oh127drF0NDQrMfNZdU+Gjql9ATw\nCwttepznce8CLs85Xz7X39d90+PY2Fjjd8YuV/QMovcPZhC9fzADqGcGbfto6EuZuFTRSHVbHCVE\nzyB6/2AG0fsHM4DmZ1DpXRIppfOALUxsZATYnFK6BPhGzvl4SukA8Oyc85WT578DGAW+CJwLvBV4\nOfCKKuuUJEkLq3RgAH4C+ASQJ7/+cPL4B4DdwAbgOVPO/57Jc54NdIFjwI6c86crrlOSJC2g0ksS\nOedP5ZzPyTmvmfG1e/Lvd+Wct085/9055+fmnM/LOT8z59z4YWHm5paIomcQvX8wg+j9gxlA8zNo\nwh6GRut2u6VLKC56BtH7BzOI3j+YATQ/g1W7S6Iqdb9LQpKkumrbXRKSJKkwBwZJktSTA0PFZn5a\nWUTRM4jeP5hB9P7BDKD5GTgwVGzPnj2lSyguegbR+wcziN4/mAE0P4M1Uz/jvIlGR0cvBK5av349\na9euLV3OLFu2bGHDhg2lyygqegbR+wcziN4/mAHUM4PTp09z8uRJgMObN29e8FOVvUtCkqSgvEtC\nkiStKAcGSZLUkwNDxWb+jvSIomcQvX8wg+j9gxlA8zNwYKjYsWPHSpdQXPQMovcPZhC9fzADaH4G\nbnqUJCkoNz1KkqQV5cAgSZJ6cmCQJEk9OTBUrNPplC6huOgZRO8fzCB6/2AG0PwM/Gjoiq1bt45N\nmzaVLqOo6BlE7x/MIHr/YAZQzwz8aGhJktSTd0lIkqQV5cAgSZJ6cmCo2ODgYOkSioueQfT+wQyi\n9w9mAM3PwIGhYgMDA6VLKC56BtH7BzOI3j+YATQ/Azc9SpIUlJseJUnSinJgkCRJPTkwSJKknhwY\nKtbX11e6hOKiZxC9fzCD6P2DGUDzM3BgqNj27dtLl1Bc9Ayi9w9mEL1/MANofgbeJSFJUlDeJSFJ\nklaUA4MkSerJgaFiw8PDpUsoLnoG0fsHM4jeP5gBND8DB4aKHTx4sHQJxUXPIHr/YAbR+wczgOZn\n4KbHinW73VrWtZqiZxC9fzCD6P2DGUA9M3DTY43UbXGUED2D6P2DGUTvH8wAmp+BA4MkSerJgUGS\nJPXkwFCxffv2lS6huOgZRO8fzCB6/2AG0PwMHBgqtnHjxtIlFBc9g+j9gxlE7x/MAJqfgXdJSJIU\nlHdJSJKkFeXAIEmSenJgqNjIyEjpEoqLnkH0/sEMovcPZgDNz8CBoWL79+8vXUJx0TOI3j+YQfT+\nwQyg+Rm46bFiY2Njjd8Zu1zRM4jeP5hB9P7BDKCeGbjpsUbqtjhKiJ5B9P7BDKL3D2YAzc/AgUGS\nJPXkwCBJknpyYKhYf39/6RKKi55B9P7BDKL3D2YAzc/AgaFi3W63dAnFRc8gev9gBtH7BzOA5mfg\nXRKSJAXlXRKSJGlFVTowpJRenFK6KaV0b0rpiZTSq8/iMS9LKd2RUjqVUhpJKV1ZZY2SJKm3qt9h\nOA/4PPBrQM9rHymli4CbgduAS4B+4P0ppVdUV2K1xsfHS5dQXPQMovcPZhC9fzADaH4GlQ4MOee/\nzjnvyzl/FEhn8ZBfBb6Sc/6NnPOXcs5/AvwVcHWVdVZpz549pUsoLnoG0fsHM4jeP5gBND+Duu1h\neAHw8RnHbgFeWKCWFXHNNdeULqG46BlE7x/MIHr/YAbQ/AyeUrqAGTYAJ2YcOwGcn1J6as75sQI1\nLcsll1xSuoTiomcQvX+IncHxb57i2OPP4nP/cF/pUgp7ZugMnvqUc9ix5eLSZSxL3QYGSWqNO+97\nhH23fJnHHm/27etaGZ/52sMces3W0mUsWd0uSXwduGDGsQuAby307sKhQ4fYtm0bnU5n2tfOnTsZ\nHBycdu7Q0BCdTmfW99i7dy9HjhyZduzo0aN0Op1ZG1UOHDgw6xO7xsbG6HQ6s37f+eHDh9m3b9+0\nY91ul06nw/Dw8LTjAwMD9PX1zapt9+7d9mEf9tGwPv7+yw/wul96PSf/+di04+N3DjH64XfNqu3L\nf/FOHvqnv5127OGRz3H3DdfOOverH+nnwc9+bNqxR8dGuPuGazn96MPTjt97643c/4kPTTv22EMn\nuPuGa/n2A1+bdvzE332E4zdfN+3Y4985xd03XMsjo1+wj2X28czz1hZ9fgwMDDz5b+PWrVvpdDrs\n2rWLoaGhWY+by6p9cFNK6QngF3LONy1wzu8BP5tzvmTKsQ8C35dzftVcj6n7BzcdOXKEN7zhDaXL\nKCp6BtH7h3gZzHxn4fx//gS/9fa3Fq6qrMGB/8bPXfH60mWsmuMPP8af3H6cM28ubf7+7+Wyb36G\nt+6u1ycFLOaDmyq9JJFSOg/Ywr/cIbE5pXQJ8I2c8/GU0gHg2TnnMwn+KdCXUvp94HpgB/A6YM5h\noQmOHTvW+6SWi55B9P4hVgYzh4UX/MD5PPp/7+OSZ/+rwpWV9RdfGwmTwfFvnuLAJ++ZNiy861Vb\neOdv/VnZwpap0ncYUkovBT7B7M9g+EDOeXdK6QbgB3PO26c85iXAe4AfAcaA38k5H2EedX+HQVIc\ncw0Lv7VjE2vX1O3qr6py/Jun2Puxu/lG97vAvwwL559bzy2DtXmHIef8KRbYJ5Fz3jXHsU8Dl1VZ\nlyStNIcFNW1YWCxXsiQtk8OC2j4sgAODJC2Lw4IiDAvgwFC5uW7tiiZ6BtH7h/ZmcLbDQlv7X4y2\nZrCYYaHpGazZv39/6RqWZXR09ELgqvXr17N27drS5cyybt06Nm3aVLqMoqJnEL1/aGcGi3lnoY39\nL1YbM1jsOwt1zOD06dOcPHkS4PDmzZvvX+jcVfschqp4l4Sk1eZlCLXlMsRi7pJwdUvSIjgsqC3D\nwmK5wiXpLDksKOqwAA4MlZv5GfcRRc8gev/QjgyWMyy0of/lakMGyx0Wmp6BA0PFBgYGSpdQXPQM\novcPzc9gue8sNL3/ldD0DFbinYWmZ+CmR0lagJch1ObLEG56lKQV4LCgNg8Li+Wql6Q5OCzIYWE6\nV74kzeCwIIeF2Vz9Fevr6ytdQnHRM4jePzQrgyqGhSb1X5UmZVDVsNCkDObiwFCx7du3ly6huOgZ\nRO8fmpNBVe8sNKX/KjUlgyrfWWhKBvPxLglJwssQinkZwrskJGkRHBYUcVhYLJ8NkkJzWJDDwtnx\nGVGx4eHh0iUUFz2D6P1DfTNYrWGhrv2vprpmsJrDQl0zOFsODBU7ePBg6RKKi55B9P6hnhms5jsL\ndex/tdUxg9V+Z6GOGSyGmx4r1u12a1nXaoqeQfT+oX4ZrPZliLr1X0LdMihxGaJuGYCbHmulbouj\nhOgZRO8f6pVBiT0Ldeq/lDplUGrPQp0yWAoHBklhuMFRbnBcOp8lkkJwWJDDwvL4TKnYvn37SpdQ\nXPQMovcP5TMoPSyU7r8OSmdQh2GhdAbL5cBQsY0bN5YuobjoGUTvH8pmUHpYANcAlM2gDsMCNH8d\neJeEpNaqw7CgsuoyLNSVd0lICs9hQQ4LK8tnjqTWcViQw8LK89lTsZGRkdIlFBc9g+j9w+pmUMdh\nwTWwuhnUdVho+jpwYKjY/v37S5dQXPQMovcPq5dBHYcFcA3A6mVQ12EBmr8O3PRYsbGxscbvjF2u\n6BlE7x9WJ4O6DgvgGoDVyaDOwwLUcx246bFG6rY4SoieQfT+ofoM6jwsgGsAqs+g7sMCNH8d1OPZ\nJElLVPdhQdVrwrDQBj6jJDWWw4IcFlaPz6qK9ff3ly6huOgZRO8fqsmgScOCa6CaDJo2LDR9HdTv\nmdUy3W63dAnFRc8gev+w8hk0aVgA1wCsfAZNGxag+evAuyQkNUrThgWtvCYOC3XlXRKSWslhQQ4L\n5fgsk9QIDgtyWCjLZ1rFxsfHS5dQXPQMovcPy8+g6cOCa2D5GbRhWGj6OmjGs63B9uzZU7qE4qJn\nEL1/WF4GTR8WwDUAy8ugDcMCNH8drGn6Z1uPjo5eCFy1fv161q5dW7qcWbZs2cKGDRtKl1FU9Ayi\n9w9Lz6ANwwK4BmDpGbRlWIB6roPTp09z8uRJgMObN2++f6FzvUtCUi21ZVjQ0rVpWKgr75KQ1GgO\nC3JYqB+ffZJqxWFBDgv15DOwYkeOHCldQnHRM4jeP5x9Bm0dFlwDZ59Bm4eFpq+DZj8LG+DYsWOl\nSyguegbR+4ezy6CtwwK4BuDsMmjzsADNXwduepRUXJuHBZ2dtg8LdeWmR0mN4bAgh4Vm8BkpqRiH\nBTksNIfPSklFOCzIYaFZfGZWrNPplC6huOgZRO8fZmcQbVhwDczOIOKw0PR14EdDV2zdunVs2rSp\ndBlFRc8gev8wPYNowwK4BmB6BhGHBajnOqjVR0OnlPqAXwc2AEeBPTnnf5jn3JcCn5hxOAMX5pwf\nmOsx3iUhNUfEYUHTRR0W6qo2d0mklH4Z+EPgt4EfZ2JguCWltH6Bh2XguUwMGBtYYFiQ1BwOC3JY\naLaqn6lXA9flnP8853wX8CtAF9jd43EP5pwfOPNVcY2SKuawIIeF5qvs2ZpSWgtcBtx25lieuP7x\nceCFCz0U+HxK6b6U0q0ppRdVVeNqGBwcLF1CcdEziN7/nfc9Qt8ffCD0sBB9DRz/5imuPHB9+GGh\n6eugymfsemANcGLG8RNMXGqYy/3AVcAVwC8Cx4FPppQurarIqg0MDJQuobjoGUTu/8w7Cyf+cQiI\nOSxA7DVw5p2Fr37m40DcYQGavw5q9azNOY/knN+Xc74z5zycc34zcDsTlzbmdejQIbZt20an05n2\ntXPnzlkT3dDQ0Jy3tuzdu3fWLwY5evQonU6H8fHxaccPHDhAf3//tGNjY2N0Oh1GRkamHX/BC17A\nvn37ph3rdrt0Oh2Gh4enHR8YGKCvr29Wbbt37y7ex+HDh5fcx/XXX9+KPs5YbB8vf/nLW9HHYn8e\nUy9DbPy5t3Hyv+/n9T/w3WnDQhP6mGqpP48zz4Gm9zHV2fRxZlgY/fwwT5x+bNaw0JQ+zljuz+P6\n668v2sfAwMCT/zZu3bqVTqfDrl27GBoamvW4uVR2l8TkJYkucEXO+aYpx28Enp5zfu1Zfp93AZfn\nnC+f6++9S0KqH/csyD0LzVCLuyRyzqeBO4AdZ46llNLkn29fxLe6lIlLFZIawGFBDgvtVPVP74+A\nG1NKdwCfZeLSwtOAGwFSSgeAZ+ecr5z88zuAUeCLwLnAW4GXA6+ouE5JK8BhQQ4L7VXpszjn/GEm\nPrTpd4A7gR8DXplzfnDylA3Ac6Y85HuY+NyGY8AngX8D7Mg5f7LKOqs01zWlaKJnEKX/hYaFKBnM\nJ0r/Cw0LUTJYSNMzqHzkyzm/F3jvPH+3a8af3w28u+qaVtP27dtLl1Bc9Awi9N/rnYUIGSwkQv+9\n3lmIkEEvTc+g8o+GrpqbHqWyvAwhL0M0Vy02PUpqP4cFOSzE4bNa0pI4LMhhIRaf2RWb+eEaEUXP\noI39L3ZYaGMGi9HG/hc7LLQxg8VqegYODBU7ePBg6RKKi55B2/pfyjsLbctgsdrW/1LeWWhbBkvR\n9Azc9Fixbrdby7pWU/QM2tT/Ui9DtCmDpWhT/0u9DNGmDJaqjhm46bFG6rY4SoieQVv6X86ehbZk\nsFRt6X85exbaksFyND0DBwZJPbnBUW5wlM92SQtyWJDDgsCBoXIzfzVpRNEzaHL/KzUsNDmDldDk\n/ldqWGhyBiul6Rk4MFRs48aNpUsoLnoGTe1/Jd9ZaGoGK6Wp/a/kOwtNzWAlNT0D75KQNIuXIeRl\niBi8S0LSkjksyGFBc/EVQNKTHBbksKD5+CpQsZGRkdIlFBc9g6b0X+Ww0JQMqtKU/qscFpqSQZWa\nnoEDQ8X2799fuoTiomfQhP6rfmehCRlUqQn9V/3OQhMyqFrTM3DTY8XGxsYavzN2uaJnUPf+V+My\nRN0zqFrd+1+NyxB1z2A11DEDNz3WSN0WRwnRM6hz/6u1Z6HOGayGOve/WnsW6pzBaml6Bg4MUlBu\ncJQbHLUYvjJIATksyGFBi+WrQ8X6+/tLl1Bc9Azq1n+JYaFuGay2uvVfYlioWwYlND0DB4aKdbvd\n0iUUFz2DOvVf6p2FOmVQQp36L/XOQp0yKKXpGXiXhBSElyHkZQjN5F0SkqZxWJDDgpbLVwup5RwW\n5LCgleArRsXGx8dLl1Bc9AxK9l+XYcE1UK7/ugwL0dcAND8DB4aK7dmzp3QJxUXPoFT/dRkWwDVQ\nqv+6DAvgGoDmZ7Cm6Z9tPTo6eiFw1fr161m7dm3pcmbZsmULGzZsKF1GUdEzKNF/nYYFcA2U6L9O\nwwK4BqCeGZw+fZqTJ08CHN68efP9C53rXRJSy9RtWNDqq9uwoPryLgkpKIcFOSyoKr6KSC3hsCCH\nBVXJV5KKHTlypHQJxUXPYDX6r/uw4Bqovv+6DwvR1wA0P4N6vJq02LFjx0qXUFz0DKruv+7DArgG\nqu6/7sMCuAag+Rm46VFqsCYMC6pWE4YF1ZebHqUAHBbksKDV5CuL1EAOC3JY0Grz1UVqGIcFOSyo\nBF9hKtbpdEqXUFz0DFay/6YOC66Bleu/qcNC9DUAzc/Aj4au2Lp169i0aVPpMoqKnsFK9d/UYQFc\nAyvVf1OHBXANQD0z8KOhpZZp8rCgldHkYUH15V0SUos4LMhhQXXgK45UYw4LclhQXfiqU7HBwcHS\nJRQXPYOl9t+mYcE1sLT+2zQsRF8D0PwMmvfK0zADAwOlSyguegZL6b9NwwK4BpbSf5uGBXANQPMz\ncNOjVDNtGxa0eG0bFlRfbnqUGsphQQ4LqitfhaSacFiQw4LqzFciqQYcFuSwoLrz1ahifX19pUso\nLnoGvfqPMCy4BhbuP8KwEH0NQPMzaM8rUk1t3769dAnFRc9gof4jDAvgGlio/wjDArgGoPkZeJeE\nVEiUYUHzizIsqL68S0KqOYcFOSyoaXx1klaZw4IcFtREvkJVbHh4uHQJxUXPYGr/UYcF18C/9B91\nWIi+BqD5GVT+KpVS6kspjaaUvp1SGk4p/WSP81+WUrojpXQqpTSSUrqy6hqrdPDgwdIlFBc9gzP9\nRx0WwDVwpv+owwK4BqD5GVS66TGl9MvAB4C3AZ8Frgb+HfDDOeeTc5x/EfBPwHuBPwN+Gvhj4FU5\n57+Z6/+j7pseu91uLetaTdEz6Ha7fOmbj4cdFsA10O12Gf/OOWGHBXANQD0zqNOmx6uB63LOf55z\nvgv4FaAL7J7n/F8FvpJz/o2c85dyzn8C/NXk92mkui2OEqJnEH1YANdA9GEBXAPQ/AwqW60ppbXA\nZcDvnjmWc84ppY8DL5znYS8APj7j2C3AeyopskInHvkOX/j6/ytdhgp79DuP8/7P3ht6WIgu8mUI\ntUuVK3Y9sAY4MeP4CWDrPI/ZMM/556eUnppzfmxlS6zOlx58lHd96quly1CNOCzE47CgNmnFK9eh\nQ4fYtm0bnU5n2tfOnTsZHBycdu7Q0BCdTmfW99i7dy9HjhyZduzo0aN0Oh3Gx8enHT9w4AD9/f3T\njo2NjdHpdBgZGZl2/EvX/TrHb75u2rHHv3OKu2+4lkdGvzDt+PidQ4x++F2zavvyX7yTh/7pb6cd\ne3jkc9x9w7Wzzv3qR/p58LMfm3bs0bER7r7hWk4/+vC04/feeiP3f+JD04499tAJ7r7hWr79wNem\nHT/xdx9Zch9nHtf0Ps5YbB8j77tm2rCwEuvq8OHD7Nu3b9qxbrdLp9OZtRN7YGBgzo+k3b1796o9\nP66++upW9LHYn8d/fMuVnBw5yvGbr3tyWPibwY82ro+V+Hk8//nPb0Ufy/l57Nu3r2gfAwMDT/7b\nuHXrVjqdDrt27WJoaGjW4+ZS2abHyUsSXeCKnPNNU47fCDw95/zaOR7zKeCOnPN/nnLsTcB7cs7r\n5vr/qeumx3sffow77v0Wf/NXR3jF695Qupyiomcw/L8+yDv3vp0156TSpRRz+PBh3va2t5Uuo4gv\nj3d5+zvfw4d+75rQ7yxEXgNn1DGDxWx6rPouiWHgMznnd0z+OQFfAw7mnN89x/m/B/xszvmSKcc+\nCHxfzvlVc/1/1HVgkCSp7up0l8QfAW9NKb0xpXQx8KfA04AbAVJKB1JKH5hy/p8Cm1NKv59S2ppS\n+jXgdZPfR5IkFVLp+2M55w+nlNYDvwNcAHweeGXO+cHJUzYAz5ly/j0ppZ9j4q6ItwNjwJtzzjPv\nnJAkSauo8k2POef35pwvyjl/b875hTnnz035u1055+0zzv90zvmyyfOfm3M+Mvu7NsfMTSwRRc8g\nev9gBtH7BzOA5mfQirsk6mz//v2lSyguegbR+wcziN4/mAE0P4NKNz2uhrpvehwbG2Pjxo2lyygq\negbR+wcziN4/mAHUM4M6bXoMr26Lo4ToGUTvH8wgev9gBtD8DBwYJElSTw4MkiSpJweGis38CNCI\nomcQvX8wg+j9gxlA8zNwYKhYt9stXUJx0TOI3j+YQfT+wQyg+Rl4l4QkSUF5l4QkSVpRDgySJKkn\nB4aKzfyd7hFFzyB6/2AG0fsHM4DmZ+DAULE9e/aULqG46BlE7x/MIHr/YAbQ/AzWNP2zrUdHRy8E\nrlq/fj1r164tXc4sW7ZsYcOGDaXLKCp6BtH7BzOI3j+YAdQzg9OnT3Py5EmAw5s3b75/oXO9S0KS\npKC8S0KSJK0oBwZJktSTA0PFjhw5UrqE4qJnEL1/MIPo/YMZQPMzcGCo2LFjx0qXUFz0DKL3D2YQ\nvX8wA2h+Bm56lCQpKDc9SpKkFeXAIEmSenJgkCRJPTkwVKzT6ZQuobjoGUTvH8wgev9gBtD8DPxo\n6IqtW7eOTZs2lS6jqOgZRO8fzCB6/2AGUM8M/GhoSZLUk3dJSJKkFeXAIEmSenJgqNjg4GDpEoqL\nnkH0/sEMovcPZgDNz8CBoWIDAwOlSyguegbR+wcziN4/mAE0PwM3PUqSFJSbHiVJ0opyYJAkST05\nMEiSpJ4cGCrW19dXuoTiomcQvX8wg+j9gxlA8zNwYKjY9u3bS5dQXPQMovcPZhC9fzADaH4G3iUh\nSVJQ3iUhSZJWlAODJEnqyYGhYsPDw6VLKC56BtH7BzOI3j+YATQ/AweGih08eLB0CcVFzyB6/2AG\n0fsHM4DmZ+Cmx4p1u91a1rWaomcQvX8wg+j9gxlAPTNw02ON1G1xlBA9g+j9gxlE7x/MAJqfgQOD\nJEnqyYFBkiT15MBQsX379pUuobjoGUTvH8wgev9gBtD8DBwYKrZx48bSJRQXPYPo/YMZRO8fzACa\nn4F3SUiSFJR3SUiSpBXlwCBJknpyYKjYyMhI6RKKi55B9P7BDKL3D2YAzc/AgaFi+/fvL11CcdEz\niN4/mEH0/sEMoPkZuOmxYmNjY43fGbtc0TOI3j+YQfT+wQygnhm46bFG6rY4SoieQfT+wQyi9w9m\nAM3PoLKBIaW0LqX0lymlh1NKD6WU3p9SOq/HY25IKT0x4+tjVdUoSZLOzlMq/N4fBC4AdgDfA9wI\nXAf8hx4sDErvAAAIa0lEQVSP+9/Am4A0+efHqilPkiSdrUreYUgpXQy8EnhzzvlzOefbgT3A61NK\nG3o8/LGc84M55wcmvx6uosbV0t/fX7qE4qJnEL1/MIPo/YMZQPMzqOqSxAuBh3LOd0459nEgAz/V\n47EvSymdSCndlVJ6b0rp+yuqcVV0u93SJRQXPYPo/YMZRO8fzACan0Eld0mklH4TeGPO+Xkzjp8A\n9uWcr5vncb8EdIFR4IeAA8AjwAvzPIXW/S4JSZLqajF3SSxqD0NK6QBwzQKnZOB5C/z9gnLOH57y\nxy+mlL4AfBl4GfCJpX5fSZK0PIu9JPEHwMULfD0P+ArwdeBZUx+YUloDfP/k352VnPMocBLYstB5\nhw4dYtu2bXQ6nWlfO3fuZHBwcNq5Q0NDdDqdWd9j7969HDlyZNqxo0eP0ul0GB8fn3b8wIEDs65F\njY2N0el0Zn2S1+HDh2f9StNut0un02F4eHja8YGBAfr6+mbVtnv3bvuwD/uwD/uwj2X1MTAw8OS/\njVu3bqXT6bBr1y6GhoZmPW4uVV2SuBj4IvATZ/YxpJR2Ah8DNuacz2poSCltBL4KvCbnfPNc59T9\nksT4+DjPeMYzSpdRVPQMovcPZhC9fzADqGcGxT+4Ked8F3AL8L6U0k+mlC4HDgEfmjosTG5sfM3k\n/z4vpfSulNJPpZR+MKW0A/ifwMjk92qkPXv2lC6huOgZRO8fzCB6/2AG0PwMqvykxw5wFxN3R9wM\nfBq4asY5zwWePvm/Hwd+DPgo8CXgfcA/AC/JOZ+usM5KXXPNQls+YoieQfT+wQyi9w9mAM3PwN8l\nIUlSUMUvSUiSpHZxYJAkST05MFRs5q02EUXPIHr/YAbR+wczgOZn4MBQsWPHjpUuobjoGUTvH8wg\nev9gBtD8DNz0KElSUG56lCRJK8qBQZIk9eTAIEmSenJgqNhcv6gkmugZRO8fzCB6/2AG0PwM1uzf\nv790DcsyOjp6IXDV+vXrWbt2belyZlm3bh2bNm0qXUZR0TOI3j+YQfT+wQygnhmcPn2akydPAhze\nvHnz/Qud610SkiQF5V0SkiRpRTkwSJKknhwYKjY4OFi6hOKiZxC9fzCD6P2DGUDzM3BgqFh/f3/p\nEoqLnkH0/sEMovcPZgDNz8CBoWLr168vXUJx0TOI3j+YQfT+wQyg+Rk4MEiSpJ4cGCRJUk8ODJIk\nqaenlC5gBZwLcOrUqdJ1zOnYsWN0u93SZRQVPYPo/YMZRO8fzADqmcGUfzvP7XVuGwaGiwDuueee\nslXM401vetOZT9EKK3oG0fsHM4jeP5gB1D6Di4DbFzqhDR8N/QzglcA9QD3fZpAkqZ7OZWJYuGXH\njh3jC53Y+IFBkiRVz02PkiSpJwcGSZLUkwODJEnqyYFBkiT15MAgSZJ6cmBYppRSX0ppNKX07ZTS\ncErpJ3uc/7KU0h0ppVMppZGU0pWrVWsVFtN/SumlKaUnZnw9nlJ61mrWvJJSSi9OKd2UUrp3sp9X\nn8VjWrMGFtt/29ZASuk3U0qfTSl9K6V0IqX0kZTSD5/F49q0BhadQQvXwa+klI6mlB6e/Lo9pfQz\nPR7TuDXgwLAMKaVfBv4Q+G3gx4GjwC0ppTl/JVlK6SLgZuA24BKgH3h/SukVq1HvSlts/5My8Fxg\nw+TXhTnnB6qutULnAZ8Hfo2J3hbUtjXAIvuf1KY18GLgEPBTwE8Da4FbU0rfO98DWrgGFp3BpDat\ng+PANcDzgcuAIeCjKaXnzXVyY9dAztmvJX4Bw0D/lD8nYAz4jXnO/33g2IxjHwI+VrqXVer/pcDj\nwPmla68ojyeAV/c4p1VrYAn9t30NrJ/M4d9GXAOLyKDV62Cyx3FgV5vWgO8wLFFKaS0Tk+RtZ47l\niZ/6x4EXzvOwF0z+/VS3LHB+bS2xf5gYKj6fUrovpXRrSulF1VZaO61ZA8vQ5jXwfUz8l/M3Fjin\n7WvgbDKAlq6DlNI5KaXXA08D/n6e0xq5BhwYlm49sAY4MeP4CSbeXpvLhnnOPz+l9NSVLa9yS+n/\nfuAq4ArgF5l4G++TKaVLqyqyhtq0BpaitWsgpZSAPwb+Nuf8fxY4tbVrYBEZtG4dpJR+NKX0CPAY\n8F7gtTnn+X5xRCPXQBt++ZQaIuc8AoxMOTScUvoh4Gqg9ht+tHwtXwPvBX4EuLx0IQWdVQYtXQd3\nMbEf4enA64A/Tym9ZIGhoXF8h2HpTjJxDe6CGccvAL4+z2O+Ps/538o5P7ay5VVuKf3P5bPAlpUq\nqgHatAZWSuPXQErpvwKvAl6Wc76/x+mtXAOLzGAujV4HOefv5py/knO+M+f8X5jYBP6OeU5v5Bpw\nYFiinPNp4A5gx5ljk2/H7WD+XxH691PPn7ST+a9z1dYS+5/LpUy8PRlFa9bACmr0Gpj8h/I1wMtz\nzl87i4e0bg0sIYO5NHodzOEcYL7LC81cA6V3XTb5C/gloAu8EbgYuI6JnbHPnPz7A8AHppx/EfAI\nEztktzJxK9p3gJ8u3csq9f8O4NXADwH/molrnaeZ+C+S4v0sMYPzmHgb8lImdob/p8k/PyfIGlhs\n/61aA0y8Bf8QE7cWXjDl69wp5/xuy9fAUjJo2zr43cn+fxD40cl1/11g++Tft+J1oHgBTf+a/EHf\nA3ybienwJ6b83Q3A0IzzX8LEf5l/G7gbeEPpHlarf2DvZM+PAg8ycYfFS0r3sMz+Xzr5D+XjM76u\nj7AGFtt/29bAPL0/DrxxyjltXwOLzqCF6+D9wFcmf55fB249Myy0aQ2kycIlSZLm5R4GSZLUkwOD\nJEnqyYFBkiT15MAgSZJ6cmCQJEk9OTBIkqSeHBgkSVJPDgySJKknBwZJktSTA4MkSerJgUGSJPX0\n/wE+GNMLKIV60AAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_coords([\n", " (0, 0),\n", " (1, 0),\n", " (2, 1),\n", " (3, 1),\n", " (2, 0)\n", "])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If this is the first time you're encountering this approach to drawing, take a minute to figure out which corner of the shape corresponds to each point. Note that the origin `(0, 0)` is in the lower-left corner and coordinates count up (along the Y-axis) and to the right (along the X-axis). The coordinates are given as `(x, y)` pairs.\n", "\n", "We can also draw lines that aren't connected by putting a pair of `nan` (\"not a number\") values in the list. For example:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nan = float('nan')\n", "plot_coords([\n", " (0, 0),\n", " (1, 1),\n", " (nan, nan),\n", " (1, 0),\n", " (2, 1)\n", "])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Turtle Graphics\n", "\n", "So far we've drawn a shape by providing a list of points. Another method is to simulate a \"turtle\" that walks around the screen, tracing its route as it goes. This way, instead of calculating coordinates, we just provide instructions to the turtle. We need to keep track of two things while we move the turtle: its location in the x-y plane, and which direction it faces. This means tracking three numbers: the x and y locations of the turtle, and its angle in degrees.\n", "\n", "Updating the location when angles are involved uses some trigonometry, so let's load `sin` and `cos`. We'll also calculate a multiplier for converting angles in degrees to radians." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from math import pi, sin, cos\n", "DEGREES_TO_RADIANS = pi / 180" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The \"instructions\" that we provide the turtle are just a string of characters. The only valid instructions are `'F'`, `'f'`, `'-'`, and `'+'`. Other characters are silently ignored.\n", "\n", "- `'F'` means move forward one unit and trace the path with a line.\n", "- `'f'` means move forward one unit but don't draw anything.\n", "- `'-'` means rotate counter-clockwise but don't move.\n", "- `'+'` means rotate clockwise but don't move.\n", "\n", "An example turtle program is `\"F++Ffff+F\"`\n", "\n", "To interpret these programs, we will loop over each character. As we go, we generate a series of coordinates representing the lines. The resulting coordinates can be passed to the `plot_coords` function defined earlier to draw them on-screen." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def turtle_to_coords(turtle_program, turn_amount=45):\n", " # The state variable tracks the current location and angle of the turtle.\n", " # The turtle starts at (0, 0) facing up (90 degrees).\n", " state = (0.0, 0.0, 90.0)\n", " \n", " # Throughout the turtle's journey, we \"yield\" its location. These coordinate\n", " # pairs become the path that plot_coords draws.\n", " yield (0.0, 0.0)\n", " \n", " # Loop over the program, one character at a time.\n", " for command in turtle_program:\n", " x, y, angle = state\n", " \n", " if command in 'Ff': # Move turtle forward\n", " state = (x - cos(angle * DEGREES_TO_RADIANS),\n", " y + sin(angle * DEGREES_TO_RADIANS),\n", " angle)\n", " \n", " if command == 'f':\n", " # Insert a break in the path so that\n", " # this line segment isn't drawn.\n", " yield (float('nan'), float('nan'))\n", " \n", " yield (state[0], state[1])\n", " \n", " elif command == '+': # Turn turtle clockwise without moving\n", " state = (x, y, angle + turn_amount)\n", " \n", " elif command == '-': # Turn turtle counter-clockwise without moving\n", " state = (x, y, angle - turn_amount)\n", " \n", " # Note: We silently ignore unknown commands" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are some examples of turtle graphics:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAFdCAYAAAB1gNVOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3X9wXPV57/HPAxiMaEkcfLEBk1Dzw24nHZuYuhBKSKyg\ntPSWmjqTpgcmIMchgOoyZOo4vkNUl7k3LnYCkY0pUahD8MS59XRvKTdqA8GCMDRWaAyWgcYRDXZB\nxBgsU6As5Br43j8kqFZa2V5pn/OVvuf9mtG0Ojqr85yPn3z3YXX2rIUQBAAAiuWI2AUAAID8MQAA\nAFBADAAAABQQAwAAAAXEAAAAQAExAAAAUEAMAAAAFNBRsQuoZsuWLSdI+oSk3ZLeiFsNAAATymRJ\np0m6t7GxsW+kncblAKD+J//vjPWXdHZ2asGCBXUoB4ORqw9y9UGuPsjVR51zvUzSppF+OF4HgN2S\ndNppp2ny5Mmj/iU33XSTrr322nrVhAHk6oNcfZCrD3L1UY9c33jjDe3evVsaeC4dyXgdAN6QpMmT\nJ6uhoWHUv+TII48c0+NRHbn6IFcf5OqDXH3UOdeD/gk96YsA9+7dG7uEJJGrD3L1Qa4+yNVHnrkm\nPQDs2bMndglJIlcf5OqDXH2Qq488c016AJg7d27sEpJErj7I1Qe5+iBXH3nmmvQAsGjRotglJIlc\nfZCrD3L1Qa4+8szVQgi5Hexwbdmy5UOSts2ePZuLTAAAqEG5XNbOnTslaV5jY+OjI+2X9CsAAACg\nuqQHgJaWltglJIlcfZCrD3L1Qa4+8sw16QGAu1T5IFcf5OqDXH2Qq488c+UaAAAAEsI1AAAAYEQM\nAAAAFFDSA0BXV1fsEpJErj7I1Qe5+iBXH3nmmvQAsHbt2tglJIlcfZCrD3L1Qa4+8sw16YsAy+Uy\nFxE6IFcf5OqDXH2Qq4965MpFgBLN6YRcfZCrD3L1Qa4+8sw16QEAAABUxwAAAEABJT0AtLa2xi4h\nSeTqg1x9kKsPcvWRZ641DQBmdrWZdZvZywNfPzKz3z3EYz5qZtvM7A0z6zGzK8ZW8uGbMWNGXocq\nFHL1Qa4+yNUHufrIM9ea3gVgZr8v6S1JT0kySVdKWiZpbgjhp1X2P03SE5Juk/Q3kj4u6euSLg4h\n/GCk43ArYAAARudw3wVwVC2/NITQMWTTDWZ2jaRzJQ0bACRdI+npEMIXB77/mZn9jqTrJY04AAAA\nAF+jvgbAzI4ws09LapC0dYTdzpV0/5Bt90o6b7THBQAAY1fTKwCSZGYfVP8T/mRJr0q6NISwc4Td\np0vaO2TbXknHm9kxIYRf1nr8WvT09Oiss87yPEThPPT0S7q1o0tHnXBq7FKS85/P/7tOnXm61i+c\nHbuUZLTcvVPPPv1z/cr0D8QuJTlv9j2rP/3v5+ojvzYldilJyfN5azSvAOyUNEfSfEl/LekuM6v7\nirVu3TrNnz9fWZZVfDU1Namjo/IvEZ2dncqybNjv+NSnPqWNGzdWbOvu7laWZerr66vYvmrVKrW1\ntVVs6+3tVZZl6unpqdje3t4+7ErNcrmsLMuG3ce5VCqppaVlWG2LFy8+7PNYtmzZuDmPb2/bo3/5\n37dqX/mA9pUP6MftrXrqkQfe/X5f+YB+vn2rtq5fXrFtX/mAtn3nq/rpg/9Qse3fe57U1vXLtefF\nfRXbu+/+ph7vuKti23PP9Wrr+uV6dvfPK7Y/+YPNemzzrRXb9v7Hq9q6frl2Pfloxfaf/fO9+pc7\n/9ew2sbDefzkm1/W1u+srenfY6iJ2lde57H3hX16vHRbofvK6zx+dMf/1NXNn6np3yOVvvI8j5Ur\nV9Z0HqVS6d3nxlmzZinLMjU3N6uzs3PY44Ya862AzewHkv4thHBNlZ/9UNK2EMIXBm27UtItIYQR\nx8Z6XQTY29vLlap1lm16Qs8916tj3zdN7zt2UuxykvL6/r06ecYpvAJQRy1379Qvep/Tse+bFruU\npOx//YBe379Xp5wyQ5uyD8YuJyn1eN5yuQhwBEdIOmaEn22V9HtDtjVp5GsG6oonfx/HTOl/8ud/\n+PVGnvXWP0wxUNVbtukJ7ZvCUOUhz+etmgYAM/uKpH+S9IykX5V0maQL1f+kLjNbJenkEMI77/W/\nXVKLmd0kaYOkRkmflHRxXaoHAACjUusrACdK+rakkyS9LGmHpKYQwjt/bJgu6d2rw0IIuwfuHXCL\npD+T1CvpsyGEoe8MAAAAOarpIsAQwpIQwswQwrEhhOkhhMFP/gohNIcQFgx5zEMhhHkDjzkzhLBx\n+G/2MfSiDNTHnge+G7uEJNGvPsjVB+uAjzz7NenPAiiXy7FLSNLbB1zfvVlY9KsPcvXBOuAjz35N\negBYsWJF7BKSdErTlbFLSBL96oNcfbAO+MizX5MeAAAAQHUMAAAAFFDSA8DQuzWhPg689nLsEpJE\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_coords(turtle_to_coords('FfF++FfF++FfF++FfF'))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_coords(turtle_to_coords('F-F+F+F+f+F+F+F-F'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Instead of plotting the coordinates generated, we can also list them. This is especially useful when the results don't look like what you expect. Here's a simple function to print out a list of coordinates, indicating gaps in the path." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(0.00, 0.00)\n", "(-0.00, 1.00)\n", "(-0.71, 1.71)\n", "(-0.71, 2.71)\n", "(-0.00, 3.41)\n", "\n", "(1.00, 3.41)\n", "(1.71, 2.71)\n", "(1.71, 1.71)\n", "(1.00, 1.00)\n", "(1.00, -0.00)\n" ] } ], "source": [ "from math import isnan\n", "def print_coords(coords):\n", " for (x, y) in coords:\n", " if isnan(x):\n", " print('')\n", " else:\n", " print('({:.2f}, {:.2f})'.format(x, y))\n", "\n", "print_coords(turtle_to_coords('F-F+F+F+f+F+F+F-F'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that each \"turn\" instruction changed the angle by 45 degres. I made this the default, but `turtle_to_coords` can optionally take a second argument called `turn_amount`. This gives us a way to specify the amount to turn the turtle by on a rotation command (`'-'` or `'+'`). Observe how different values can result in very different looking plots, even for the same turtle program. Compare the following to the above plot of the same program with a different angle." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_coords(turtle_to_coords('F-F+F+F+f+F+F+F-F', 65))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## String Rewriting\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One of the cool things about turtle graphics is that it gives us a way to represent a path as a string. This means that we can operate on it using tools for manipulating strings, and then plot the results.\n", "\n", "One simple string transformation is to take an initial string (which we call the axiom) and one or more transformation rules. Each transformation rule specifies a character and a string. Each time the rule's character appears in the axiom, it is replaced with the rule's string. Characters in the axiom which do not have a rule are left alone.\n", "\n", "In Python, we can represent the transformation rules as a dictionary. Each transformation rule is represented as an entry with the character as key and replacement string as value.\n", "\n", "For example, the rules\n", "- `a → aba`\n", "- `c → bb`\n", "\n", "Are represented in Python as `{'a': 'aba', 'c': 'bb'}`. With this representation, the transformation function becomes very simple:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'ababbabab'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def transform_sequence(sequence, transformations):\n", " return ''.join(transformations.get(c, c) for c in sequence)\n", "\n", "transform_sequence('acab', {'a': 'aba', 'c': 'bb'})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's one of the plots from the last section, this time written with string replacement." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAFdCAYAAAB1gNVOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3X9wXPV57/HPAxiMaEkcfLEBk1Dzw24nHZuYuhBKSKyg\ntPSWmjqTpgcmIMchgOoyZOo4vkNUl7k3LnYCkY0pUahD8MS59XRvKTdqA8GCMDRWaAyWgcYRDXZB\nxBgsU6As5Br43j8kqFZa2V5pn/OVvuf9mtG0Ojqr85yPn3z3YXX2rIUQBAAAiuWI2AUAAID8MQAA\nAFBADAAAABQQAwAAAAXEAAAAQAExAAAAUEAMAAAAFNBRsQuoZsuWLSdI+oSk3ZLeiFsNAAATymRJ\np0m6t7GxsW+kncblAKD+J//vjPWXdHZ2asGCBXUoB4ORqw9y9UGuPsjVR51zvUzSppF+OF4HgN2S\ndNppp2ny5Mmj/iU33XSTrr322nrVhAHk6oNcfZCrD3L1UY9c33jjDe3evVsaeC4dyXgdAN6QpMmT\nJ6uhoWHUv+TII48c0+NRHbn6IFcf5OqDXH3UOdeD/gk96YsA9+7dG7uEJJGrD3L1Qa4+yNVHnrkm\nPQDs2bMndglJIlcf5OqDXH2Qq488c016AJg7d27sEpJErj7I1Qe5+iBXH3nmmvQAsGjRotglJIlc\nfZCrD3L1Qa4+8szVQgi5Hexwbdmy5UOSts2ePZuLTAAAqEG5XNbOnTslaV5jY+OjI+2X9CsAAACg\nuqQHgJaWltglJIlcfZCrD3L1Qa4+8sw16QGAu1T5IFcf5OqDXH2Qq488c+UaAAAAEsI1AAAAYEQM\nAAAAFFDSA0BXV1fsEpJErj7I1Qe5+iBXH3nmmvQAsHbt2tglJIlcfZCrD3L1Qa4+8sw16YsAy+Uy\nFxE6IFcf5OqDXH2Qq4965MpFgBLN6YRcfZCrD3L1Qa4+8sw16QEAAABUxwAAAEABJT0AtLa2xi4h\nSeTqg1x9kKsPcvWRZ641DQBmdrWZdZvZywNfPzKz3z3EYz5qZtvM7A0z6zGzK8ZW8uGbMWNGXocq\nFHL1Qa4+yNUHufrIM9ea3gVgZr8v6S1JT0kySVdKWiZpbgjhp1X2P03SE5Juk/Q3kj4u6euSLg4h\n/GCk43ArYAAARudw3wVwVC2/NITQMWTTDWZ2jaRzJQ0bACRdI+npEMIXB77/mZn9jqTrJY04AAAA\nAF+jvgbAzI4ws09LapC0dYTdzpV0/5Bt90o6b7THBQAAY1fTKwCSZGYfVP8T/mRJr0q6NISwc4Td\np0vaO2TbXknHm9kxIYRf1nr8WvT09Oiss87yPEThPPT0S7q1o0tHnXBq7FKS85/P/7tOnXm61i+c\nHbuUZLTcvVPPPv1z/cr0D8QuJTlv9j2rP/3v5+ojvzYldilJyfN5azSvAOyUNEfSfEl/LekuM6v7\nirVu3TrNnz9fWZZVfDU1Namjo/IvEZ2dncqybNjv+NSnPqWNGzdWbOvu7laWZerr66vYvmrVKrW1\ntVVs6+3tVZZl6unpqdje3t4+7ErNcrmsLMuG3ce5VCqppaVlWG2LFy8+7PNYtmzZuDmPb2/bo3/5\n37dqX/mA9pUP6MftrXrqkQfe/X5f+YB+vn2rtq5fXrFtX/mAtn3nq/rpg/9Qse3fe57U1vXLtefF\nfRXbu+/+ph7vuKti23PP9Wrr+uV6dvfPK7Y/+YPNemzzrRXb9v7Hq9q6frl2Pfloxfaf/fO9+pc7\n/9ew2sbDefzkm1/W1u+srenfY6iJ2lde57H3hX16vHRbofvK6zx+dMf/1NXNn6np3yOVvvI8j5Ur\nV9Z0HqVS6d3nxlmzZinLMjU3N6uzs3PY44Ya862AzewHkv4thHBNlZ/9UNK2EMIXBm27UtItIYQR\nx8Z6XQTY29vLlap1lm16Qs8916tj3zdN7zt2UuxykvL6/r06ecYpvAJQRy1379Qvep/Tse+bFruU\npOx//YBe379Xp5wyQ5uyD8YuJyn1eN5yuQhwBEdIOmaEn22V9HtDtjVp5GsG6oonfx/HTOl/8ud/\n+PVGnvXWP0wxUNVbtukJ7ZvCUOUhz+etmgYAM/uKpH+S9IykX5V0maQL1f+kLjNbJenkEMI77/W/\nXVKLmd0kaYOkRkmflHRxXaoHAACjUusrACdK+rakkyS9LGmHpKYQwjt/bJgu6d2rw0IIuwfuHXCL\npD+T1CvpsyGEoe8MAAAAOarpIsAQwpIQwswQwrEhhOkhhMFP/gohNIcQFgx5zEMhhHkDjzkzhLBx\n+G/2MfSiDNTHnge+G7uEJNGvPsjVB+uAjzz7NenPAiiXy7FLSNLbB1zfvVlY9KsPcvXBOuAjz35N\negBYsWJF7BKSdErTlbFLSBL96oNcfbAO+MizX5MeAAAAQHUMAAAAFFDSA8DQuzWhPg689nLsEpJE\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_coords(turtle_to_coords(transform_sequence('FFFF', {'F': 'FfF++'})))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Transformations become more interesting when we apply them multiple times. We can take the output of the transformation, then feed it back into the transformation and run it again!" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0: abba\n", "1: ababbaba\n", "2: ababababbabababa\n" ] } ], "source": [ "def transform_multiple(sequence, transformations, iterations):\n", " for _ in range(iterations):\n", " sequence = transform_sequence(sequence, transformations)\n", " return sequence\n", "\n", "print('0:', transform_multiple('abba', {'b': 'bab'}, 0))\n", "print('1:', transform_multiple('abba', {'b': 'bab'}, 1))\n", "print('2:', transform_multiple('abba', {'b': 'bab'}, 2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using this method we can create complex images starting with very simple inputs:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_coords(turtle_to_coords(transform_multiple('F', {'F': '+F+F--F+F'}, 5)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also use this to draw a [Hilbert curve](http://mathworld.wolfram.com/HilbertCurve.html):" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_coords(turtle_to_coords(transform_multiple('L', {\n", " 'L': '-RF+LFL+FR-',\n", " 'R': '+LF-RFR-FL+'\n", "}, 5), 90))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Branching Turtle Graphics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There's one more piece to do before we can draw tree-like structures. So far we've drawn continuous paths. It turns out that it's hard to represent the sort of branching that a tree does with a continuous path.\n", "\n", "In order to represent tree-like branching, I'll add two new turtle commands: `'['` and `']'`. One way to think of these commands is that they give our simulated turtle a sense of memory. The `'['` command tells the turtle to stay still but remember its current location (including the angle). The `']'` command tells it to go to the last remembered location. Once the turtle goes back to a remembered location it promptly forgets about it, so then the next time `']'` is called it goes to the last remembered location *before that*. A consequence of this \"forgetting\" is that the each `']'` must match up with a prior `'['`, otherwise you are essentially asking the turtle to return to more positions than you told it to remember!" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def branching_turtle_to_coords(turtle_program, turn_amount=45):\n", " saved_states = list()\n", " state = (0, 0, 90)\n", " yield (0, 0)\n", "\n", " for command in turtle_program:\n", " x, y, angle = state\n", "\n", " if command.lower() in 'abcdefghij': # Move forward (matches a-j and A-J)\n", " state = (x - cos(angle * DEGREES_TO_RADIANS),\n", " y + sin(angle * DEGREES_TO_RADIANS),\n", " angle)\n", " \n", " if command.islower(): # Add a break in the line if command matches a-j\n", " yield (float('nan'), float('nan'))\n", "\n", " yield (state[0], state[1])\n", "\n", " elif command == '+': # Turn clockwise\n", " state = (x, y, angle + turn_amount)\n", "\n", " elif command == '-': # Turn counterclockwise\n", " state = (x, y, angle - turn_amount)\n", "\n", " elif command == '[': # Remember current state\n", " saved_states.append(state)\n", "\n", " elif command == ']': # Return to previous state\n", " state = saved_states.pop()\n", " yield (float('nan'), float('nan'))\n", " x, y, _ = state\n", " yield (x, y)\n", "\n", " # Note: We silently ignore unknown commands" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Aside from the `'['` and `']'` commands, and the new `saved_states` variable, this looks a lot like `turtle_to_coords`. One other difference I should mention is that now any uppercase letter from `A` to `J` will move foward and draw a line, and any lowercase letter `a` to `j` will move forward without drawing. This opens up more possibilities when it comes to string rewriting.\n", "\n", "To understand what's going on, consider the following (branching) turtle program:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_coords(branching_turtle_to_coords('F[-F]+F', 45))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recall that the turtle starts at `(0, 0)` facing up. The first `F` moves the turtle to `(0, 1)`, still pointing up. Then the `'['` command tells the turtle to **remember its current position**. The turtle then does a counter-clockwise rotation, goes forward, and *resumes the remembered location*. Then it rotates clockwise (remember, when it returned to its remembered position at `(0, 1)` it returned to the angle it remembered as well), and goes forward again.\n", "\n", "Now that we have everything we need for an L-system, let's wrap it up in a function called `l_plot` that runs through all the steps in generating a graphic. To review, that's:\n", "1. Iteratively apply the string rewriting transformations a given number of times.\n", "2. Convert the turtle program to a list of coordinates.\n", "3. Draw the result." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def l_plot(axiom, transformations, iterations=0, angle=45):\n", " turtle_program = transform_multiple(axiom, transformations, iterations)\n", " coords = branching_turtle_to_coords(turtle_program, angle)\n", " plot_coords(coords, bare_plot=True) # bare_plot removes the axis labels" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's a plot based on the branching above, iterated several times:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "l_plot('F', {'F': 'F[-F][+F]'}, 4, 30)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's almost starting to look like a tree! The symmetry is a bit sterile though, let's do something a bit asymmetric." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nxyE5YWVfAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "l_plot('F', {'F': 'FF[++F][-FF]'}, 5, 22)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It looks more like a bush to me, but we're on the right track. A technique to make things look more tree-like is to make the lines closer to the root \"longer\". One way to do this is to use a rule like `F → FF`\n", "\n", "This has the effect of making lines that appear *earlier* get *longer*. To see what I mean, look at the behavior of the following rule over several iterations:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0: A\n", "1: F+A\n", "2: F+F+A\n", "3: F+F+F+A\n", "4: F+F+F+F+A\n" ] } ], "source": [ "for i in range(5):\n", " print('{}: '.format(i),\n", " transform_multiple('A', {'A': 'F+A'}, i))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, look at the same rule when I add the rule `F → FF`:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0: A\n", "1: F+A\n", "2: FF+F+A\n", "3: FFFF+FF+F+A\n", "4: FFFFFFFF+FFFF+FF+F+A\n" ] } ], "source": [ "for i in range(5):\n", " print('{}: '.format(i),\n", " transform_multiple('A', {'A': 'F+A', 'F': 'FF'}, i))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is somewhat akin to cell division in nature: the A \"cell\" divides into two cells, F and A, while the F cell divides into two F cells. Applying this to a tree, we start to get something that looks realistic:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nRWRRKKtfZMn6I1B21HsjsExaLz8VvLtjsT2ViExaCvwiS1Dw7sAl/Qwi0i4a6hcREWkRBX4REZEW\nUeAXERFpEQV+ERGRFlHgFxERaREFfhERkRZR4BcREWkRBX4REZEWUeAXERFpEQV+ERGRFlHgFxER\naREFfhERkRZR4BcREWkRBX4REZEWUeAXERFpEQV+ERGRFlHgFxERaZEpCxcuXNLPICIiIouJ3vhF\nRERaRIFfRESkRRT4RUREWkSBX0REpEUU+EVERFpEgV9ERKRFFPhFRERaRIFfRESkRRT4RUREWkSB\nX0REpEUU+EVERFpEgV9ERKRFFPhFRERaRIFfRESkRRT4RUREWkSBX0REpEUU+EVERFpEgV9ERKRF\nFPhFRERaRIFfRESkRRT4RUREWkSBX0REpEUU+EVERFpEgV9ERKRFFPhFRERaRIFfRESkRRT4RURE\nWkSBX0REpEUU+EVERFpEgV9ERKRFFPhFRERaRIFfRESkRRT4RUREWkSBX0REpEUU+EVERFpEgV9E\nRKRFFPhFRERaRIFfRESkRRT4RUREWkSBX0REpEUU+EVERFpEgV9ERKRFFPhFRERaRIFfRESkRRT4\nRUREWkSBX0REpEUU+EVERFpEgV9ERKRFFPhFRERaRIFfRESkRRT4RUREWkSBX0REpEUU+EVERFrk\n/wNo2gU/PuKe2QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "l_plot('A', {'F': 'FF', 'A': 'F[+AF-[A]--A][---A]'}, 5, 22.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## What Next\n", "\n", "I encourage you to use the code provided in this notebook to create L-systems of your own. If you're interested in learning more, I recommend the book *The Algorithmic Beauty of Plants*, as well as the other resources listed below.\n", "\n", "- [Algorithmic Beauty of Plants](http://algorithmicbotany.org/papers/#abop)\n", "- [MathWorld: Lindenmayer System](http://mathworld.wolfram.com/LindenmayerSystem.html)\n", "- [Wikipedia: L-system](https://en.wikipedia.org/wiki/L-system)" ] } ], "metadata": { "anaconda-cloud": {}, "date": "2017-07-09", "title": "Fractal Generation with L-Systems", "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.6.1" } }, "nbformat": 4, "nbformat_minor": 1 }