{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Part 3: Heptagon Rotations\n", "\n", "In [Part 1](https://nbviewer.org/github/vorth/ipython/blob/master/heptagons/HeptagonNumbers.ipynb) and [Part 2](https://nbviewer.org/github/vorth/ipython/blob/master/heptagons/DrawingTheHeptagon.ipynb) we saw how we can represent and render these two figures, using a special kind of number that is custom made for creating figures with the symmetries and proportions of a heptagon. Now, we will explore how we can encode the symmetry in a rotation function, and we'll use that function to generate the vertices for the right-hand figure, the \"nautilus shell\".\n", "\n", "\n", "\n", "### Deriving the Rotation Function\n", "\n", "One of the defining characteristics of the regular heptagon is its order-7 rotational symmetry. A side-effect of our use of a natural coordinate frame for the heptagon vertices is that our vertices no longer lie on a circle, in that coordinate frame. However, it turns out that we can still encode a \"rotation\" function that maps each vertex to the next. We don't need any Trigonometry to do this; just a simple trick from Linear Algebra.\n", "\n", "The way to derive such a mapping function involves setting up a pair of equations that relate \"input\" vectors to \"output\" vectors, and solving those equations. It sounds difficult, but with a clever choice of input vectors, it is very simple.\n", "\n", "Looking at our heptagon, we can define our mapping in terms of any of the three kinds of diagonals. Let's try it using the longest diagonals, the blue ones. The trick to setting up easy equations is to work with vectors that have either a zero X-component or a zero Y-component. For that reason, we'll start with the P2-P6 diagonal as our first input, and derive the mapping that takes it to the P3-P0 diagonal.\n", "\n", "\n", "\n", "As we saw in [Part 2](http://nbviewer.jupyter.org/github/vorth/ipython/blob/master/heptagons/DrawingTheHeptagon.ipynb), a 2-dimensional linear transformation can be written down as a pair of equations:\n", "\n", "$$ x' = r x + t y $$\n", "\n", "$$ y' = s x + u y $$\n", "\n", "We wish to derive the values for $r$, $s$, $t$, and $u$. We can do this by plugging in our chosen input vector as $(x,y)$, and our output vector as $(x',y')$:\n", "\n", "$$ \\sigma = r \\sigma^2 + 0 $$\n", "\n", "$$ \\rho\\sigma = s \\sigma^2 + 0 $$\n", "\n", "Since our input vector had zero as a $y$ coordinate, these two equations are trivial to solve, giving us the values for $r$ and $s$. We can simplify by appling the identities from [Part 1](http://nbviewer.ipython.org/github/vorth/ipython/blob/master/heptagons/HeptagonNumbers.ipynb):\n", "\n", "$$ r = \\frac{1}{\\sigma} = \\sigma-\\rho $$\n", "\n", "$$ s = \\frac{\\rho}{\\sigma} = \\rho-1 $$\n", "\n", "To find $u$ and $t$, we can start with the P4-P0 diagonal as our input vector, which will have a zero $x$ coordinate, and map it to P5-P1 as the output:\n", "\n", "$$ -\\rho\\sigma = 0 + t \\sigma^2 $$\n", "\n", "$$ \\rho\\sigma = 0 + u \\sigma $$\n", "\n", "$$ t = -\\frac{\\rho}{\\sigma} = 1-\\rho $$\n", "\n", "$$ u = \\frac{\\rho}{\\sigma} = \\rho-1 $$\n", "\n", "If you prefer to think in terms of matrices, here is the transformation matrix we have derived:\n", "\n", "$$\n", "\\begin{bmatrix}\n", " \\sigma-\\rho & 1-\\rho\n", "\\\\ \\rho-1 & \\rho-1\n", "\\end{bmatrix} =\n", "\\begin{bmatrix}\n", " \\frac{1}{\\sigma} & \\frac{-\\sigma}{\\rho}\n", "\\\\ \\frac{\\sigma}{\\rho} & \\frac{\\sigma}{\\rho} \n", "\\end{bmatrix}\n", "$$\n", "\n", "Now we can write our rotate function, which takes a vector as a 2-tuple, and produces another 2-tuple. While we're at it, we'll write simple functions for adding vectors and scaling them.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# load the definitions from the previous notebooks\n", "%run DrawingTheHeptagon.py\n", "\n", "r = sigma-rho\n", "s = rho-1\n", "t = one-rho # the __sub__ function requires a HeptagonNumber on the left, so \"1-rho\" won't work\n", "u = rho-1\n", "\n", "def rotate(v) :\n", " x, y = v\n", " return ( r*x + t*y, s*x + u*y )\n", "\n", "def plusv( v1, v2 ) :\n", " h1, h2 = v1\n", " h3, h4 = v2\n", " return ( h1+h3, h2+h4 )\n", "\n", "def scale( s, v ) :\n", " x, y = v\n", " return ( x*s, y*s )\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Applying the Rotation\n", "\n", "Let's try out our function, using it to derive the heptagon edges from the P1-P0 edge, and drawing the result, using the original \"render\" function that does not correct for the skewed coordinate frame:\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "data": { "text/plain": [ "(-0.5, 5.5)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nKq0AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p0p1 = ( sigma, zero )\n", "p0 = ( rho, zero )\n", "\n", "def heptagonVerts(v,e):\n", " result = []\n", " vi = v\n", " ei = e\n", " for i in range(7):\n", " result .append( vi )\n", " vi = plusv( vi, ei )\n", " ei = rotate( ei )\n", " return result\n", "\n", "rotationHeptagon = heptagonVerts( p0, p0p1 )\n", "\n", "%pylab inline\n", "\n", "fig = matplotlib.pyplot.figure(figsize=(6,6))\n", "ax = fig.add_subplot(111)\n", "ax.add_patch( drawPolygon( rotationHeptagon,'#dd0000', render ) )\n", "ax.set_xlim(-0.5,5.5)\n", "ax.set_ylim(-0.5,5.5)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Clearly our rotation function generates the same heptagon vertices as those we derived manually in [Part 2](http://nbviewer.jupyter.org/github/vorth/ipython/blob/master/heptagons/DrawingTheHeptagon.ipynb)!\n", "\n", "Perhaps we should not be surprised, but think about what we've produced here: a \"rotation\" function that is not circular! We have modeled a mapping that moves a point roughly a seventh of the way around an elliptical path. Even if you've been through a linear algebra course, or a mechanics course, or any other engineering-oriented introduction to matrices, it is a safe bet that the course focused almost entirely on *orthogonal* transformations, as are used to model rigid body motions, and so you may be as pleased and surprised that this works as I was. My mathematics professors won't be pleased that I was surprised, of course, since we really haven't done anything remarkable here at all; we've simply used basic linear algebra in a way seldom illustrated.\n", "\n", "Another point that bears mentioning here is the benefit we get from using integer-based heptagon number. We can iterate our rotation function as many times as we like, and we'll never see any drift or error in the results, as we eventually would if we used floating point numbers. The function is an exact implementation of cyclic operation of order seven, and we can see this if we just print out the values for few iterations:\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1, ρ\n", "-1, σ\n", "-1σ, 1\n", "-1ρ, -1\n", "0, -1σ\n", "ρ, -1ρ\n", "σ, 0\n", "1, ρ\n", "-1, σ\n", "-1σ, 1\n", "-1ρ, -1\n", "0, -1σ\n", "ρ, -1ρ\n", "σ, 0\n", "1, ρ\n", "-1, σ\n", "-1σ, 1\n", "-1ρ, -1\n", "0, -1σ\n", "ρ, -1ρ\n", "σ, 0\n", "1, ρ\n" ] } ], "source": [ "v = p0p1\n", "for i in range( 22 ):\n", " v = rotate( v )\n", " x,y = v\n", " print( str(x) + \", \" + str(y) )\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Combining Scaling and Rotation\n", "\n", "Scaling with heptagon number works the same way, of course, benefiting from exact integer arithmetic. Now that we have all the necessary ideas in hand, we can combine scaling and rotation to produce the \"nautilus shell\" figure shown above.\n", "\n", "We'll start with triangle $\\triangle P2P4P6$ from the heptagon, then scale by a factor of $\\frac{\\rho}{\\sigma} = \\rho-1$, and apply our rotation." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(-3.0, 6.0, -2.0, 4.0)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhcAAAFwCAYAAAALwFk3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xe4XFW5x/EvJTQpoUlRmqD0ixDpiojLBiolsCD0Ir33\nesULUg1dulSDwAJCvIgFlgiX3ptU6UVClx76/eNdwzlJTpk5s2fW3jO/z/PwzGQyZ88v4WTOO2u/\ne70gIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi\nIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi\nIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi\nIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi\nIiIiIiIiIiIiIiIiIiIixZoidwDpQC5MAbwFzJRuRTrBLOl2GNF/kjWJSMlNnTuAdKTtscICYMGM\nOUSKcgiwN/AccCywV944IuWmlQsplgurAldiBcZY9ClPqs6FlYFbgNHAUcAdwKFEf1HWXCIlNmXu\nANJBXJgXCMBWRH9lenS9jIlEmuPCcKyweJ3o9yX6N4B1gRNxYdm84UTKS8WFFMOFaYHLgdOJ/upe\nv7NvpkQizbHeoTfTr778xePRPwjsDIzFhTkyJBMpPRUXUpSTgPHAkb0euwf4Vp44Ik17IN3OTfSf\nTfQ70Qdsle4SXFDvmsgkVFxI81zYFlgN2GKSN+HfZEok0hwXDgCWAn5E9C/386yDgM+wPgwR6UXF\nhTTHmt2OANYl+ncm+d3L03OWbHcskSFzYQWsYDiJ6K/p93nRfwqMAkbiwkZtSidSCSouZOhcmAe4\nDNiG6B+b7Pd7rhLZu52xRIbMhZmB24F3iX6PQZ8f/etYg+cpuLBMi9OJVIaKCxkaF6bBCouzif6q\nAZ75MbBVe0KJNK226dssAz6rt+jvB3bDGjxna0UokapRcSFDdQLwBnD4IM9T34VUgwt3pXvzTtbA\nOZjoL8b2d7kYF6YqOppI1ai4kMa5sDXwfWCzOt6ET0lfM9MgzxPJx4W9gBHAWkT/0hCPcgC26/Gv\n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\nZ+rcASSj6B8FtsSFBbG+gMdw4ULgN0T/QtZsg5sWuCBrAhfmxTYx2xIIwApE/1TWTCIiJZD/U5+U\nh/2w3BtrQrwcOKaUQ9JsT4+Pgf8i+gczvP5C2DAxj4aJiYhMRsWFTK5nSNpOwF+w3oGH84bqxYUN\ngUvafkrETiMdiG2AdSZwooaJiYhMTsWF9M+GpO2MFRo3YVc93JM3FODCXcCIthUXLnwTa4BdHRsm\n9lsNExMR6Z+KCxmcXVq5HdZf8AC5h6TZ/hb3EP2IFr/Oytj+IMvRM0ysmpfuioi0kYoLqZ8NSdsS\nu8LkWWynydj2TaGsuBhF9Je04NhTYJfoHgwsjA0TO0/DxERE6qfiQhpn21mPwvoP3saKjD+1ZUia\nC0thI+aHEf0nBR53CmBNbLv02YAj0TAxEZEhUXEhQ2eDuNbFfiBPif1Abu2QNBfOA7YsrN/C/gzr\nYT0VU2KF0hUaJiYiMnQqLqR5PZ/6DwZmp2dIWvGf+u2UyMdEP02Tx+m9+vIWNvdDw8RERAqg4kKK\n0zMk7RBgEVoxJM2KiyOJ/uAhfn3vvpGnsZWK61RUiIgUR8WFtIYNSTsYGAEcTxFD0lyYGVtlmIfo\nxzf4tbUrXvYG7seueLmlqTwiItInFRfSWhPvEdHckDQX9gZGN9RvYXt11IaJ3YiteuTfq0NEpIOp\nuJD2mHhI2lnACQ0PSXNhPDBXXcWF7TK6B7AD8GfgKA0TExFpDw0uk/boGZK2EDYk7dE0JG10A0PS\n5gKuGvAZE89HuQwNExMRaTutXEgeE08UvRwbU95/EWDNop8BqxH9jX38/oLYMLENsWmpozVMTEQk\nDxUXkpcLc2KzS3bAhqQd1eeQNBd+CPwNmHKiKztcWBS7nPRn9AwTa+x0i4iIFErFhZSDC8PpGZJ2\nI5MOSXPhWsB90W/hwjLY1SirA6dgw8SG1igqIiKFUnEh5TLxkLTaJaM3p/0tngY2pucS1+OAMzVM\nTESkXFRcSDm5MB3Wj7E/NiTtu+l3nqVncy4NExMRKSEVF1JuPdt0X4CtaJyvYWIiIiIiIiIiIiIi\nIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi\nIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi\nIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiHez/AZOLxdfS\nOk2XAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "origin = ( zero, zero )\n", "\n", "def nautilus( n ):\n", " result = []\n", " def shrink(v):\n", " return scale( rho_over_sigma, v )\n", " p1 = ( sigma*sigma, zero )\n", " p2 = ( rho, rho*rho )\n", " for i in range(n):\n", " result .append( origin )\n", " result .append( p1 )\n", " result .append( p2 )\n", " p1 = p2\n", " p2 = rotate( shrink( p2 ) )\n", " return result\n", "\n", "fig = plt.figure(figsize=(9,6))\n", "ax = fig.add_subplot(111)\n", "ax.add_patch( drawPolygon( nautilus( 22 ), '#0044aa', skewRender ) )\n", "ax.set_xlim(-3,6)\n", "ax.set_ylim(-2,4)\n", "ax.axis('off')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "### Drawing the Nested Heptagrams\n", "\n", "For good measure, I'm including the code used to render the other figure shown at the top. Although this could be done recursively, with computed intersections for the nested vertices, I've just done manual computation." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(-2.0, 4.0, -0.5, 5.5)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAHaCAYAAACjEViSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXeYVEXWh98RERPmnBBKERMiKNHw4ZpXV0ABCYqRMqC4\nmMOas5gDFirqCkgSMOc1EhVBRQxQiFlEETFh5Pvj3IGeYUKHm7rnvM/jA850V50Zbt9z69Sp3w8U\nRVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEU\nRVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEU\nRVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEU\nRVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEU\nRVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURVEURQmNFzhwrYm0qp90HIqiKIpSEnjY\n4H3WvNYweWk3Hlwyh7K+HhokHZeiKIqiFCUeNvUwcA4sHMlZc8Av3ZK3ljzHIe95+NzDGR5WTzpO\nRakLrJR0AIqiFI6HrT3cBbwHrDyBq+/4iOY/A3xBw4Ufc+gGszjqEmBPYK6H8z2snWTMilLqaIJV\nlCLGw3Ye7gemAYuAZi/gnljC+ifeTfPBwKN/s9LKb7PBmV+yxxUv4PoD/wB2BLyHyz2sn+CPoCgl\niyZYRSlCPOziYSTwGjAX2MbABS/g1gCGAj2/oOF2wOvAxLto8TtwO/DICzhvoDfQBtgE+MjDQA+b\nJvPTKEppoglWUYoID208PAY8DUwFmhi4wsD3Drc6MBa41mJfAjoAE4P/OgDXAp8BdzpcmQFvoC/Q\nAqgPvOfhLg9bx/+TKUrpoQlWUVKOhzIP/+fhBWTV+gySWG808BOAw5UBg4GZwK3g1wSaIaXjCUB7\ni10KHIOsXG35+AY+M9A/eP0PwDQP93toGtsPqSgliCZYRUkpQWI9GCnzDgaGAdsauMvAkkov7w/s\nANggke4OzADzG5JkdwC/hsX+BHQGLne4DpkDGPjGwPnANsDHwAQPIzw0j/LnVJRSRROsoqQMDyt5\n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\naHEVERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER\nERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER\nERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER\nEREREREREREREREREREREREREREREREREREREREREREREREREREREaml/we7c1O19v030AAAAABJ\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "def ngonPath( edge, n, skip=1, start=origin ):\n", " result = []\n", " vi = plusv( start, edge )\n", " for i in range(n):\n", " result .append( vi )\n", " for j in range(skip):\n", " edge = rotate( edge )\n", " vi = plusv( vi, edge )\n", " return result\n", "\n", "one_edge = ( sigma, zero )\n", "heptagon_path = ngonPath( one_edge, 7 )\n", "\n", "rho_edge = plusv( one_edge, rotate( one_edge ) )\n", "heptagram_rho_path = ngonPath( rho_edge, 7, 2 )\n", "\n", "sigma_edge = ( zero, sigma+rho+1 )\n", "heptagram_sigma_path = ngonPath( sigma_edge, 7, 4 )\n", "\n", "inner_origin = ( sigma-rho, rho )\n", "small_edge = ( rho_inv, zero )\n", "small_rho_edge = plusv( small_edge, rotate( small_edge ) )\n", "small_sigma_edge = ( zero, HeptagonNumber(-1,0,1) )\n", "\n", "heptagon_path_shrunk = ngonPath( small_edge, 7, 1, inner_origin )\n", "\n", "heptagram_rho_path_shrunk = ngonPath( small_rho_edge, 7, 2, inner_origin )\n", "\n", "heptagram_sigma_path_shrunk = ngonPath( small_sigma_edge, 7, 4, inner_origin )\n", "\n", "fig = plt.figure(figsize=(8,8))\n", "ax = fig.add_subplot(111)\n", "ax.add_patch( drawPolygon( heptagon_path,'#dd0000', skewRender ) )\n", "ax.add_patch( drawPolygon( heptagram_rho_path,'#990099', skewRender ) )\n", "ax.add_patch( drawPolygon( heptagram_sigma_path,'#0000dd', skewRender ) )\n", "ax.add_patch( drawPolygon( heptagon_path_shrunk,'#dd0000', skewRender ) )\n", "ax.add_patch( drawPolygon( heptagram_rho_path_shrunk,'#990099', skewRender ) )\n", "ax.add_patch( drawPolygon( heptagram_sigma_path_shrunk,'#0000dd', skewRender ) )\n", "ax.set_xlim(-2,4)\n", "ax.set_ylim(-0.5,5.5)\n", "ax.axis('off')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Conclusion\n", "\n", "This three part article has demonstrated how heptagon numbers can be used to represent very rich geometry, while relying on exact integer arithmetic. Heptagon numbers are far from unique in this regard! Any regular N-gon generates a corresponding field of numbers, just as we explored in Part 1. The same ideas apply in three or more dimensions, also, where we find beauties like the \"golden field\", which can represent icosahedral symmetry and quasicrystals.\n", "\n", "The story does not end there, either! There is an infinite number of \"algebraic extensions\" of the integers or rationals, with graphical applications we can barely imagine." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }