{"id":669,"date":"2024-12-24T19:04:33","date_gmt":"2024-12-24T19:04:33","guid":{"rendered":"https:\/\/tangowithbear.blog\/?p=669"},"modified":"2024-12-25T11:56:43","modified_gmt":"2024-12-25T11:56:43","slug":"%e2%9d%85-christmas-edition-%e2%9d%85-2024-%e2%9d%85","status":"publish","type":"post","link":"https:\/\/tangowithbear.blog\/?p=669","title":{"rendered":"\u2745 CHRISTMAS EDITION \u2745 2024 \u2745"},"content":{"rendered":"\n<h1 class=\"wp-block-heading has-text-align-left\" id=\"simplified-generator-of-maple-leaves\">Phyllotaxis Packing on Surfaces of Revolution <\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Tools:<\/strong> Rhinoceros, Grasshopper, Python<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There\u2019s something magical about stepping back in time, especially during the holiday season. This year, why not add a touch of nostalgia to your Christmas tree by creating your own vintage-inspired toys ?<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u2745&nbsp; \u2745&nbsp; \u2745<\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\">When I think of my childhood Christmas tree, a few unique ornaments stand out in my memory\u2014ones shaped like corn, fruits, or pinecones.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.instagram.com\/p\/DC1vALOP0yD\/?img_index=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"605\" height=\"658\" data-id=\"688\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/image-2.jpg?resize=605%2C658&#038;ssl=1\" alt=\"https:\/\/www.instagram.com\/oldstufficollect\/\" class=\"wp-image-688\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/image-2.jpg?w=605&amp;ssl=1 605w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/image-2.jpg?resize=276%2C300&amp;ssl=1 276w\" sizes=\"auto, (max-width: 605px) 100vw, 605px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\" id=\"https:\/\/www.instagram.com\/oldstufficollect\/\"><a href=\"https:\/\/www.instagram.com\/p\/CWf_9pkJome\/\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"659\" data-id=\"689\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/image-3.jpg?resize=600%2C659&#038;ssl=1\" alt=\"\" class=\"wp-image-689\" title=\"https:\/\/www.instagram.com\/oldstufficollect\/\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/image-3.jpg?w=600&amp;ssl=1 600w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/image-3.jpg?resize=273%2C300&amp;ssl=1 273w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In this special edition, we\u2019re revisiting those organic designs by recreating them using simple mathematical formulas that mimic the natural patterns found in plants, known as phyllotaxis. For instance, in pinecones, corn, and pineapples, the seeds or kernels are often arranged in spiral formations that follow distinct Fibonacci sequences. Plants &#8220;came up with&#8221; the this strategy as a result of millions of years of evolution and natural selection. If you\u2019re curious about the math behind these patterns, check out my earlier post on <a href=\"https:\/\/tangowithbear.blog\/?p=338\" data-type=\"link\" data-id=\"https:\/\/tangowithbear.blog\/?p=338\">phyllotaxis<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This time, we\u2019ll use the same principles to craft decorations with a unique twist: we want these patterns to wrap around any surface of revolution.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"347\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/000-1.jpg?resize=700%2C347&#038;ssl=1\" alt=\"\" class=\"wp-image-684\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/000-1.jpg?resize=1024%2C507&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/000-1.jpg?resize=300%2C149&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/000-1.jpg?resize=768%2C380&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/000-1.jpg?w=1508&amp;ssl=1 1508w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/000-1.jpg?w=1400&amp;ssl=1 1400w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">There are several ways to achieve this goal. Before, we used trigonometry to create polar coordinates for a flat model and cylindrical coordinates to add height. The number of points was set as an input, and we enlarged the surface area by increasing this number. This time, we\u2019ll take a different approach: <a href=\"https:\/\/en.wikipedia.org\/wiki\/Numerical_integration\">integration<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I stumbled upon this approach in a <a href=\"https:\/\/www.youtube.com\/watch?v=yGwhnt7mZ50&amp;ab_channel=Entagma\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=yGwhnt7mZ50&amp;ab_channel=Entagma\">video by Entagma<\/a>, which itself references the formula from the paper \u201c<a href=\"https:\/\/algorithmicbotany.org\/papers\/sigcourse.2003\/2-27-positional.pdf\" data-type=\"link\" data-id=\"https:\/\/algorithmicbotany.org\/papers\/sigcourse.2003\/2-27-positional.pdf\">The Use of Positional Information in the Modeling of Plants<\/a>.\u201d The video demonstrates how to generate phyllotactic patterns on surfaces of revolution using Houdini with VEX code. We&#8217;ll adapt this code with couple of changes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"\"> We rewrite th code for Grasshopper in python.<\/li>\n\n\n\n<li class=\"\">We\u2019ll introduce a feature to adjust the size of the \u201corgans\u201d.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">This method determines the precise position of each successive organ on the revolved surface. For a detailed explanation, please refer to the paper or the video, but here&#8217;s a brief summary:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First, we need a curve that, when rotated around an axis, generates a surface of revolution. We also define the size of the organs we want to place. Starting at the initial point of the curve, t=0, we move step by step toward the end point, t=1. The distance we travel along the curve is denoted as S, and each step corresponds to an increment, \u0394S. As S increases, whenever it grows enough to accommodate an organ, we place one, rotate by a fixed angle, and then move forward.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As a result, the pattern will cover the entire surface. The number of points is an output primarily determined by the &#8216;size&#8217; of the organ and the total area of the surface.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"561\" height=\"543\" data-id=\"691\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/01curve.jpg?resize=561%2C543&#038;ssl=1\" alt=\"\" class=\"wp-image-691\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/01curve.jpg?w=561&amp;ssl=1 561w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/01curve.jpg?resize=300%2C290&amp;ssl=1 300w\" sizes=\"auto, (max-width: 561px) 100vw, 561px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"560\" height=\"542\" data-id=\"693\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/02points-1.jpg?resize=560%2C542&#038;ssl=1\" alt=\"\" class=\"wp-image-693\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/02points-1.jpg?w=560&amp;ssl=1 560w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/02points-1.jpg?resize=300%2C290&amp;ssl=1 300w\" sizes=\"auto, (max-width: 560px) 100vw, 560px\" \/><\/figure>\n<\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"188\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/04points.jpg?resize=700%2C188&#038;ssl=1\" alt=\"\" class=\"wp-image-694\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/04points.jpg?resize=1024%2C275&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/04points.jpg?resize=300%2C81&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/04points.jpg?resize=768%2C206&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/04points.jpg?w=1381&amp;ssl=1 1381w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The \u201cclassic\u201d phyllotactic angle is approximately 137.5\u00b0, a value derived from the golden ratio and commonly observed in nature. I left it as an input for a more general approach.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s the code I used:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:10px\"><code lang=\"python\" class=\"language-python line-numbers\">import Rhino.Geometry as rg\nimport math\n\na = 0.0 \ns = 0.0 \ni = 0   \n\npoints = []\ncurve_length = curve.GetLength() \n\nwhile s &lt; curve_length:\n    while a &lt; 1 and s &lt; curve_length:\n        t = curve.LengthParameter(s) \n        t = t[1]\n        pos = curve.PointAt(t)\n        x = pos.X\n        a += (2 * x \/ (size ** 2)) * deltas\n        s += deltas\n        \n    a -= 1\n    new_pos = rg.Point3d(pos.X,0,pos.Z)\n    \n    rotation = rg.Transform.Rotation(math.radians(angle)*i, rg.Vector3d.ZAxis, rg.Point3d.Origin)  \n    new_pos.Transform(rotation)\n    \n    points.append(new_pos)\n    i += 1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">a represents the area.<br>s corresponds to S.<br>i is a counter \u2014 not strictly necessary, but it\u2019s generally a good practice<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Curve is planar, drawn in the XZ plane. I used global Z-axis as the center of rotation.<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u2745&nbsp; \u2745&nbsp; \u2745<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As you might notice, the points here are evenly distributed, maintaining the same distance from each other. This is because the variable area is fixed. In nature, however, plant organs typically grow larger as they develop further from the center. To create a more natural appearance, we need to introduce a variable that allows the area to increase proportionally to its position.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here is an example of the same surface covered with spheres (a simplified representation of the organ). In the image on the left, with 561 points, the areas are the same size. In contrast, the image on the right, with 765 points, shows areas scaled according to their distance from the center.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"700\" data-id=\"696\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/05.png?resize=700%2C700&#038;ssl=1\" alt=\"\" class=\"wp-image-696\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/05.png?w=800&amp;ssl=1 800w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/05.png?resize=300%2C300&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/05.png?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/05.png?resize=768%2C768&amp;ssl=1 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"700\" data-id=\"697\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/06.png?resize=700%2C700&#038;ssl=1\" alt=\"\" class=\"wp-image-697\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/06.png?w=800&amp;ssl=1 800w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/06.png?resize=300%2C300&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/06.png?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/06.png?resize=768%2C768&amp;ssl=1 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Here, I used a variable called ratio to adjust the organs size. To calculate it, I first determine the circumference C of a circle centered on the Z-axis in the XY plane, positioned at t\u2080 of our curve, with the radius defined as the distance from the axis to t\u2080 ( X coordinate in my case). For each S in the loop, I calculate the C for t\u209b and then find the ratio between C(t\u209b) and C(t\u2080). This results in a list of ratios for each point, which can then be used to scale the spheres accordingly<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:10px\"><code lang=\"python\" class=\"language-python line-numbers\">import Rhino.Geometry as rg\nimport math\n\na = 0.0\ns = 0.0\ni = 0\n\nC = 2*math.pi * curve.PointAtStart.X \n\npoints = []\nratios  = []\ncurve_length = curve.GetLength()\n\nwhile s &lt; curve_length:\n    while a &lt; 1 and s &lt; curve_length:\n        t = curve.LengthParameter(s) \n        t = t[1]\n        pos = curve.PointAt(t)\n        x = pos.X\n        current_C = 2 * math.pi * x\n        ratio = current_C\/C\n        a += (2 * x \/ (size ** 2 * ratio)) * deltas\n        s += deltas\n        \n    a -= 1\n    new_pos = rg.Point3d(pos.X,0,pos.Z)\n    \n    rotation = rg.Transform.Rotation(math.radians(angle)*i, rg.Vector3d.ZAxis, rg.Point3d.Origin)\n    new_pos.Transform(rotation)\n    \n    points.append(new_pos)\n    ratios.append(ratio)\n    i += 1<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"197\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/07.jpg?resize=700%2C197&#038;ssl=1\" alt=\"\" class=\"wp-image-700\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/07.jpg?resize=1024%2C288&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/07.jpg?resize=300%2C84&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/07.jpg?resize=768%2C216&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/07.jpg?w=1431&amp;ssl=1 1431w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This ratio is not fixed and will vary depending on the desired outcome. You can reduce it (for example, by using its square root) for a smaller difference, or increase it for a more noticeable effect.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"649\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/08.jpg?resize=700%2C649&#038;ssl=1\" alt=\"\" class=\"wp-image-702\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/08.jpg?w=831&amp;ssl=1 831w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/08.jpg?resize=300%2C278&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/08.jpg?resize=768%2C713&amp;ssl=1 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You can alternate the organs using a call pattern component. Below are a few examples with colors:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"319\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/11.jpg?resize=700%2C319&#038;ssl=1\" alt=\"\" class=\"wp-image-704\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/11.jpg?resize=1024%2C466&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/11.jpg?resize=300%2C137&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/11.jpg?resize=768%2C350&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/11.jpg?w=1353&amp;ssl=1 1353w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"321\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/13.jpg?resize=700%2C321&#038;ssl=1\" alt=\"\" class=\"wp-image-705\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/13.jpg?resize=1024%2C470&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/13.jpg?resize=300%2C138&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/13.jpg?resize=768%2C352&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/13.jpg?w=1356&amp;ssl=1 1356w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"321\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/12.jpg?resize=700%2C321&#038;ssl=1\" alt=\"\" class=\"wp-image-706\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/12.jpg?resize=1024%2C469&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/12.jpg?resize=300%2C137&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/12.jpg?resize=768%2C352&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/12.jpg?w=1352&amp;ssl=1 1352w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You can also experiment with angles other than the golden ratio:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"314\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/14.jpg?resize=700%2C314&#038;ssl=1\" alt=\"\" class=\"wp-image-707\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/14.jpg?resize=1024%2C459&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/14.jpg?resize=300%2C134&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/14.jpg?resize=768%2C344&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/14.jpg?w=1377&amp;ssl=1 1377w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"314\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/15.jpg?resize=700%2C314&#038;ssl=1\" alt=\"\" class=\"wp-image-708\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/15.jpg?resize=1024%2C460&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/15.jpg?resize=300%2C135&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/15.jpg?resize=768%2C345&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/15.jpg?w=1377&amp;ssl=1 1377w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u2745&nbsp; \u2745&nbsp; \u2745<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"772\" data-id=\"720\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/130-0.png?resize=692%2C772&#038;ssl=1\" alt=\"\" class=\"wp-image-720\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/130-0.png?w=692&amp;ssl=1 692w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/130-0.png?resize=269%2C300&amp;ssl=1 269w\" sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"772\" data-id=\"721\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/140-0.png?resize=692%2C772&#038;ssl=1\" alt=\"\" class=\"wp-image-721\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/140-0.png?w=692&amp;ssl=1 692w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/140-0.png?resize=269%2C300&amp;ssl=1 269w\" sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"772\" data-id=\"722\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/150-0.png?resize=692%2C772&#038;ssl=1\" alt=\"\" class=\"wp-image-722\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/150-0.png?w=692&amp;ssl=1 692w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/150-0.png?resize=269%2C300&amp;ssl=1 269w\" sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/figure>\n<\/figure>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u2745&nbsp; \u2745&nbsp; \u2745<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now all you need is access to a 3D printer, and voil\u00e0!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"710\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/PRINTED-1.jpg?resize=700%2C710&#038;ssl=1\" alt=\"\" class=\"wp-image-716\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/PRINTED-1.jpg?w=810&amp;ssl=1 810w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/PRINTED-1.jpg?resize=296%2C300&amp;ssl=1 296w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/PRINTED-1.jpg?resize=768%2C779&amp;ssl=1 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u2745&nbsp; \u2745&nbsp; \u2745<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The principles of phyllotaxis aren\u2019t limited to plants\u2014they\u2019re part of broader physical and mathematical laws that govern growth and packing. Similar patterns appear in systems like galaxy spirals and crystal formations, showing that phyllotaxis is a fundamental principle of nature.<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u2745&nbsp; \u2745&nbsp; \u2745<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\" style=\"font-size:18px;font-style:normal;font-weight:400;text-transform:uppercase\"><strong>Resources:<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list has-small-font-size\">\n<li class=\"\">Prusinkiewicz, Przemyslaw, Lars M\u00fcndermann, Radoslaw Karwowski, and Brendan Lane. \u2018The Use of Positional Information in the Modeling of Plants\u2019. In Proceedings of the 28th Annual Conference on Computer Graphics and Interactive Techniques, 289\u2013300. ACM, 2001. <a href=\"https:\/\/doi.org\/10.1145\/383259.383291\">https:\/\/doi.org\/10.1145\/383259.383291<\/a>.<\/li>\n\n\n\n<li class=\"\">McCormack, Jon. \u2018A Method for Generating Phyllotaxis over Surfaces of Revolution\u2019, n.d.<\/li>\n\n\n\n<li class=\"\"><a href=\"https:\/\/www.youtube.com\/watch?v=yGwhnt7mZ50&amp;ab_channel=Entagma\">https:\/\/www.youtube.com\/watch?v=yGwhnt7mZ50&amp;ab_channel=Entagma<\/a><\/li>\n\n\n\n<li class=\"\"><a href=\"https:\/\/blog.wolfram.com\/2011\/07\/28\/how-i-made-wine-glasses-from-sunflowers\/\">https:\/\/blog.wolfram.com\/2011\/07\/28\/how-i-made-wine-glasses-from-sunflowers\/<\/a><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\n\n\n\n<div class=\"nfd-my-0 nfd-container nfd-px-base nfd-py-0 wp-block-group alignfull has-black-color has-white-background-color has-text-color has-background has-link-color wp-elements-1\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"nfd-text-base wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-9e283493 wp-block-group-is-layout-flex\" style=\"padding-top:40px;padding-bottom:40px\"><nav style=\"font-style:normal;font-weight:600;text-transform:uppercase;letter-spacing:0.05em\" class=\"is-responsive items-justified-left md:nfd-justify-end wp-block-navigation is-content-justification-left is-layout-flex wp-container-core-navigation-is-layout-d69a984d wp-block-navigation-is-layout-flex\" aria-label=\"Home page menu\" \n\t\t data-wp-interactive=\"core\/navigation\" data-wp-context='{\"overlayOpenedBy\":{\"click\":false,\"hover\":false,\"focus\":false},\"type\":\"overlay\",\"roleAttribute\":\"\",\"ariaLabel\":\"Menu\"}'><button aria-haspopup=\"dialog\" aria-label=\"Open menu\" class=\"wp-block-navigation__responsive-container-open\" \n\t\t\t\tdata-wp-on--click=\"actions.openMenuOnClick\"\n\t\t\t\tdata-wp-on--keydown=\"actions.handleMenuKeydown\"\n\t\t\t><svg width=\"24\" height=\"24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path d=\"M5 5v1.5h14V5H5z\"><\/path><path d=\"M5 12.8h14v-1.5H5v1.5z\"><\/path><path d=\"M5 19h14v-1.5H5V19z\"><\/path><\/svg><\/button>\n\t\t\t\t<div class=\"wp-block-navigation__responsive-container\"  id=\"modal-5\" \n\t\t\t\tdata-wp-class--has-modal-open=\"state.isMenuOpen\"\n\t\t\t\tdata-wp-class--is-menu-open=\"state.isMenuOpen\"\n\t\t\t\tdata-wp-watch=\"callbacks.initMenu\"\n\t\t\t\tdata-wp-on--keydown=\"actions.handleMenuKeydown\"\n\t\t\t\tdata-wp-on--focusout=\"actions.handleMenuFocusout\"\n\t\t\t\ttabindex=\"-1\"\n\t\t\t>\n\t\t\t\t\t<div class=\"wp-block-navigation__responsive-close\" tabindex=\"-1\">\n\t\t\t\t\t\t<div class=\"wp-block-navigation__responsive-dialog\" \n\t\t\t\tdata-wp-bind--aria-modal=\"state.ariaModal\"\n\t\t\t\tdata-wp-bind--aria-label=\"state.ariaLabel\"\n\t\t\t\tdata-wp-bind--role=\"state.roleAttribute\"\n\t\t\t>\n\t\t\t\t\t\t\t<button aria-label=\"Close menu\" class=\"wp-block-navigation__responsive-container-close\" \n\t\t\t\tdata-wp-on--click=\"actions.closeMenuOnClick\"\n\t\t\t><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m13.06 12 6.47-6.47-1.06-1.06L12 10.94 5.53 4.47 4.47 5.53 10.94 12l-6.47 6.47 1.06 1.06L12 13.06l6.47 6.47 1.06-1.06L13.06 12Z\"><\/path><\/svg><\/button>\n\t\t\t\t\t\t\t<div class=\"wp-block-navigation__responsive-container-content\" \n\t\t\t\tdata-wp-watch=\"callbacks.focusFirstElement\"\n\t\t\t id=\"modal-5-content\">\n\t\t\t\t\t\t\t\t<ul style=\"font-style:normal;font-weight:600;text-transform:uppercase;letter-spacing:0.05em\" class=\"wp-block-navigation__container is-responsive items-justified-left md:nfd-justify-end wp-block-navigation\"><li class=\"wp-block-navigation-item menu-item menu-item-type-custom menu-item-object-custom menu-item-home wp-block-navigation-link has-medium-font-size\"><a class=\"wp-block-navigation-item__content\"  href=\"https:\/\/tangowithbear.blog\" title=\"\"><span class=\"wp-block-navigation-item__label\">Home<\/span><\/a><\/li><\/ul>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div><\/nav><\/div>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Phyllotaxis Packing on Surfaces of Revolution<\/p>\n","protected":false},"author":1,"featured_media":736,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"image","meta":{"_acf_changed":false,"nf_dc_page":"","_monsterinsights_skip_tracking":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[25,24,26,27,10,12,22,21,18,19,20,17,23],"class_list":["post-669","post","type-post","status-publish","format-image","has-post-thumbnail","hentry","category-uncategorized","tag-algorithmicdesign","tag-codingindesign","tag-creativecoding","tag-designalgorithms","tag-grasshopper","tag-growing-structures","tag-parametric","tag-parametricdesign","tag-phyllotaxis","tag-phyllotaxis-packing","tag-python","tag-surface-of-revolution","tag-visualscripting","post_format-post-format-image"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2024\/12\/00-cover-1-1.jpg?fit=1827%2C772&ssl=1","_links":{"self":[{"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=\/wp\/v2\/posts\/669","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=669"}],"version-history":[{"count":5,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=\/wp\/v2\/posts\/669\/revisions"}],"predecessor-version":[{"id":739,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=\/wp\/v2\/posts\/669\/revisions\/739"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=\/wp\/v2\/media\/736"}],"wp:attachment":[{"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}