{ "cells": [ { "cell_type": "markdown", "id": "4b3b945a", "metadata": {}, "source": [ "# complex custom shapes in py5\n", "\n", "Out of the box, py5 includes a handful of basic functions to draw shapes, like `ellipse()`, `quad()`, and `triangle()`. However, you'll often find yourself wanting to draw something that does not fit simply into any pre-defined category. If you want to draw a heart, star, octagon or Pokémon, you *could* try to build it out of existing shapes... but in most situations, it's better to make a custom shape yourself. In this tutorial, we'll explore using points and curves to draw all sorts of complex glyphs. \n", "\n", "Two types of curves well-known in mathematics and visualization are inherently understood by the py5 language - [Bézier curves](https://en.wikipedia.org/wiki/B%C3%A9zier_curve) and [Catmull-Rom splines](https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull%E2%80%93Rom_spline). Thankfully, the complex underlying calculus is handled by py5, and your only responsibility will be to understand *control points* and position them by their coordinates within py5. \n", "\n", "## loading images into py5\n", "\n", "To better understand coordinates themselves, it can be easier if you have a visual guide. You can take this grid image and place it as a background in your py5 sketches (if you're using them somewhere on your computer) to make things easier. If you're using an online environment to play with py5, you'll instead want to link to the entire URL of the image so that py5 can find it.\n", "\n", "\n", "grid.png\n", "\n", "You can place images in the same local folder as your py5 sketch in order to load them - `.gif`, `.jpg`, `.png` and `.tga` file types are all supported. (Many operating systems hide file extensions by default, so you're encouraged to hunt around and find out how to enable them in yours!) \n", "\n", "Displaying an image in py5 is a two-step process: loading the file itself into your sketch as an image, and then displaying that image. Put your `grid.png` file in in the same folder as your py5 sketch, or in a folder inside of that sketch, and make sure you're giving py5 the full path to find it." ] }, { "cell_type": "code", "execution_count": 1, "id": "b1d0d3a0", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "size(800, 800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke_weight(3)" ] }, { "cell_type": "markdown", "id": "a5d8e90a", "metadata": {}, "source": [ "You can see that loading an image is done by declaring it as a variable, in this case named *grid*, and assigning the local filename to it using the `load_image()` function. By default, py5 will look in the folder where your sketch file lives, and will also look in a subfolder called DATA if one exists. Try moving *grid.png* into a new folder called DATA, and the code will still work even if you only tell it to look for *grid.png*!\n", " \n", "However you choose to load it into the sketch, if your grid image is in the right place, running your sketch will reward you with this grid image as your background. Any subsequent lines of code will draw over this background, making it very easy to see the link between your coordinates and the actual output.\n", "\n", "In the `image()` function, the first argument is the name of the image (that we defined just one line earlier), and the next two arguments are the x and y coordinates where you will place the image. `image()` also takes a variety of optional arguments - for example, a width and height at which to display the image. \n", "\n", "*Reference: [image()](/reference/sketch_image), [load_image()](/reference/sketch_load_image)*\n", "\n", "## using Catmull-Rom splines\n", "\n", "In py5, we can use the `curve()` function to implement Catmull-Rom splines (named after Edwin Catmull and Raphael Rom). To help in visualizing these curves, let's first draw a diagonal line." ] }, { "cell_type": "code", "execution_count": null, "id": "73dae7a8", "metadata": {}, "outputs": [], "source": [ "size(800, 800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke_weight(3)\n", "\n", "stroke('#0099FF') # pale blue\n", "line(100,100, 400,400)" ] }, { "cell_type": "markdown", "id": "cf165dc2", "metadata": {}, "source": [ "\n", "\n", "Using our grid background, it's easy to see that the first set of arguments *(100, 100)* correspond to the end of the line at the top left, and the second set of arguments *(400, 400)* correspond to the end of the line at the bottom right. When we gave these two points as arguments, a line was drawn between them. Disable this line by \"commenting it out\" and replace it with a curve..." ] }, { "cell_type": "code", "execution_count": null, "id": "0851d89c", "metadata": {}, "outputs": [], "source": [ "size(800, 800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke_weight(3)\n", "\n", "stroke('#0099FF') # pale blue\n", "#line(100,100, 400,400)\n", "curve(0,0, 100,100, 400,400, 500,500)" ] }, { "cell_type": "markdown", "id": "9b0c5bb2", "metadata": {}, "source": [ "Visually, nothing has changed. If you take a look at this `curve()` function, the middle sets of arguments are identical to those we gave the `line()` a moment before. The extra arguments at the beginning and end - 0,0 and 500,500 - are control points, which we'll explore more shortly. To see what happens if you begin adjusting the coordinates of the control points, let's create a second curve of a different color." ] }, { "cell_type": "code", "execution_count": null, "id": "0146cb84", "metadata": {}, "outputs": [], "source": [ "size(800, 800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke_weight(3)\n", "\n", "stroke('#0099FF') # pale blue\n", "#line(100,100, 400,400)\n", "curve(0,0, 100,100, 400,400, 500,500)\n", "\n", "stroke('#FFFF00') # yellow\n", "curve(0,250, 100,100, 400,400, 500,250)" ] }, { "cell_type": "markdown", "id": "9a07c8f0", "metadata": {}, "source": [ "\n", "\n", "We can see that adjusting the control points has given the line a slight bend, but what exactly is a \"control point\"? What's happening here? Let's add some extra curves to make things a little clearer." ] }, { "cell_type": "code", "execution_count": 2, "id": "3d0a6167", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAMgCAIAAABUEpE/AABx5UlEQVR4nO3dd5wjdf3H8c/MpNft7XqDox9Il97vOHpHaaKIBbGgIMIPEEUQLAgiKEgRpR/t6FKlc/R2tOu3e9tbNj0zvz9mL7c1ye3NbpLd1/NxD50kX7KffHe+yXtnvvONst1Zf1ZVRfpTFMUwDBlz+fq5o8QwRBnYtVYaZ90FFClG4sYa7ffG4jI2+8+An8JOa7kBe7WuG+rgdCUi+er3cfb7Hu13kHHWXUCRYiRuLNJVX2Oz/wz4Key0lhuwV6uqYjO3EslUNJ7MQ0UAAADjhcths9s0EekNWOFYYllDW15LAgAAKG4za8uCNk1E1HxXAgAAMN4QsAAAACxGwAIAALAYAQsAAMBitqwtlD6XHo6zCztzf2k5tqSv6CihrzZe+jUO9wIneF8pQ61qQF9lNqDThnyNE7mvhtypTPSVVTIFLEVRKgKeqlKfw6aJSENbd2N7aNx0mcthKw94PE6H3+Nc29LZ2B4armVF0Ftd6nPabSJS39o1XCfk2KwYuRy2uvJAic8tIrFEsrE91NoVHvzqFEWpLvXVlQfSzVo6ewY/W47NipGiKCVeV0XQ6/c4RSQcjTe2h9pDkcEtbZo6tarE7NLucKy+tasnGh/yCcdrX/U1u67c73Gua+uub+0a/GiOfZVjs6LjtNu2ml49+P6lq5rCscSAO70uR115wNz9OkKRVU0dyZQ++L/NsVnxMgdOidflcTlEJJZIfryicUCbCd5Xs2rLAl7X4Pt7ovHPVjcPuJMPwZHJdIqwIuCZXBm0a5quG7pu1Jb5p1QGx6yyUVXic8+dUlUR8LocNsMwNHXYfqgIeqdUBu2alkrpqZQ+XCfk2KwYlfrcW0ytCnhc5kuza9qUymB1qW9wyymVwdoyf99mFUHviJsVo+pS3/SaUq/LYb46l8M+vaZ08KtTFGV2XXnQ29ulXpdjVl25+a40wDjuq7RSn9vndhiGYf4hN0COfZV7lxYdTVUMw9B1w3xp6X+D14h22m2z6srTu1/Q65pdVz74QEWOzYqX027bfHJFbZnf5bCbrzGRTA1uM8H7SlWVAXtUKqUbhjE4PvIhOGLDvgHZNLW2PGAYsqqpo6077HbaZ9eVlwc8LZ09g/9sKjodoch7oYiIBL2umbVlwzWzaWpdDp2QY7MiNaWqxDCksb27oa1bRCqD3kkVwdoyf3t3JJbYsDhtqc9dHvBE48kVje2RWMJsVlXiHXDEJcdmRarU547Gk43tobbusIhMqy4t87sHv7q6cr/bae8Kx5Y3tOmGYTarKw8sX9c24NnGcV+ZFEWpLfd3hWMBj3PIBjn2VY7Nild9a1dTx7BH2U0zako1VWnu7FnT3KkqyuxJ5V6Xo6rEO+DwfI7NipRNU2dPKnfYtFAk3hGKNA8zWOirz9e0DLhHU9Utp1V19D/izofgphj2yE2Jz62pSnsoYn5URGKJdW3dIjLO/oDO/LdIjp0wvvtK1/V169OViDR39nRHYiLi7/+JaN5s6eyJxBJms/ZQxGm3DeiEHJsVqU9XNX26qsncDURkZWN7MqU77bYBh0iDXpdhSH1rl24YZrNoPFnicw044jK++8pUXerTVHV1U8dwDXLsqxybjWNOu83ttEfjyTXNnSKiG8bq5k7DkPKAZwTNild1qc9h0zp7ol+sbRkuXdFXQ6os8Wqq2h2O9b2TD8FNMWzA8jjtItLatWEH7eyJGob43I6xqKswDNkJIgM7IcdmReqjFY3r1qcrUySWMIyBExh9bkcypfd9RwtFYrK+cza22fhgxvdoPJnSNxx1d9ptTrutOxKL9PnDLjRUZh33fWXT1KoSX0tnT0ofeqJGjn2Ve5cWL0URpY/BDcxX2toVTt8TiSViiaTZORvbrEjZNLU84E2m9JWNHfTVxgp6Xd2RWLz/6VQ+BDfFsHuJ22kXkXhiQ1/Hk6mUrmeYrjT+DNkJydTATsix2figKEqJzxVLJPu+72iq6rTb+p4xFBHzyHDfiTU5NhsHzLf1GTWlqqIMmLi9fm/p1wmxREpEtD6zaiZCX1WX+hLJVENb93AjJce+yrFZUfO7nQGPy/zIH3IKv7lX9I3yIhKJJVwOm8OupXekHJsVqd7jKN3RyhKveWkIfZUjj9PucdrXtgy8yoQPwU2R5cUP+Msypes2TbVpE6vLhuyEwftNjs2KmnltjsNmGzAFwfwrcWAPpHQR0frsLTk2K3YOmzZvVu28WbVBr2tde3dX/0PupsF7i4j03VvGfV95XY6qEl8uc1my9tVGNSs65qvyuZ0epz2Z0lMp3ed2bD6lstTnHtx4gveVmaedDltNqT+Z0pMp3etybD6lcsgZfhO8rwYo9bsNQzqGuuRZ+BAcqWGPYJl76uDDq4YhE+e6ywydMIJmxc5ctqO2zN/UEUpPMzKpuV1Wk2OzYhdPptY0d2qa6nHa68oDLod9ZWN7+tEhj6kMPpExvvvKTOqhSHzAjqQoSt9Tzzn2VY7NilQqpad0o6kj1NQe0g1DVZTpNaUBj6uuItB3BZAcj9WNm0N6QzI/y90O+9qWTvPc+qSKQGXQV1ce6Ao392lGX/WjKMqQ5weFD8FNM2y0NK/VHJA9NVVN6fqAQ6bjWI6dMBH6SlGUUp97cmWwrTsy+DBySjcMY+D7kXmks+9Fvzk2GweaO3vWtXUva2jricbL/O6+f0Cbf+QN6ATz5sTpqxKvK+h1NbZ3q4qiKora++6slPrcfQ+Q595XuTQrUvFk6oNlDevaus35+7phLGtoC8fiDpvWd4aZ+UoHnF6waZqIJFOpjW1W1LojsfTMxbUtXbFE0u209501RV8NUOJ1Oe22rp7o4If4ENwUwwYsc7qo075htofTbrNp6jh4w8pdjp0w7vvKPHY1rbqkrTvS92BMWkrXY4mkpqp9DxuYS/z1nRmTY7PxpCMUlfUTFEzhaNwwZMAkWfNm33ei8d1X5nKgsydVzJtdN2923TYzakSkxOeaXlPqc28IDTn2VY7NxpNQJC79P8/MYw8DUqbbaTOMgTNjcmlWpMy33Ej/dQHMm31fMn01gHl+sHOogMWH4KYYNmD1RBMiUhH0pt/fS/1uEekKD/E7GK+G6wRznYKNbVakzLM5kyuDDW3dQ6YrU3ckZtPU9AKkiqIEPE7D6O2cjW1WjBRFUftftaQoinkRTd93mXgyFUsk/R6n1+Xo28wwZMAF0uO4r+LJZEo3zFky5j8R0XUjmdLDfeYj59hXuXdpMRp8NVx6T+h7HKU7HDOMfu9CXpfDvE6i73mfHJsVqXAsbhgS8DjTr05RFI/Lbhj9xiB91ZdNU31uZzgWH/JF8SG4KYYNWB2hSCKZCnpdFQGPqig+t6OqxKfrRlv30JPgiov5WZg+OKAoog76dJThO6HvBXS5NytGiqJMqgjUlvkb20ON7SF1fb8N7qvucEzXjfKAx+d2qIpSXeoLel2xRHLAJJscmxWjqhLvvNl1U6tK3E672UWTKgJBr0vXjQEf8+2hiGFIXXnAbtNURZlRU+q029pDkQFvcOO4r9a2dH2wrCH975OVjSLS2RP9YFnDgE7Isa9ybFaMZteVT60qMd9bVEUxl3B0O+090bh5HMsUT6Z6onGHTZtaVaIqit2mTakMGoYMWJY2x2ZFKhSJ90TjbqfdfHWqokytKnHabdF4ou+eQF/1VRH0aqrSPswnOx+Cm0LZ/uxrRaSzJ7qsYeCSx6U+99SqkvQXMui60dLVM3j+TTGqLvVNquhdxd+cVGvGhZbOnlX91zxMd4LZIJXSh+yEHJsVnVKfe3pNqbk9IFEN/gLHSRWBioDXvMbN/HKPVU0dg7+JL8dmRcfndsysLU/PKJL1r66+tWvwgodzJlV4XQ6zpWEY8WTq8zUtg7/QY7z2VV/bzazVNNUchrpufLyyccBphRz7KsdmRWdmbVnA4zLXwTLv0XUjkUp9Vd8ajfc7WWy3aZtPrrDbNLOlrhs90fgXawcu2J1jsyLlcthm15WnX505ar6sbx2wUgN9lTZ3SqXLYf9kZeNwf41M8A/BEZhZWxb0uiTzlz2b7+NV67+7sWGoz4kiZZ6M6H/fhpjVl9kJ1aU+x/ovsBzyz5ccmxUdu03rc+VtvwtCEsmBJ9fXtnTFEilz+Zl4Ilnf2jXkCgU5Nis6oUj801VNVSXe8kDv4sXd4VhrV8+Qr+6r+tbJlcH0NxOvaekcMgqM177qK6n3u7Z78OWTOfZVjs2KzrKGtoqgtyLgcayfZNba1VPf2j34a3QTydSX9a21Zf2+mXjwE+bYrEhF48m+r84cg4O/9pu+MjlsmmPQEb4BJviH4KbIdAQLAAAAuUsfwZq4K4ABAACMEgIWAACAxQhYAAAAFiNgAQAAWCzTVYToy2HT7DZNRBLJ1DhYXGdUmQtBicjgi3fQl6aqLodNRHTDGLD8NAZgAOYuPQCj8eR4XcveEgzA3DEAR4CAlaug1zWlqkREVqxrHwcrPY6qyRVB86rmd75Ym+9aCppuGJtPqRSRjlCEy3gz87md5pJsDMCsasv85nIV735Zn+9aClp6AHaHY+NsdSvLpQfg6qaOcbNg02gjYG2EwQvPYEiGYdBXuVAVhY7KHX2VO7OvVEVJ0WnDSw9Adq1c0EsbizlYAAAAFiNgAQAAWIyABQAAYDECFgAAgMUIWAAAABYjYAEAAFiMgAUAAGAxAhYAAIDFCFgAAAAWI2ABAABYjIAFAABgMQIWAACAxQhYAAAAFiNgAQAAWIyABQAAYDECFgAAgMUIWAAAABYjYAEAAFiMgAUAAGAxAhYAAIDFCFgAAAAWI2ABAABYjIAFAABgMQIWAACAxQhYAAAAFiNgAQAAWIyABQAAYDECFgAAgMUIWAAAABYjYAEAAFiMgAUAAGAxAhYAAIDFCFgAAAAWI2ABAABYjIAFAABgMQIWAACAxQhYAAAAFiNgAQAAWIyABQAAYDECFgAAgMUIWAAAABYjYAEAAFiMgAUAAGAxAhYAAIDFCFgAAAAWI2ABAABYjIAFAABgMQIWAACAxQhYAAAAFiNgAQAAWIyABQAAYDECFgAAgMUIWAAAABYjYAEAAFiMgAUAAGAxAhYAAIDFCFgAAAAWI2ABAABYjIAFAABgMQIWAACAxQhYAAAAFiNgAQAAWMyW5WFNVRTFpqm6bsQSyeGaaapqt6mKoohIIplKpvRNaQYAAFDUhg1YiqK4HbaaMr+qKKV+d3c4tnR185AtNVWtLvVVlfgcdk1E1rV1N7R1J5KpkTUDAAAodsMGLFVRZtaWpXRDN4xkSjeGf4rqUl9deSAaT0TiCVVRKoNeh037qqHNMIwRNAMAACh2wwaslK5/tKLR3N5+dt1wzRw2rbrUF0+mVjZ1dIdjNk2dM6ki4HX53Y6ucGxjm422Ob727Usbt/C3Vjl7KpyRKlc4/VBCV1eGgyt7AivDwS9DJR90VvUk7WNWGAAAGE+yzMESEU3NNBG+xOcWkdaunu5wTESSKX1dW/f0mtKKoLdvcsqx2WiY4e08ctLnC2qW7VjaUOLI9WelDOWDzqqXWya/1lL35LqZ7QnXqBYJAADGk+wBKzOP0y4i7d2R9D3dkZhh9N6/sc0sVOaInjnj/W9M+2S7YNMI/nNNMbYvady+pPGc2W8ndPXF5qlPtG73fmqntqTf8lIBAMA4s6kBy+WwiUiiz/WAyZSeTKVUVVUUJT2/KsdmqqL4Pc5NLGkLX9PZ0984YfIHLnXgZY/tCfc7HXUfd1evi/nbE+7V4WD6IY+WmOrpmOrumOLunONr2crXqCi9D9lV/YDqFQdUrxDl4eXTplzy7n6Pvj6dmWMZ2LTeo55BL0f+MlHX72Q2TaWvMnM7bemNoE5fZZIegAGPU+etangMwNz1GYB2+iqz9ADc1IBl0vtPgk/pht2maKqSTBkb1czlsM2sLRtxGbWOtu/XPj6/bIkqG35QXLe/GZrzXMd2b3Rv1hDv/+T9s9yXcZG4SKeIiFeLbeNZsZ13+S7+z7bzLlcUQ0TEkBlrV99x/u1rW8rven7v+/+3ezzBPK1MNuW3OaF4XQ76KkdVJb6qknwXUSSm15Tmu4Ti4HbaGYA5Kg94ygOefFdRHDY1YKmqIiLpgz0mRRHD6BencmxmiGS8YHFYHjX23bqnTq56yaFsOGr1Sc+Uu5r3fKZjXiTl6PMTctKlO17p3OyVzs1ukIMrHZ37Bz88ZYtXJscbZGsRkUkVrecdt+iMg5+59an9733x6zFiVn+qYi52NsLf5oSiqYqIGIZwpCEzZf3biE5PZcMAzB0DMEcMwNylB+CmBqxEUnfaRVPV9KqhiqLYNC2l9/st5NgsmdJbOns2duGGr5cu+8PcB6e629P3PNWyxfUr9ny7c6qIiJgHpkauWbRPmubdsnqX4K7bnuR85ozoreWuVhEpD3Sfd9xDpx3039/fc8Ddz++Q0lkWv1ep3+2020SkuSOU71oKmqIo1aU+EYklkh2hSNb2E1n6xER3JBaJJfJdTkEr8bnNWRkjeDudUNIDMJ5M9p0ijMHSAzAUjYejm/SROu6lB+CmBqyeaNzndnic9vQ6726HTVOVSCw5gmaJZKq+tSv3n+7REldv+/z3Zr2bPjb2Suvk89/f+5XWySIi0j2yFzWk8kAq8MFnV3acfvFbl5+++W0XzLtymm+liFQGQ1ef9dCpB77ys5v2e+bt6Rb+xOLldTnMgNXQZuWvYFwy398jsQR9lVmJz22+v7d1RwijmTntNvP9faPeTiem3oCVSDEAM0sPwI5QpLUrnLX9RJYegNkPumT+A6gnGheRyhKvuZqDoijm2dmOnugImm2Umd6OV/e/8/uze9NVS8x98uuH7fHcN9anK4upiiJiTF31nLHy0xs/OXvO3V989383rWivNR/dZkbz01fe8+Cli6ZU8o6GXKXXQDGPvSOD9HxkVaGvskjvTpkX2QH9kzsGYO7SA3DY3UtVFI/T7nHavW5H35vu/gsrdIVjkVjC73bWlPk8TnuZ310R9CZTelv/hJtjs9zNr1225MDb00swPLBm862e+vZdq7cc2bNtDMP70WJZ/lZCt//907PmLlp+wZM/7Ar3zpY/8utffHzzLecetURTOSwPAMDENWzAcjvt28yo2WZGzZZTqxRF8ay/udmkir7NDMNY09IZTSRrSv3bzKiZVVeeSKbWtXXH+3/JYI7NcvSjOW8v3uP+UntURCIp2+lvHXrsa0c2xcbsugZDliyS5W+JSCzlvGrVdbP/+MjfH5uX0hUR8Xvif/7+s69fd8fW04f+6kYAADDuDRuwkim9PRQx/4Uise5IzNwevPB6KBJf2dje2hVuD0U6QpHVzZ3NnT2DnzDHZln9dpuXrp33X3MhhhXh4Nef++btK7YewfNsmg0ZS0Saqw767st/3/3cU9/7qsq8Z8fN1i254fZfnPAGh7IAAJiAhp3kHkskP1/TkuOzhCLxUCT7ZQU5NhuOKsaNX3vqOzPfN2++2DzlmFePao27R/yEm8aQJYtERGbsZP7vm8t/sNMPqn9yzJuXnPKK15Vw2lNXffuFI3f/4tSrDv2yntVoAACYQIpmip+iyN93fDKdrh5aO+eQ/x2fv3Rl6nccS2bslNz+2Kvv3XXbs7718ke9E+1323LtuzfedvpBH+atRgAAMOaKJmBdt/0zZ874wNy+Zfm2x752VDRlzTL0m2ZgxpIdj17WULr3T0/++d/3jSU0EfG547f+/PF///JRv4e1QwAAmBCKI2Bdtc0LP5j1jrn992Xzvr1kfsoonCtFh8hYuqFec9/OX/v+6elZWSfv98m7f7t1x83W5a1MAAAwVoogYP1w9ju/mPuGuf2vlVt97+2D8lvPUIbIWCLKxysqdj3n1Osf3sG8e1Zdx8t/vvO7C9/LV5UAAGBsFHrAWlDz1Z/n/dfcfmDN5me8daguhXPsqq+hM1YsoZ1z/YFHXnJ0W7dLRJz21I3nPnX7Lx5zO5OZngwAABSzgg5Y2wWb7t71EU0xROTVlknffHNhIZ0ZHGzojCUiD786Z953z3j90zrzkVMP/Oi1v/xrVl1HnuoEAACjq3ADVqk9+uDXF/ntcRFZ1lNy5KtHF8as9syGzVirmwN7/fQbNzyyvfnIdjOb3vrr7Qd+bUWe6gQAAKOoQAOWosgdOy+e4e0UkY6489D/Hds8dgu1b6JhM1Yiqf7guoNOuXJhOGYXkVJf9PHf3veTY97K8FwAAKAYFWjA+uXmry2s+0pEDENOe2vh0u7yfFe0UYbNWCJy57Nb7fajU5Y1lIiITdP/ePZzt/78cad9JF8ZBAAAClMhBqw9K9f8euv/mdu//3zXR+pn57eeEcmUsT5YVrnzD099/r2p5s3TD/rw+WvuqioZ4fdeAwCAQlNwAStgi92x82JzYvsLzVN/9eFe+a5oxDJlrNYu90EXnJCekrXblmtfv+6OLaa25qVQAABgrYILWH/Z/r/TPZ0i0hp3n/z6YYV92WBWmTJWMqX+4LqDzr724ERSFZEZNZ2vXvuv/bdfma9aAQCAVQorYB0z+bPTpn9kbp/99sENUV9+67FCpowlIjctnjf/wuM7e5wiUuKLPXHFvWfO/yAvhQIAAKsUUMAqc0Rv2OFpc/uOlVvfv2bz/NZjnSwZ69l3p+1+7jdXNAZFxG7Tb/7pE5ef/r+8FAoAACxRQAHr6m2fr3KGRWRVOHDOOwfkuxxrZclYn6ys2OWHp76xtHcl0ou+8eqtP3/cpuljXygAANh0hRKw9q1adcb03lNjP3j3oK6kM7/1jIIsGaupw7PveSctenkz8+bpB3346OUP+NzxsS8UAABsooIIWC4teeMOTymKiMi9q+curp+V74pGSZaMFYnZjvv1kX99pPfLoQ/ZadkLf7irurRn7AsFAACboiAC1i/nvr6Zv01EOuLOc98bZycHB8iSsXRD+eF1B/7ylr0NQ0Tka3PWvfznf8+o6cxHqQAAYITyH7Cmebt+vvkb5vb5H+6zLurNbz2jL0vGEpEr7971tN8vNJdvmF3X/vKf79x6evPYFwoAAEYm/wHr99s879aSIvJmW+0/ls/LdzljI3vG+td/tzr8/47pidpFpK489NKf/rP7VmvHvlAAADACeQ5Ye1auOW7yUhExDPnxe/ub58UmhuwZ68m3Zh54/glt3S4RKfVFn77ynvk7Lxv7QgEAwMbKZ8BSxfjTds+ac9vvWr3la62T8lhMPmTPWK99Mmnvn55c3+oTEa8r8fBlDxy319KxLxQAAGyUfAasU6Z//LXSdSISTtkv+GDvPFaSP9kz1kcrKvf48Te/rC8VEbtNv+tXj5x+0IdjXygAAMhd3gKWQ01dutXL5vbVn+28OhLIVyX5lj1jLV8X3OPH3/hweaWIaKrxz/Me/+ER74x9oQAAIEd5C1hnzXzf/FLnppjnms92zlcZhSF7xmps9+7zs5PfXForIooi1/3wmV+e9PrYFwoAAHKRn4Dl0RK/2uJVc/uKT3cLJR15KaOQZM9Ybd2uA84/8aUPp5g3r/jWi78546UxrhIAAOQiPwHrR3PernH1iMiqcODGr7bPSw2FJ3vG6g47Dvnl8U++NdO8+auTX7v6rOfHuEoAAJBVHgJWwBZLryz660++HtO1sa+hUGXPWJGY7Yj/O/rBV3q/svC849689vv/HeMqAQBAZnkIWD+Y826ZIyoin3eX3b5i67EvoLBlz1jxpHb85Ufc99Jc8+aPjnr7b+c+rSgCAAAKxFgHLI+W+PGc3vTw2093Sxr5X0q+8GTPWMmUetJvD//3s1uaN89e+O4/fvKEqkygdVoBAChkY51vzpr5fpUzLCLLe4L/WbXlGP/04pE9Y6V05dSrFt729DbmzTPnf3Dzz8hYAAAUhDENWE41dd7mb5rbV322K4evMsqesXRDOfOa+f94fDvz5hkHf0jGAgCgEIxpxDl9xoeT3N0isjbiv235NmP5o4tTThnru38+5KbF88ybZxz84S3nkbEAAMizsQtYiiI/XT/76prPdubiwdxkz1iGId/7y8HpjHX6QWQsAADybOwC1mG1X27mbxORtrjrH8u3G7OfW/xGkrE4VwgAQB6NXcD66Wa9s6/+vmxeT9I+Zj93XNjojHXGwR/e9JOnWLsBAIC8GKOA9bXSdXtXrhaRuK5d9+XXxuaHji8bnbG+Pf/9v57z9NgWCQAARMYsYP1s895kcPfqLeojvrH5oeNOrhnrn09ua9783mHv/uUHrPMOAMBYG4uAVecOHTtpqbn9p893GoOfOH7llLG+88dD7nimd4n8c458+w/ffW6MqwQAYIIbi4B11sz37KouIs83TX2vo2oMfuK4ltPaDd+6ZsFdz/eu4/rTY9+64lsvjnGVAABMZKMesOyqftbM983tv361w2j/uIkhp3XeT7lyYfr7Cn950usXf/PVMa4SAIAJa9QD1lGTPq91hURkbcT/8No5o/3jJoycMtbJVxz28Ku9ff7r0/73s2PfHOMqAQCYmEY9YP1g9jvmxk3L5vHdOJbK6TuhT/jNEU++NdO8ec13n//eYe+OcZUAAExAo5t4tg4071XRuzrDP5axuKjlsmesWEI7+rKjXnh/qnnz+nOeOf2gD8e4SgAAJprRDVhnzvzA3Hhw7Wbrot5R/VkTVfaMFYnZDrv4mNc+mSQiqmLc/LMnTtjn07EvFACAiWMUA5ZDTX1j6ifmNoevRlP2jBWKOOZfeNw7X1SLiKYa/zp/8aG7fDX2hQIAMEGMYsBaWPtVpTMsIivCweeap43eD0IuGauzx3nQBSd8vKJCROw2/b6LH9p33qqxLxQAgIlgFAPWGdN7zw/evmJrg+8dHnXZM1Zrl/ugC05Y1lAiIm5n8uHLHthlbv2Y1wkAwPg3WgGr1hU6pHa5iOii3LZ8m1H6Kegve8aqb/UdeP4J9a0+EfF74o9fcd+2M5vHvlAAAMa30QpYp077yKboIvJC09QV4eAo/RQMkj1jLWsoOeiCE1q73CJS5o8+feU9cya1j32hAACMY6MVsE6f8ZG5cSuHr8Za9oz18YqK+Rce1x12iEh1ac8zV909ubJ77AsFAGC8GpWAtXvF2rn+VhHpTDgfWLv5aPwIZJQ9Y731We0RlxwTjdtEZFp119NX3lMRjIx9oQAAjEujErDOmN67lOU9q7eIpGyj8SOQTfaM9fx7U4+//IhkShWRLaa2PnHFvX5PfOwLBQBg/LE+YHltieOnLDW3b13B+cE8yp6xHn199mm/P1Q3FBHZcbN1D1/2gMuRHPtCAQAYZ6wPWMdM+ixgi4nIp13lr7fWWf782BjZM9Z/ntvyB3850Nzed96qey56WFNZVAMAgE1ifcA6dfr66e0cvioI2TPWjYu3/+Ute5vbh+/25c0/e0JRBAAAjJjFAava1bNP5SoRSRnKv1dtZe2TY6SyZ6wr7971qnt2NbdPP+jDq779wthWCADAuGJxwDpu8meaYojI/1qm1Ed81j45NkH2jHXBzXvf8sS25vbPj3/jZ8e+OcYlAgAwblgcsE6Y8qm5cffqLax9Zmyy7Bnru38+5KFX5pjbV5/1/KkHfjTGJQIAMD5YGbCmuLu+Xr5GRBK6+sAalr8qQFkyVkpXTrri8Jc+nCIiiiK3/OyJQ3f5Ki+FAgBQ1KwMWMdPWWpOjn62aXpLzG3hM8M6WTJWNG47/OJj3l9WJSI2Tb/34od332ptXgoFAKB4WRmwTli//NU9q+da+LSwWpaM1dnjnP/L45Y1lIiIx5l49PL7t5reko86AQAoVpYFrFm+jh1LG0QkpmsPrt3MqqfF6MiSsRrafAdfcHxTh0dEyvzRJ6+4d2pVV14KBQCgGFkWsE6c8ql5fvDJdTM7E06rnhajJkvG+rK+dP6Fx3eFnSIyubKbLysEACB3lgUsrh8sQlky1jtfVB91yVGxhCYim09pe+w393ldibwUCgBAcbEmYG0ZaNkm2Cwi4ZT90frZljwnxkSWjPXce9O+eeVhKV0RkZ3nNiy69EGHLZWXQgEAKCLWBKwT1x++Wlw/qydpt+Q5MVayZKz7X9r8h9f1flnhQV9bfuvPH+eLdAAAyMyagHXM5M/NDc4PFqcsGevGxdtfcvse5vbJ+33y++88P/YlAgBQRCwIWJv527YMtIhIT9L+5LqZm/6EyIcsGevXd379xsXbm9vnHffmuUctGfsSAQAoFhYErKPqeg9fPdU4I5KybfoTIk+yZKwfXnfgw6/2fpHOH7/33PF7Lx37EgEAKAoWBKwjJ31hbjzE8ldFL1PGMr9I59WPJ4mIqhh3nL94721X56tQAAAK2aYGrDp3aJeyehFJ6Ori+llWlIT8ypSxIjHb4f93zNLV5SLitKceuuyBrac356tQAAAK1qYGrCMnfWFeU/Zi89T2hMuCipB/mTJWa5d7/i+Pa2jziUiJL/bEFfdNqWSRdwAA+tnkgLV+AtaD9ZwfHE8yZawVjcEFFx6XXuT9iSvuK/HF8lUoAAAFaJMCVqk9uk/lKhExDHl4LeuLjjOZMtZ7X1UdfelR8aQmIltNb3n41w+4HMl8FQoAQKHZpIB1aO1XdlUXkTfb69ZG/BaVhMKRKWM9++60M65eYBgiIntts/pf5y9WFSNPdQIAUFg2KWAdtX590QfXzLGiGBSgTBnrP89tef7N+5jbx+712Z+//2w+KgQAoOCMPGC5teTB1cvN7YeYgDWeZcpYV9+7y7UP7mhun3Pk27844Y28lAgAQEEZecA6sHqF15YQkU+6Kj7rLrOuJBSgTBnrp3/b776X5prbV575wkn7fpKXEgEAKBwjD1iH1X1pbjC9fWIYNmPphnLKlQtf/GCKiCiK3Przx3eeuyyPhQIAkHcjDFiKIofWfmVuP9pAwJoghs1YsYR21CVHf7KyQkSc9tQNP7p9Rk1jHgsFACC/RhiwvlayrtYVEpHmmOeN1jpLS0IhGzZjtYdcC37VuwBp0Bu57oc3VgRZgBQAMEGNMGAtXH9+8PGGmXqf7wPGBDBsxlrZGFh40bGhiENE6srb/vL9m3zueB4LBQAgX0YasNafH1zM+cGJaNiM9c4X1cf/5ohUShWRuVPX3HvRw5rK4lgAgAknS8ByO+0VQa/5z2m3mXfWuUM7lKwTkbiuPb1uuog4bFqpzz2g2WA5NkMxGDZjPfHmzEvuOMq8e/7Oy/527lP5KhEAgHzJlHJKfe6qUl+Jt/crnFu7wk0doa5w7NDar8wveH6peUpX0umwaZMrg6U+t01TzWYNbd090YHnhnJshuJhyJJFIiIzdtrwv0sWiRj3vLDLjJruM+c/LSLfWfD+inXBK+7aLY+FAgAwxoYNWBVB79SqEl036lu7dMNwO+wlPrfbaf98TcvC2t4JWIsbZolIXXmgPODp7In2RON2TasIem2a+vmaFt3od24ox2YoKsNlLLnh0QW15W0Ldl4iIr8546WVTcF/P7tl/uoEAGBMDRuwKoNeXTdWN3e0doVFxGHTRCTgddUG7ftXrTTbLG6Y7XHaS/3ucCyxqqkjGk8qimLT1IDXVeJzt3WH08+WYzMUoaEyVv2LhqFc9q+TXY7m/eatVBT553mP17f6nn9vaj4rBQBgrAw7B6u5s2dtS6eZrkQknky1dIUNw9i3cqW5gPunXeVfhUoCXpeItHT2RONJETEMo6kjZBhGmd/d99lybIbiNHA+VtPsg0WURFI7+tKjPlpRKSIOW2rRJYu2mt6SzzILj7H+8C2HcWGh9O5ksGNlRP9gNKR3q2GPYLV09gy4x66piqLsVfKxedO8ftDjtItIZ0803SwUieu64XL0e+Ycm4mIohToog/pwhSlcIvMp7cfNBRFpu8oIl3V26yyqVNXPdcVdh36q+NevfZfkyq6S3yxx3973+7nnlrf6st3rYVCVdmpcpXuHvoqq3T3qKpi6HktpbD1GYAKO1VmfQYgfZVFuntyvZRPU9XKEm80nti37DPznsX1s0TEbtNEJJnaMIh1w0jpuqaqiqKk/z7IvVlViXcTXtco8jgd5kaJzz04F0JEZPkz7U57uHY7EWkt30pE6joeSen+b11z2gOX/MPnjk2t6nryd4uOuew7PVFHvmstCOr6gehy2OrK/fktpsC5HHZzgwGYVbp/asv8THLNID0AHXaNAZhZegAGvS67beRfsjcRpAdgru9TdeV+p93m6F46zdMpIh1x56utk2T99/3qer8xnNINu03RVCWZ6r0/x2Z2Ta0qKfTDGwGPM+Bx5ruKAlW17qVVDpuZrlrLtyrfVqaueq6503f+P771lx/epKn61tPrb/7Z/T/527d1nSG6gdNuK/w9v0AwAHNXESzQv1cLjcOmMQBz5HM7fG7+Qs5JTgGrutRXEfSubek6rfpT856nG2ckDVXWH2JVVUVPbQhPqqroutE3TuXYTDeMeDK1SS9o1KiKYi4wkUzp/FGYQc2yZwyRtvUZSzeMuuX/ffHDOb++89jLTr1XRPbc+uPzjrv/N/8+Jt+VFgTz8hFdN5I653IyYQDmzqaq5ltuwb6dFg4GYI4YgLlLD8AsAUtRlOpSX3WJb21LV1NHaMG8Zeb9j6+bZW7EEimn3WbT1PTpP0VRbKqqG0bf30GOzeKJ1NqWrsKceBj0usoDHhFp6w6HIizflUlt6ill/VnC9oqte6Jx9wePXrtoi6Bnj58e+7KInLjPKx8t917/8ERfHEtVlOk1pSISiSca20P5Lqeg+dwO8xgDAzCr6lKf1+UQkfqWLj4LM0gPwFgi2dDWne9yClp6AHb2RPtOp8Zg6QGYKWApilJX7i8PeOtbu5o7ewK22NfL14iILsqT62aYbcLReMDj9Lud5uWBIuJ12VVVCUcSfZ8qx2a6YXSEIha9RovZbVq5iIj0RBPsXplVBr1TVz0n6zNWfPIO8URKliw67+9frytvPXHfT0Xk16c/8+kq76KXN8tzrfk2XUpFJJ5IsVNllp5XywDMqtTnNteHbi/Ut9PCYQ7AZEpnp8osPQDDMQZgFukBOOw8GLtNm1QRKPW5Vza2N3f2iMiBNSvsqi4i77RXN0Z7T+13hWMiUhH0mgdaFUWpKvEpijJgYOfYrJClr5pQuYAiJ8bUVc8N+C4dw1BOv/rQlz+aLCKqYtx5waO7zK3PZ435pqm9AzB9NROGkx53DMCs0rtTegfDkOif3KXHHcMvq/QAHHr3UhSltsxfU+pPpnRNVatKfFUlvqOnrjIffbxhVrplTzTeFY55XY4pVSVVJT4zk0XjiQEHonJshvFliO8rjCVsR15y9BdrS0XE7Uw+cvkDM2o681kjAACjYOiA5bBpNWV+RZGA1zVnUvmMmtKZtSUHVX9lPvp4w8y+jde2dHb2REt97hk1pZPKA6FofE1zZ98VGTaqGcaXITJWa5dnwYXHtXS6RaSqJPz4FfeV+jjgDAAYV4aeg2UYxprmfscVtvbVV9g6RaQl7nmrrbbvQ9F4clVTR9DrMi8x6AhFwrF+M6s2qhnGnSG+S+fLJYuOvOTo//7+HpcjOXdK66JLHzz4guPjSS2vdQIAYJmhj2DFk6n61q6+/3byfGg+9OS6Gfqgk7CxRLKpI2S2zBCbcmyGcWeI41ivfDzl9KsX6IYiIvtst+rmnz2RzwIBALBUrguNLqhZf36wfmbmlsBQhjiOdc8LMqOm83dnvigipxzw8bKGkkvv2COfNQIAYJGcAlaZI7pLeb2IpAzlqUYCFkZmiIx15d0ys7bjOwveF5FLTnllWUPJHc9snc8aAQCwQk4B6+DqZZpiiMgbrXVtcdcol4RxbIiM9f2/6FOrug7ecbmI/OOnT65uDjz/3tR81ggAwCbLaRWQ+bUDF3AHRmrgfKzk9scef/mRHyyrFBGHLfXAJQ/OndKazwIBANhk2QOWKsYhNcvN7SfWcX4Qm25gxura8qSFFx1X3+oTkVJf9LHf3l8RZIE0AEARyx6wdixbV+kMi0hD1PduR/Xol4SJYGDGWj3t9MMuPrYnaheRmbUdD1/2gMuRzGeBAABsguwBa0Ft7/WDT66bwdeGwjoDM9Y7we+ffMXhKV0Rkd23WnvreY/znSgAgCKVQ8CqWT8Bq4EJWLDWwIz1SOL8827az7x14r6f/vq0/+WtNAAANkGWgFXt6vla2ToRSejqM43Tx6IiTCwDM9afV/3uhkd2MG9d9I1XTzvoo7yVBgDASGUJWPNrlqliiMgrrZM7E84xKQkTzcCM9aM3bnjizd7LKf7+kyf32W5V3koDAGBEsgSsQ2uH/oJnwFL9MlZq2i4nPP7PD5ZVyfqFGzaf0pbX8gAA2DiZApZd1Q+sXmFuP8YELIyufhmru27vhffeYi7cUOaPPvab+1i4AQBQRDIFrD0q1gTtMRFZ3hP8pKtirErChNUvY60uW3jYf24wF26YVdfx0GWLnPZUXssDACBXmQLWhvODLOCOMdIvY73jPOXke39nLtzw9a3W3PpzFm4AABSHTAFrYe2X5gbnBzGG+mWsR6I/+/kT55rbJ+37yWWnsnADAKAIDBuwNvO3be5vE5FQ0vF8E1++i7HUL2P9ae2fbnj9WHP74m++esoBH+evMAAAcjJswDps/eGrZxqnR1O2saoHMPXLWD/68O4nPtvd3P7HT5/Yc5s1+SsMAIDshg1Yh0/qDViP1s8eq2KAvjZkrJShnfDqkx+smy0iTnvqwUsXza5rz3d5AAAMa+iAVe6I7F6+VkR0UZiAhfzZkLG6E/7Dnnt2XXe5iJQHIot/c3+pL5rv8gAAGNrQAWt+zTKboovI6y11TTHP2JYE9LUhY60KTT38v0+EEy4R2XxK2wOXPGi36fkuDwCAIQwdsI6c9IW58WgD5weRdxsy1lvNO536wp26oYrIvvNW3XjuU/muDQCAIQwRsDxa4pCaZeb2g2s3G9t6gCFtyFgPLD/mwreuMO/91iEfnH/C63ktDACAIQwRsA6uWe61JUTk486Kz7rLxrwkYEgbMtZV753/z8++Zd57xZkvHb3H53ktDACAgYYIWEdN6v24erCew1coKBsy1tn/u/H5+n1FRFWMf12weMfN1uW7NgAANhgYsOyqvrCu9xtyFq0hYKHQ9GashG4/5pkHPuvYXEQ8zsQjlz8wpbIr37UBANBrYMDav2pFqT0qIst7gu92VOejJCCz3ozVHis99MnHWqIVIlJbFnr0Nw/43PF81wYAgMjggHXS1E/NjfvXzB3zYoAc9Wasr7pmHfX0g7GUU0S2m9l0968e0VQj37UBANA/YLm0ZHqBhrtXb5GPeoAc9Wasl9ft8e2XbjZEEZFDd/nqD2c/l+/CAADoH7AOrf0qYIuJyGfdZe+0c34QBa43Y935xTcvf+di865zj1ry/cPfzW9ZAAD0C1gnTuk9P3jXqi3zUQywsXoz1qVLLr3ry5PMu679/n8P3nF5fssCAExwGwJWqT26sLb3+sG7OD+IomHIkkXG8iXfevGfrzbuLiI2Tb/34oe3nt6c78IAABPXhoD1jWmfuLSkiLzZVvs564uimBiyZFH0yw+PfOqh5d0zRCTgiT36mweqS3vyXRgAYILaELDOnPG+uXHL8m3zVAwwYoYsWdT86YqFTy7ujAdFZHp158O/XuRyJPNdGABgIuoNWNv41swraRKRUNJx12omYKEYGbJk0Sfv9Bz/33uTuk1Edplbf/svHlOUfNcFAJh4egPWSTVvmBv3rp7bnXDkrx5gUxiyZNHT/ys959XrzNvH77308tP/l9+aAAATkCoi5fbuI6veMW//Y/l2ea0H2ESGLFl042Nf+/OHPzZv/+rkV0898OO8lgQAmHBUETmx4iWnmhSRV1smvd5al++SgE1kyJJFP7vrxMWrFpq3//7Tp/faZk1+awIATCiqW4sfW/GyeePqz3fJbzWARQz9rYdOuuW891u3ExGnLb7oN4tn13XkuyoAwEShnlr1bNAWFpHPusserp+T73oAqxihV5887B+/aQjXiki5p3PxNU+W+mL5rgoAMCGop1X1fnfb75buZvA9uRhXjNXPvnL4rVeGkx4R2bxy5QN/+J/dxl4OABh1qkuNi8iHocl3rNw638UAljOWPPTpKXdfohuqiOw78+0bL18qwsoNGOfOqXv09e3O+/VWL+a7EGDiUkXEMJTLvzqMw1cYp4xFt7df+NT3zRvf2vGR838WImNhHNsluOz0qmcdauJHs5fkuxZg4lLjuv3WxgPe7p6e70qA0WNc9QffP5ccbt644uAbjj6tlIyFcUlTjEtnPawohog8VL9ZvssBJi511/evub5hYb7LAEabcfbFc59f9jURURX9XydetuORW5CxMP58Y+rHm3nWiUhPyvnLD/fNdznAxKVmbwKMC4mkcszP9vyseZqIeGzhR864YMr+XydjYTzRFOOiLV81t29v3L8h6stvPcBERsDCBNIeci4875DWcFBEaj0Nj37nIt/uh5CxMG4cN2XpHF+7iHSmvHe17JPvcoAJjYCFieXL+pKjL1oYSzpEZLvy9+868xp1pyPJWBgffjynd1b7f5r27kk581sMMMERsDDhvPTh5LP+eJC5vXDq4j+cdLfseDQZC8Vut/K1u5TVi0hMt93f8vV8lwNMdAQsTER3PLPVb/+zu7n9423+fPahb5OxUOzOnvWeufFw8/btSWZfAXlGwMIEdfFte9774lxz+7rdzzloz3YyFopXiSN23OSl5vadDbvltxgAQsDChGUYctrvD31jaZ2I2NTkvQccv+UOXjIWitTJUz9xa0kReae9+uPQpHyXA4CAhQksGrcd8X9Hr2gMikjQ0bn4kIWVW0wnY6EYnT7tQ3Pj5uXb5bcSACYCFia0xnbvYRcd0xV2isgM//KHDj7SNXsbMhaKy+b+tp3KGkQkmrLdtXrLfJcDQISABXy0ovL4y49IplQR2b361X/u/S1lxo5kLBSRb0772Nx4rGFWR5zVGYCCQMAC5KklM8694QBz+6TZd12646UyYycyForFSVM+MTfuXLVVfisBkEbAAkREbnhk+2sf3NHcvniHy785504yForCjqXrZvk6RKQj7ny8YWa+ywHQi4AF9PrZjfs99sYsEVHEuHmvb+9R8zIZC4Xv+Cm9qzM8VL9ZXNfyWwyANAIW0CulKyf+9vD3l1WJiFOLPXjQUbMC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", "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "size(800, 800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke_weight(3)\n", "\n", "stroke('#0099FF') # pale blue\n", "#line(100,100, 400,400)\n", "curve(0,0, 100,100, 400,400, 500,500)\n", "\n", "stroke('#FFFF00') # yellow\n", "curve(0,250, 100,100, 400,400, 500,250)\n", "\n", "stroke('#FF9900') # orange\n", "# control point 1:\n", "curve(0,250, 0,250, 100,100, 400,400)\n", "# control point 2:\n", "curve(100,100, 400,400, 500,250, 500,250)" ] }, { "cell_type": "markdown", "id": "545295e4", "metadata": {}, "source": [ "\n", "\n", "To understand what these extra curves are, it's important to understand what a *spline* actually is. This image from the Wikipedia article on [flat splines](https://en.wikipedia.org/wiki/Flat_spline) shows a version from long before digital visualization:\n", "\n", "\n", "\n", "In this spline, a length of material is bent around two nails. When we use the py5 `curve()` function, the first and last set of arguments are us placing the ends of the material, even if we only see the section between the two nails. You can add a few small ellipses at the locations of our yellow curve's control points to make this even clearer." ] }, { "cell_type": "code", "execution_count": null, "id": "04fbdde1", "metadata": {}, "outputs": [], "source": [ "size(800, 800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke_weight(3)\n", "\n", "stroke('#0099FF') # pale blue\n", "#line(100,100, 400,400)\n", "curve(0,0, 100,100, 400,400, 500,500)\n", "\n", "stroke('#FFFF00') # yellow\n", "curve(0,250, 100,100, 400,400, 500,250)\n", "\n", "stroke('#FF9900') # orange\n", "# control point 1:\n", "curve(0,250, 0,250, 100,100, 400,400)\n", "# control point 2:\n", "curve(100,100, 400,400, 500,250, 500,250)\n", "\n", "stroke('#11CC88') # mint green\n", "# ellipses at the control points for our yellow curve! \n", "ellipse(0, 250, 20, 20)\n", "ellipse(500, 250, 20, 20)" ] }, { "cell_type": "markdown", "id": "0de95df4", "metadata": {}, "source": [ "\n", "\n", "Although we're working with digital lines here instead of a real material, there is a neat function called `curve_tightness()` that allows us to manipulate the elasticity of our curves. To experiment with this, we should add it directly above our first `stroke()` function, so that all subsequent curves are affected. `curve_tightness()` takes just one argument: a number that can be as low as -5 and as high as 5, or anywhere in-between. The default behavior is `curve_tightness(0)`. \n", "\n", "\n", "\n", "## using Bézier curves\n", "\n", "Bézier curves use a series of anchors, with their own control points, to shape a curve. They're common in vector drawing programs like Adobe Illustrator and Inkscape (pictured below), where they're usually referred to as \"paths.\" If you don't know much about vector graphics, they're able to be rescaled infinitely without losing quality, and each point in their shape is calculated mathematically. Vectors hugely rely on Bézier curves for all sorts of curved shapes! \n", "\n", "\n", "\n", "The `bezier()` function takes quite a few arguments, which you can spread over multiple lines to understand them a little better:\n", "\n", "```\n", "bezier(vertex_point_1_x, vertex_point_1_y,\n", " control_point_1_x, control_point_1_y,\n", " control_point_2_x, control_point_2_y,\n", " vertex_point_2_x, vertex_point_2_y)\n", "```\n", "\n", "As we add a Bézier curve to our grid, we'll also be using some variables to store the data for our control points. This will make it a bit easier to edit them on the fly without having to mess with that enormous function! (I've also gone ahead and taken out our previous splines.)" ] }, { "cell_type": "code", "execution_count": 3, "id": "d8190f58", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "size(800, 800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke_weight(3)\n", "\n", "stroke('#FF99FF') # pink\n", "cp1x = 250\n", "cp1y = 250\n", "cp2x = 250\n", "cp2y = 250\n", "bezier(400,100, cp1x,cp1y, cp2x,cp2y, 100,400)" ] }, { "cell_type": "markdown", "id": "40d805a2", "metadata": {}, "source": [ "\n", "\n", "Since we're using variables here, if you'd like to be able to visualize your control points while we start to adjust them, it's very easy to do that with a few more lines. In fact, let's go a step farther and also connect the first point of our Bézier curve to the first control point." ] }, { "cell_type": "code", "execution_count": 4, "id": "5c9d9a46", "metadata": {}, "outputs": [ { "data": { "image/png": "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y/KN5Wa7UY2j6PZae6VV7/YHp06ymXLYPNpabf3we/fe3lpt1CrFFL2xubzSqmdZfupl/slhJ8/DvY3lSprEUfS5O2u1SvrksHPqCW6B5+rjx/u/8a0Ho//77fcfhhD2jk5+41sPTk3ClHM15bB59N69jbe3VovnljiKils4NmqVo5NecRyr0BsMj0561TR5e2s1jqJKmrx1ayXPw6nb0k45bE4ddnpHJ71GrVI8ujiK3t5arVXSk15/fE8wV+M2V1pJHD254JXdi+DLiH7kz/yVEMLe0cm3Hpy+5fFau/H21uroDzJkWf54/+js+Tfz6PZa+43Np3fxL06qLXLh8d7RB8/f83A0CcWA4TA7dxKmHDZ31tqNd++sFR+fKqqzf8Dxjc3lzeVWcY1b8cc9Pni0e/Yv8U05bO60G9XP390YnVEUnj26+9v7Z294+F1vbLbq1WJknue9wfDrHz0++wc9FnWuxv3Q5+8mSVwswyzLv/b+w1NvK0w5V1MOmzufv7u+3KwX98EqvpJleX84/Ob97ZPec28WV9Lke97crKRJMTLL8qOT3u9+fPqG3VMOm1P1avrevY3RoytWzTfub5+6U4O5Gvk9b92qVyu//f7Di34bueEvglfw+bvrK616mPzHnovn8a1nf7vxwXmvE3OqeDPi+a99llnjikm4vdauPvsDluf++jLlsLlTSZOxK2+fuyCkPzj95vrHj/e7/WFx+5lef3B/e//cOxRMOWzuHHZ6v/PBo63V1sby05sXHxx3t/ePzn1037y//eatldFfJv7o8d65KbCoczVukD13bffZyyennKsph82dbz3Y2VxpbS43q89OMtveP7q/fXD2z+j2B8Nv3N++u/7cXyY++w2nHDanTnqD8UdXrMGzf/bbXBWqaVI9c4TvlBv+IvgyJh3BAgBgeqMjWDf3DmAAAK+IwAIAKJnAAgAomcACACjZpKsIGVdNk0qahBD6g+EC3FznlSpuBBVCOHvxDuOSOK5X0xBCluenbj/NKRbg9EYL8KQ3WNR72ZfCApyeBXgFAmtaK636W1urIYTvfPJkAe70+Eq9ublSXNX8a7/78XVvy0zL8vx73roVQtg97LiMd7J2o1bcks0CvNTd9aXidhW//o37170tM220AA+Ouwt2d6vSjRbgh492F+aGTa+awHoBZ288w7nyPDdX04ijyERNz1xNr5irOIqGJu1iowVo15qGWXpRzsECACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKJnAAgAomcACACiZwAIAKFl6yT8ncRRFaRJnWd7tDy4alsRxJY2jKAoh9AfDwTB7mWEAAHPtwsCKoqhRTe+sL8VRtLbUODju/osPPz13ZBLHt9faW6vtaiUJIXyyc/Bg56A/GF5tGADAvLswsOIo+vzd9WGWZ3k+GGb5xd/i9lr73sbySa/f6fXjKLq10qqmyTcf7OR5foVhAADz7sLAGmbZb33nYfHxj7x376Jh1TS5vdbuDYbvP9o9OO6mSfxdb2wut+pLjer+cfdFhwEALIDLT3JP4kljVtuNEML2/tHBcTeEMBhmn+wc5Hm+udK6wjAAgAXwslcRNmuVEMKTg87oKwedbp4//fqLDgMAWACXXEV4qXo1DSH0x64HHAyzwXAYx3EURaPzq6YcFkfRUrP2kpv0ijSetWCjlq5k9evdmBmXJk/DfaVloiaJo6j4IE1iczXZUjX9P776/33Pr/3dX/3il//1W5+77s2ZaaMFuNysZU5yvZgFOL1GLX32QcVcTTZagC8bWIXs+ZPgh1leSaMkjgbD/IWG1avp5++ul7JJr87Wantr9bo3Yk7M/k9zRrTqVXM1QZqHn/3KL73zqz8XQvjir/2dz//Hf+G6t2g+vHtn7bo3YT40ahULcEoby82N5eZ1b8V8eNnAiuMohPDs14Cnoijk+XM5NeWwPISJFyxep+jZo8j8SniZOCpudja7P83ZkcRRCCHPg93qImkefvbXf7moqxDC13/kj9uvJrMAp2cBTskr4PRGC/BlA6s/yGqV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LACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJIJLACAkgksAICSCSwAgJKl0wyqVdJaJYmiKITQHwyPu/3T3yWJ69U0ieMQwnG33x8Mz/8fm24YAMBcuySwkjheatY2l5trS404ikII2/vH37i/PT6mkiZ315c2V1qVJA4hPNo9erCzf9IbnPpWUw4DAJh3kwIrjqI76+2768vDLDs47vYGwxDC/nH31LA7a+2t1fbRSW+3P0jieH2pUUnjb3y8neX5FYYBAMy7SYG1udK6u77c6fUf7x3tHZ2ce7SpXk03V1rd/uD9h0+Ou/04ir7rzc2lRm25Vd897LzoMACABXDhSe5pEt9ea/cGww8f7T58cnjRe3mr7UYI4fHeUXFiVpbnn+wcZHm+sdy8wrC5kDvkRklG+5J96lJjc2WyLjGaIXM1mfmZnrma3miqLjyCtb7UrKTJzv7xSW+w0qqHEHqDYefM6e2NaiWEsHt0MvrKwXE3y/JGNb3CsCiKqmkymz/INHkao5U0qabJ9W7MjIvjqPjARE2WPNup4jgyV5NVns2PBXip0QKsVdPhMLvejZllFuD0RgswTWJzNdloAV4YWM1aJc/zbn/w3hsbS41aCGH/uHt/e39vLJJCCLVKEkIYjK3hLM+HWRbHcRRFo1Saclglid+8tVLKIyzdaJdaX2osNWvXuzEzrlZ5ul+9tbV6rRsyNxrV1FxNVnn2WmgBXmr0i+u9jeXr3ZJ5UatYgJcYLcDVdqNZ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", "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "size(800, 800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke_weight(3)\n", "\n", "stroke('#FF99FF') # pink\n", "cp1x = 250\n", "cp1y = 250\n", "cp2x = 250\n", "cp2y = 250\n", "bezier(400,100, cp1x,cp1y, cp2x,cp2y, 100,400)\n", "\n", "stroke('#11CC88') # mint green\n", "# ellipses at the control points for our Bézier curve! \n", "ellipse(cp1x, cp1y, 20, 20)\n", "ellipse(cp2x, cp2y, 20, 20)\n", "\n", "stroke('#FF0000') # red\n", "# line connecting a control point to the first vertex of the curve!\n", "line(400,100, cp1x,cp1y)" ] }, { "cell_type": "markdown", "id": "586271c4", "metadata": {}, "source": [ "\n", "\n", "Now, by going back and changing those variables, we will change them every time they appear. Let's pull up our first control point slightly by changing the `cp1y` variable to 150:\n", "\n", "```\n", "cp1y = 150\n", "```" ] }, { "cell_type": "code", "execution_count": null, "id": "fe99bbfc", "metadata": {}, "outputs": [], "source": [ "size(800, 800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke_weight(3)\n", "\n", "stroke('#FF99FF') # pink\n", "cp1x = 250\n", "cp1y = 150 # pulled up slightly...\n", "cp2x = 250\n", "cp2y = 250\n", "bezier(400,100, cp1x,cp1y, cp2x,cp2y, 100,400)\n", "\n", "stroke('#11CC88') # mint green\n", "# ellipses at the control points for our Bézier curve! \n", "ellipse(cp1x, cp1y, 20, 20)\n", "ellipse(cp2x, cp2y, 20, 20)\n", "\n", "stroke('#FF0000') # red\n", "# line connecting a control point to the first vertex of the curve!\n", "line(400,100, cp1x,cp1y)" ] }, { "cell_type": "markdown", "id": "8e16ef6b", "metadata": {}, "source": [ "\n", "\n", "It's really easy to see the change this way - pulling that control point upwards has also pulled up the top of the Bézier curve! Let's add another line below our last one, to connect the other end of the curve to the second control point.\n", "\n", "```\n", "line(100,400, cp2x,cp2y)\n", "```\n", "\n", "And while we're here, let's also scroll back up and change that second control point's position a bit. \n", "\n", "```\n", "cp2x = 300\n", "cp2y = 350\n", "```" ] }, { "cell_type": "code", "execution_count": 5, "id": "9a8d69b6", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "size(800, 800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke_weight(3)\n", "\n", "stroke('#FF99FF') # pink\n", "cp1x = 250\n", "cp1y = 150 # pulled up slightly...\n", "cp2x = 300\n", "cp2y = 350\n", "bezier(400,100, cp1x,cp1y, cp2x,cp2y, 100,400)\n", "\n", "stroke('#11CC88') # mint green\n", "# ellipses at the control points for our Bézier curve! \n", "ellipse(cp1x, cp1y, 20, 20)\n", "ellipse(cp2x, cp2y, 20, 20)\n", "\n", "stroke('#FF0000') # red\n", "# line connecting a control point to the first vertex of the curve!\n", "line(400,100, cp1x,cp1y)\n", "line(100,400, cp2x,cp2y)" ] }, { "cell_type": "markdown", "id": "aed65272", "metadata": {}, "source": [ "\n", "\n", "Learning exactly how to pull these control points and curves around can take practice, and there's a few different ways to do it outside of py5 if you like. \n", "\n", "Here's an interactive challenge called the Bézier Game: [bezier.method.ac/](http://bezier.method.ac/)\n", "\n", "For advanced playing around, you can also get a vector drawing program like [Inkscape](https://inkscape.org/) (which is free), Adobe Illustrator, etc. Using the path tool in one of these to create a curve can leave you feeling much more confident about where your control points will have to be placed in py5. In fact, that's how the upcoming challenges were devised!\n", "\n", "## vertices \n", "\n", "We've been calling these *points* throughout the rest of the tutorial, but it's worth being specific: a vertex (plural: vertices) is a single point in a shape. Triangles have three vertices, a pentagon has five, and very complex shapes can have dozens of them. Three-dimensional shapes can also be constructed of vertices - for example, you can clearly see the vertices below in Blender's de-facto mascot Suzanne (a monkey head).\n", "\n", "\n", "\n", "We'll be using the same grid image as our background while we experiment with vertices, so either keep it in the same folder or go ahead and call it by its entire URL.\n", "\n", "There are two shape functions we'll be introducing here that are a bit unfamiliar, `begin_shape()` and `end_shape()`. You can think of using `begin_shape()` as being like hitting play on a recorder, and `end_shape()` is when you hit stop. Between those functions, we use the `vertex()` function to draw our individual points. `end_shape()` can also take optional arguments - for example, by using CLOSE, we can make sure it automatically closes the shape off once we're done." ] }, { "cell_type": "code", "execution_count": 6, "id": "38c08d03", "metadata": {}, "outputs": [ { "data": { "image/png": "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AFhprscKABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQmYAFABCZgAUAEJmABQAQ2fuAlefFw27H8suL4toN+IlmeV7eMID3MoD1VbtTtYNxK/2pzwDWVw1go/y/brv5fHvt4bZnBfQ6rfLG9lq322o87MYsuVYzK2/YqRZLkqS8YQDv1W03yxsG8F5Vr17srBfeDu9WDWCrmRnAxaqdanPQbTWyh92YJVf1Kvk3//Z/DyEUhVh6jySENE1CCLlO3SdN3r9wzRyYuU+WJsEA1mAA6zOA9RnAmgxgfdUAvv8gmCQh+5DlWazcyagj06t6DGB9BrA+A1iTAazPANb3/wO4DSveMGSCawAAAABJRU5ErkJggg==", "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "size(800,800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke('#FFFFFF')\n", "stroke_weight(3)\n", "\n", "begin_shape()\n", "vertex(100,100)\n", "vertex(200,100)\n", "vertex(200,200)\n", "vertex(100,200)\n", "end_shape(CLOSE)" ] }, { "cell_type": "markdown", "id": "065a0fe6", "metadata": {}, "source": [ "\n", "\n", "Of course, you don't have to close off the shape. You can combine an open shape with a `fill()` for an interesting look:" ] }, { "cell_type": "code", "execution_count": 7, "id": "6557f6d2", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "size(800,800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke('#FFFFFF')\n", "stroke_weight(3)\n", "\n", "fill('#6633FF')\n", "begin_shape()\n", "vertex(100,100)\n", "vertex(200,100)\n", "vertex(200,200)\n", "vertex(100,200)\n", "end_shape()" ] }, { "cell_type": "markdown", "id": "df285a6d", "metadata": {}, "source": [ "\n", "\n", "There are optional arguments for `begin_shape()` too, which you can provide to change how the lines are connected (if at all!) Below is an example of `begin_shape(POINTS)` and `begin_shape(LINES)`. \n", "\n", "\n", "\n", "*Reference: [begin_shape()](/reference/sketch_begin_shape)*\n", "\n", "## Bézier vertices\n", "\n", "Both Bézier curves and Catmull-Rom splines have vertex equivalents, `bezier_vertex()` and `curve_vertex()`. We'll be focusing on the Bézier vertex equivalent, since it gives us a greater amount of control over the resulting curves. `bezier_vertex()` takes quite a few arguments, spread out for better readability below: \n", "\n", "```\n", "bezierVertex(control_point_1_x, control_point_1_y,\n", " control_point_2_x, control_point_2_y,\n", " vertex_point_2_x, vertex_point_2_y)\n", "```\n", "\n", "We'll be using image reference for the following shapes. It may be helpful to keep this image up or save a copy to quickly reference. The light blue lines and circles represent our control points, and their connections to our Bézier vertices, so that we don't have to draw them ourselves. \n", "\n", "\n", "\n", "## S-Bend\n", "\n", "The S-Bend (in the center of the image) has only two vertices. It could be drawn with a `bezier()` function, but learning to do the same thing with shapes is worth practicing, as it'll help with building more complex curved shapes later. We'll start by creating a new shape with a single vertex, and then add onto it. It's only a single point, so it won't look like much of anything." ] }, { "cell_type": "code", "execution_count": null, "id": "5341aa3f", "metadata": {}, "outputs": [], "source": [ "size(800,800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke('#FFFFFF')\n", "stroke_weight(3)\n", "\n", "begin_shape()\n", "vertex(400,200) # starting (upper) vertex\n", "end_shape()" ] }, { "cell_type": "markdown", "id": "daa64ffe", "metadata": {}, "source": [ "Next, we'll be adding our second vertex - and this one will be a `bezier_vertex()`, so in addition to its actual location, we'll be defining those control points. Note that the first set of arguments in `bezier_vertex()` is actually positioning the control point for the regular `vertex()` right before it!" ] }, { "cell_type": "code", "execution_count": null, "id": "cdd32462", "metadata": {}, "outputs": [], "source": [ "size(800,800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke('#FFFFFF')\n", "stroke_weight(3)\n", "\n", "begin_shape()\n", "vertex(400,200) # starting (upper) vertex\n", "bezier_vertex(\n", " 300,300, # control point for the starting vertex\n", " 500,500, # control point for the second (lower) vertex\n", " 400,600 # second (lower) vertex coordinates\n", ")\n", "end_shape()" ] }, { "cell_type": "markdown", "id": "4cd13c1a", "metadata": {}, "source": [ "\n", "\n", "If you go back and take a peek at that reference image, you can easily match the position of those light blue handles to the X and Y position of the control points in your actual code. \n", "\n", "## heart\n", "\n", "We'll create half of the heart shape first, just the same as we did the S-bend, with a `vertex()` and a `bezier_vertex()`." ] }, { "cell_type": "code", "execution_count": null, "id": "27053037", "metadata": {}, "outputs": [], "source": [ "size(800,800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke('#FFFFFF')\n", "stroke_weight(3)\n", "\n", "begin_shape()\n", "vertex(600,400)\n", "bezier_vertex(420,300, 550,150, 600,250)\n", "end_shape()" ] }, { "cell_type": "markdown", "id": "bf4c1399", "metadata": {}, "source": [ "\n", "\n", "Making the second half of the heart will be simple: you know that to close the shape, it will have to end where it began. Thus, the final `bezier_vertex()` will have to share its coordinates with the opening `vertex()`. To figure out what goes in the gaps, consult the reference image again, and take a look at the position of the light blue handles and control points." ] }, { "cell_type": "code", "execution_count": null, "id": "dc36c8b4", "metadata": {}, "outputs": [], "source": [ "size(800,800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke('#FFFFFF')\n", "stroke_weight(3)\n", "\n", "begin_shape()\n", "vertex(600,400)\n", "bezier_vertex(420,300, 550,150, 600,250)\n", "bezier_vertex(___,___, ___,___, 600,400) # What goes here?\n", "end_shape()" ] }, { "cell_type": "markdown", "id": "a9ced65b", "metadata": {}, "source": [ "## Chinese coin\n", "\n", "This shape (filled in with violet in the reference image) is based on a metal coin with a square hole in it, first introduced in China many centuries ago. To make it, we'll not only be using `begin_shape()` and `end_shape()` to create the filled in areas, but new functions called `begin_contour()` and `end_contour()` to cut out the square hole. \n", "\n", "Usually, we might draw a circle with the `ellipse()` function, but since we're required to use the shape functions here (so that we can cut a hole out of it) we'll have to make it out of `vertex()` and `bezier_vertex()` functions. To start with, we can build a diamond out of a few vertices:" ] }, { "cell_type": "code", "execution_count": null, "id": "17c56f5a", "metadata": {}, "outputs": [], "source": [ "size(800,800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke('#FFFFFF')\n", "stroke_weight(3)\n", "\n", "begin_shape()\n", "vertex(100,600)\n", "vertex(200,500)\n", "vertex(300,600)\n", "vertex(200,700)\n", "vertex(100,600)\n", "end_shape()" ] }, { "cell_type": "markdown", "id": "70ca53be", "metadata": {}, "source": [ "\n", "\n", "Now, it's just a matter of converting all of those vertices (aside from the first one - shapes always begin with a regular `vertex()` function) into Bézier vertices." ] }, { "cell_type": "code", "execution_count": null, "id": "5fd1bf22", "metadata": {}, "outputs": [], "source": [ "size(800,800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke('#FFFFFF')\n", "stroke_weight(3)\n", "\n", "begin_shape()\n", "vertex(100,600)\n", "bezier_vertex(___,___, ___,___, 200,500)\n", "bezier_vertex(___,___, ___,___, 300,600)\n", "bezier_vertex(___,___, ___,___, 200,700)\n", "bezier_vertex(___,___, ___,___, 100,600)\n", "end_shape()" ] }, { "cell_type": "markdown", "id": "b1062c6e", "metadata": {}, "source": [ "This time, you won't be forced to figure this out yourself, but for the curious, here's a circular path from Inkscape that might make things clearer:\n", "\n", "\n", "\n", "For now, you can put in these values and watch your diamond turn into a perfect circle:" ] }, { "cell_type": "code", "execution_count": null, "id": "4ffa1175", "metadata": {}, "outputs": [], "source": [ "size(800,800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke('#FFFFFF')\n", "stroke_weight(3)\n", "\n", "begin_shape()\n", "vertex(100,600)\n", "bezier_vertex(100,545, 145,500, 200,500)\n", "bezier_vertex(255,500, 300,545, 300,600)\n", "bezier_vertex(300,655, 255,700, 200,700)\n", "bezier_vertex(145,700, 100,655, 100,600)\n", "end_shape()" ] }, { "cell_type": "markdown", "id": "9cdd337e", "metadata": {}, "source": [ "\n", "\n", "Addding in our *contour* to cut the square hole from the middle of the coin is relatively straightforward, and the syntax will all look familiar - it's really similar to how we use `begin_shape()` and `end_shape()`. One thing you need to keep in mind is that, if you've drawn your shape's vertices clockwise, the contour *must* be drawn counter-clockwise, and vice versa. Whatever way the shape itself is \"winding\", cutting a hole in it must \"wind\" in the opposite direction to show up! \n", "\n", "We'll now add the `begin_contour()` and `end_contour()` functions to our coin, and the vertices for a square inside of them. However, you won't be able to fully appreciate that this isn't simply another shape unless you also add a fill colour before the circle begins." ] }, { "cell_type": "code", "execution_count": null, "id": "ad86d7dd", "metadata": {}, "outputs": [], "source": [ "size(800,800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "image(grid, 0, 0)\n", "no_fill()\n", "stroke('#FFFFFF')\n", "stroke_weight(3)\n", "\n", "fill('#6633FF')\n", "begin_shape()\n", "vertex(100,600)\n", "bezier_vertex(100,545, 145,500, 200,500)\n", "bezier_vertex(255,500, 300,545, 300,600)\n", "bezier_vertex(300,655, 255,700, 200,700)\n", "bezier_vertex(145,700, 100,655, 100,600)\n", "begin_contour()\n", "vertex(180,580)\n", "vertex(180,620)\n", "vertex(220,620)\n", "vertex(220,580)\n", "end_contour()\n", "end_shape()" ] }, { "cell_type": "markdown", "id": "ea7bbf5a", "metadata": {}, "source": [ "\n", "\n", "## Bézier task\n", "\n", "Time for another challenge!\n", "\n", "In addition to the grid.png image we're using to assist with drawing coordinates, you'll need this beziers.png image to layer over it as a reference. Either make sure that both images are in the right place on your local computer (in the same folder as the sketch, or in a folder called DATA beside the sketch) or reference them using their complete URLs. \n", "\n", "Here is the code you'll be using to set things up." ] }, { "cell_type": "code", "execution_count": 8, "id": "e9d0a818", "metadata": {}, "outputs": [ { "data": { "image/png": "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fg0Wb0uXYyGceVnTaIiISNeYYBHlwObG9qfUwzMvIxrULhoiItI7JlhEUxFE7HwaJlv6sPMSWk9rGhAREekdEyyiqaz7ACoWpcthL469qGk0RERUBJhgEU1KNGDVvemyIuPwzxALaRoQEREVASZYRJNSZMTD6fL5P6H/lqbREBFRcTBoHQCRviky3vlXLN0Bbxeaj2odDRERFQcmWERTGerEqd9pHQQRERUTXiIkIiIiyjMmWERERER5xgSLiIiIKM+YYBERERHlGRMsIiIiojxjgkVERESUZ0ywiIiIiPKMCRYRERFRnjHBIiIiIsozJlhEREREecYEi4iIiCjPmGARERER5RkTLCIiIqI8Y4JFRERElGdMsIiIiIjyjAkWERERUZ4xwSIiIiLKMyZYRERERHnGBIuIiIgoz5hgEREREeUZEywiIiKiPGOCRURERJRnTLCIiIiI8owJFhEREVGeMcEiIiIiyjMmWERERER5xgSLiIiIKM+YYBERERHlGRMsIiIiojxjgkVERESUZ0ywiIiIiPKMCRYRERFRnjHBIiIiIsozJlhEREREecYEi4iIiCjPmGARERER5RkTLCIiIqI8Y4JFRERElGdMsIiIiIjyjAkWERERUZ4xwSIiIiLKMyZYRERERHnGBIuIiIgoz5hgEREREeUZEywiIiKiPGOCRURERJRnTLCIiIiI8owJFhEREVGeMcEiIiIiyjMmWERERER5xgSLiIiIKM+YYBERERHlGRMsIiIiojxjgkVERESUZ0ywiIiIiPKMCRYRERFRnjHBIiIiIsozJlhEREREecYEi4iIiCjPDFoHQERERLnx1KF+HRIRtJ5GNKh1NDQZJlhERETFoHYl7vo8RAkAVt6Lt76FsE/rmGhCvERIRERUDNbsS2dXAKwuLN2haTQ0BSZYRERExcBsH3FosmkUB+WECRYREVEx6Lg48rBJozgoJzmNwbKZjUvqypNJ+Wpbn6woYyu47ZZqj8NklAB09vsH/KFxHyfHakRERDTahdchGrB4KyQjTv0e3de1Dogmk1MPVn2Fy2w0WM1Gs2mchMxttyyqKXPazFaT0WoyNla568qdM65GRERE45CTOPMyXv8GFAUtJ7SOhqYwdYJV4bI5beZAOApAGHt/QWiodBkksaPfd7a582pbrwBUexxmo2EG1YiIiGgyoSHIMuxl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", "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "size(800,800)\n", "grid = load_image('images/complex_shapes/grid.png')\n", "beziers = load_image('images/complex_shapes/beziers.png')\n", "image(grid, 0, 0)\n", "image(beziers, 0, 0)\n", "no_fill()\n", "stroke('#FFFFFF')\n", "stroke_weight(3)" ] }, { "cell_type": "markdown", "id": "00b995a5", "metadata": {}, "source": [ "Placed one after the other, with the \"top\" image second, it should look like this:\n", "\n", "\n", "\n", "Your goal is simple: recreate each of these shapes using a `begin_shape()` and `end_shape()` function, with a `vertex()` and at least one `bezier_vertex()` inside them. Remember that the handles and control points are already placed for you in these examples, and don't worry about perfectly matching the reference - this is just a way to get used to the weirdness of creating bezier curves out of vertices. \n", "\n", "## Apple Logo task \n", "\n", "You've almost made it - here's a final challenge!\n", "\n", "We'll be recreating an older version of the Apple logo, back when it was quite colorful. This logo was retired in 1999 when Apple began to put forth a sleeker image. \n", "\n", "Why does the Apple logo have a bite out of it? Well, there's a rumour that it could be connected to Alan Turing – a man who is widely considered to be the father of theoretical computer science and artificial intelligence. Among his many accomplishments, Turing managed to crack the Enigma cypher used to encrypt Nazi communications during World War II. Despite this, when he was outed as gay in 1952, Britain gave him two choices: be chemically castrated via forced hormone treatment, or go to prison. Two years later, he was found dead by cyanide poisoning with a bitten apple nearby; it's unclear if he was deliberately re-enacting the scene from Walt Disney's \"*Snow White and the Seven Dwarfs*\", his favorite fairy tale, or had poisoned himself accidentally with electroplating equipment. \n", "\n", "Either way, the bitten apple's symbology remains compelling. \n", "\n", "\n", "\n", "*The Apple Computer rainbow colour logo, in use from 1977–1999.* \n", "\n", "*Rob Janoff [Public domain], via [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Apple_Computer_Logo_rainbow.svg)*\n", "\n", "In addition to our grid.png image, you'll want to layer our apple.png over it, so either keep them in the same folder or go ahead and call them by their entire URLs. Use this code to get started:" ] }, { "cell_type": "code", "execution_count": null, "id": "78326bf9", "metadata": {}, "outputs": [], "source": [ "size(800,850)\n", "background('#004477')\n", "\n", "grid = load_image('images/complex_shapes/grid.png')\n", "logo = load_image('images/complex_shapes/apple.png')\n", "\n", "image(grid, 0, 0)\n", "image(logo, 0, 0)" ] }, { "cell_type": "markdown", "id": "d1bd14c5", "metadata": {}, "source": [ "\n", "\n", "How are you going to create this apple? Well, a lot of Bézier vertices will be involved. Here's an in-progress image that might help you out by showing off the positions of some of those handles: \n", "\n", "\n", "\n", "There's another important detail here - those coloured stripes. Your instinct will likely be to make the shape of an apple, and then fill it in with color... but how? Just like how we use `fill()` to color something in before we've created it, consider creating your colored bands beforehand. If you first create a series of colored bands filling your sketch, and then cover it with a white square shape, you can then use *contours* to cut out the shape of an apple. Remember that your shape and your contour have to wind in opposite directions.\n", "\n", "One last hint: don't overthink the complexities of this shape. You can create the leaf afterwards with another shape function, and you can even create the 'bite' out of the apple last by covering it with a well-placed `ellipse()`! \n", "\n", "If you've found these exercises tedious at times, don't fret. They are intended to get you comfortable with producing visual output in py5, but as you can see, importing images into your sketches is a perfectly viable way to accomplish your goals as well. Combining py5 shapes and outside art assets in any ratio you like is a great way to play to your strengths." ] } ], "metadata": { "jupytext": { "formats": "ipynb,md:myst" }, "kernelspec": { "display_name": "py5bot", "language": "python", "name": "py5bot" }, "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.10.5" } }, "nbformat": 4, "nbformat_minor": 5 }