{"id":547,"date":"2023-09-24T13:45:52","date_gmt":"2023-09-24T13:45:52","guid":{"rendered":"https:\/\/tangowithbear.blog\/?p=547"},"modified":"2025-09-09T14:16:41","modified_gmt":"2025-09-09T14:16:41","slug":"the-architecture-of-growth","status":"publish","type":"post","link":"https:\/\/tangowithbear.blog\/?p=547","title":{"rendered":"THE ARCHITECTURE OF GROWTH"},"content":{"rendered":"\n<h1 class=\"wp-block-heading has-text-align-left\" id=\"simplified-generator-of-maple-leaves\">The Seashell&#8217;s Anatomy &#8211; A Story of adaptation, innovation, and survival<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Tools:<\/strong> Rhinoceros, Grasshopper, C#<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Natural forms in the world around us often emerge as a result of growth and adaptation, a crucial aspect of survival.&nbsp; Seashells serve as striking examples of how living organisms evolve to create unique and functional shapes by carefully balancing the proportions of their dwellings.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"299\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/001.jpg?resize=700%2C299&#038;ssl=1\" alt=\"\" class=\"wp-image-558\" style=\"object-fit:contain;width:841px;height:359px\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/001.jpg?resize=1024%2C438&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/001.jpg?resize=300%2C128&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/001.jpg?resize=768%2C328&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/001.jpg?resize=1536%2C657&amp;ssl=1 1536w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/001.jpg?w=1733&amp;ssl=1 1733w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/001.jpg?w=1400&amp;ssl=1 1400w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading has-text-align-center\" style=\"font-size:18px;font-style:normal;font-weight:400\"><strong>CALCIUM CARBONATE, SPECIALISED CELLS, AND ORGANIC MATRIX<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Seashell growth is a complex process that involves both biology and chemistry. Seashells are mostly made of a substance called calcium carbonate (CaCO<sub>3<\/sub>), which is common in the oceans. To understand how seashells grow, we need to know how marine creatures take calcium and carbonate from the water and use them to build their shells.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Picture the oceans as vast reservoirs of minerals dissolved in water. Naturally, the oceans contain a substantial amount of calcium ions (Ca\u00b2\u207a), originating from the breakdown of rocks and minerals. These dissolved calcium ions serve as fundamental building blocks for marine organisms engaged in biomineralization, which is their ability to extract calcium and carbonate ions (CO<sub>3<\/sub><sup>2-<\/sup>) from their surroundings and fuse them into solid calcium carbonate crystals.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Marine organisms responsible for shell formation possess specialised cells, often referred to as &#8220;calcifying cells&#8221; or &#8220;shell-forming cells.&#8221; These cells oversee the uptake, transportation, and deposition of calcium ions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In addition to calcifying cells, organisms secrete an organic matrix comprising proteins, lipids, and other biomolecules that act as templates. This matrix guides the precise arrangement of calcium carbonate crystals. A shell typically encompasses a mantle region, which may extend beyond the shell itself. In this area, extra-pallial fluid is secreted, containing components required for the &#8220;construction&#8221; process.<\/p>\n\n\n\n<p class=\"has-drop-cap has-white-color has-black-background-color has-text-color has-background wp-block-paragraph\" style=\"font-size:14px\">Ocean Acidification: The ocean absorbs approximately 30% of atmospheric carbon dioxide (CO2), leading to chemical reactions that raise hydrogen ion concentration, resulting in ocean acidification and reduced carbonate ions, making it challenging for calcifying organisms to build and maintain their calcium carbonate structures.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\" style=\"font-size:18px;font-style:normal;font-weight:400;text-transform:uppercase\"><strong>GROWING STRUCTURES<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The spiral form of seashells is a testament to the mathematical precision that enables the shell to continue growing while accommodating the developing mollusk. The part of the shell where the creature resides, responsible for adding new material, is located at the open edge. It deposits more material on one side than the other, resulting in the shell&#8217;s spiral shape. The specific rates at which shell material is added at different points along the open edge are determined by the animal&#8217;s anatomy, and changing these rates can yield a wide range of shapes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are essentially three rates of growth:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"\">The rate at which the aperture moves away from the coil&#8217;s axis.<\/li>\n\n\n\n<li class=\"\">The rate of translation, determining how far the shell coils along the z-axis.<\/li>\n\n\n\n<li class=\"\">The rate at which the aperture increases in size.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">From a geometric perspective, the shell&#8217;s outer surface can be described as a three-dimensional structure formed by a curve, typically an ellipse known as the generating curve (generatrix), moving along a helical spiral called the structural curve (directrix). As the generating curve travels along the helical path, it gradually widens, giving rise to the shape of the shell.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"474\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/01.jpg?resize=700%2C474&#038;ssl=1\" alt=\"\" class=\"wp-image-562\" style=\"width:525px;height:356px\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/01.jpg?resize=1024%2C694&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/01.jpg?resize=300%2C203&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/01.jpg?resize=768%2C521&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/01.jpg?w=1069&amp;ssl=1 1069w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">To build it in Grasshopper, I used the model described in JORGE PICADO&#8217;s paper [1], which gives more details on the mathematics of seashell forms.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\" style=\"font-size:18px;font-style:normal;font-weight:400;text-transform:uppercase\"><strong>The path (directrix)<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The spiral pattern in shells is often referred to as a logarithmic or equiangular spiral. This type of spiral has a distinct mathematical property: for every constant rotation angle (for example one full revolution), the distance from the spiral&#8217;s origin (the pole) is multiplied by a fixed factor. This means that as you move along the spiral, the angle between the direction you&#8217;re looking and the direction you&#8217;re moving remains the same. This consistent angle gives shells their harmonious appearance, as each segment of the spiral is proportionally similar to the next.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This spiral can be described with 3 parameters&nbsp; :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">alpha (equiangular angle) &#8211; impacts how the aperture moves away from the axis (90\u00b0 is a circle)<\/li>\n\n\n\n<li class=\"\">beta (enlarging angle) &#8211; impacts the translation rate (0 will result in vertical line 90 in flat spiral)<\/li>\n\n\n\n<li class=\"\">A &#8211; the aperture size<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"311\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/WIP-230910-02-1.gif?resize=700%2C311&#038;ssl=1\" alt=\"\" class=\"wp-image-653\" style=\"width:1000px;height:undefinedpx\"\/><\/figure>\n<\/div><\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Creating a curve involves the  process of interpolating points that meet the given equations:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">x(\u03b8) =   A    sin \u03b2   cos \u03b8   e<sup>\u03b8cot\u03b1&nbsp;<\/sup><br>y(\u03b8) =   A    sin \u03b2  sin \u03b8   e<sup>\u03b8cot\u03b1&nbsp;<\/sup><br>z(\u03b8) = \u2212A   cos \u03b2   e<sup>\u03b8cot\u03b1&nbsp;<\/sup><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Where \u03b8 represents the rotation angle, \u03b1 and<sup>&nbsp;<\/sup>\u03b2 are equiangular and enlarging angles respectively. The e<sup>\u03b8cot\u03b1&nbsp;<\/sup> is the increasing rate for  \u03b8 &gt;0.  <\/p>\n\n\n\n<p class=\"has-drop-cap has-white-color has-black-background-color has-text-color has-background wp-block-paragraph\" style=\"font-size:14px\">Logarithmic spirals can be observed in nature highlighting their significance in optimising growth, distribution, and other natural processes. A special case of the logarithmic spiral with the growth rate of Phi (\u03c6) results in a &#8220;Golden Ratio&#8221; spiral with the unique properties. Take a look at my <a href=\"https:\/\/tangowithbear.blog\/?p=338\" data-type=\"link\" data-id=\"https:\/\/tangowithbear.blog\/?p=338\">post on this topic<\/a> to discover more about spiral patterns in plants.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"370\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/02.jpg?resize=700%2C370&#038;ssl=1\" alt=\"\" class=\"wp-image-587\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/02.jpg?w=848&amp;ssl=1 848w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/02.jpg?resize=300%2C158&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/02.jpg?resize=768%2C406&amp;ssl=1 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To make the spiral coil counter clockwise change the sign of the X equation. I will use the parameter D that takes the value of 1 or -1 to set the coiling direction.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"216\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0002.jpg?resize=700%2C216&#038;ssl=1\" alt=\"\" class=\"wp-image-603\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0002.jpg?w=1285&amp;ssl=1 1285w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0002.jpg?resize=300%2C93&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0002.jpg?resize=1024%2C316&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0002.jpg?resize=768%2C237&amp;ssl=1 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:10px\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">private void RunScript(int D, int N, double alpha, double beta, double A, ref object Pts, ref object Dir)\n  {\n    List&lt;Point3d&gt; spiralPoints = ComputePoints(alpha, beta, A, N, D);\n    Curve directrix = Curve.CreateInterpolatedCurve(spiralPoints, 3);\n    Pts = spiralPoints;\n    Dir = directrix;\n  }\n  public List&lt;Point3d&gt; ComputePoints (double alpha, double beta, double A, int N, int D)\n  {\n    List&lt;Point3d&gt; spiralPoints = new List&lt;Point3d&gt;();\n    for (double theta = 0.00; theta &lt; N; theta += 1){\n      double X = D * A * Math.Sin(beta) * Math.Cos(theta) * Math.Exp(theta * (Math.Cos(alpha) \/ Math.Sin(alpha)));\n      double Y = A * Math.Sin(beta) * Math.Sin(theta) * Math.Exp(theta * (Math.Cos(alpha) \/ Math.Sin(alpha)));\n      double Z = -A * Math.Cos(beta) * Math.Exp(theta * (Math.Cos(alpha) \/ Math.Sin(alpha)));\n      Point3d currentPt = new Point3d(X, Y, Z);\n      spiralPoints.Add(currentPt);\n    }\n    return spiralPoints;\n  }<\/code><\/pre>\n\n\n\n<p class=\"has-drop-cap has-white-color has-black-background-color has-text-color has-background wp-block-paragraph\" style=\"font-size:14px\">Most&nbsp; snails&nbsp; have right-coiled shells. However, there are some rare snail species with left-coiled shells, like<a href=\"https:\/\/en.wikipedia.org\/wiki\/Jeremy_(snail)\" data-type=\"link\" data-id=\"https:\/\/en.wikipedia.org\/wiki\/Jeremy_(snail)\"> Jeremy<\/a>. These snails are known as &#8220;sinistral&#8221; snails. They  are typically encountered less frequently than their right-coiled counterparts. That makes it hard for them to mate as it is not easy to find other left-coiled snails.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\" style=\"font-size:18px;font-style:normal;font-weight:400;text-transform:uppercase\"><strong>The section (generatrix)<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The section of the curve that forms the shell can be simplified to an ellipse. With two parameters :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">a &#8211; semi-minor axis<\/li>\n\n\n\n<li class=\"\">b &#8211; semi-major axis<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To keep it simple, I used the RhinoCommon Ellipse constructor, which creates an ellipse with a base plane and both principal radii (a, b), instead of using the ellipse equation from the paper.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To create the base planes, we can use the base points obtained in the first step. In order to construct the plane frames, we need to define an origin (base point) and two vectors for the local xy axis. Our goal is to have the frames follow the path while remaining in a &#8220;vertical&#8221; position.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"393\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/03.jpg?resize=700%2C393&#038;ssl=1\" alt=\"\" class=\"wp-image-616\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/03.jpg?w=872&amp;ssl=1 872w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/03.jpg?resize=300%2C169&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/03.jpg?resize=768%2C432&amp;ssl=1 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To achieve this, the y-axis of each plane aligns with the global Z-axis. This means that the x-axis of each frame should be perpendicular to both the y-axis and the direction of the path. To determine this x-axis, we calculate a cross product between the global Z-axis and the tangent vector to the curve T(C) at each base point.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1082\" height=\"597\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/CROSS-PRODUCT-1.jpg?fit=700%2C386&amp;ssl=1\" alt=\"\" class=\"wp-image-743\" style=\"width:658px;height:auto\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/CROSS-PRODUCT-1.jpg?w=1082&amp;ssl=1 1082w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/CROSS-PRODUCT-1.jpg?resize=300%2C166&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/CROSS-PRODUCT-1.jpg?resize=1024%2C565&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/CROSS-PRODUCT-1.jpg?resize=768%2C424&amp;ssl=1 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The model easily handles scenarios where the generating ellipse rotates in three-dimensional space. This is achieved by using three angles, \u03d5, \u03c9 , and \u03bc. These angles describe the rotations around particular axes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">\u03d5 corresponds to the rotation around a vector perpendicular to the plane of the ellipse.<\/li>\n\n\n\n<li class=\"\">\u03c9 corresponds to the rotation around the Z (vertical) axis.<\/li>\n\n\n\n<li class=\"\">\u03bc corresponds to the rotation around the horizontal axis of the ellipse.<\/li>\n<\/ul>\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-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"616\" data-id=\"619\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/WIP-230916-phi.gif?resize=700%2C616&#038;ssl=1\" alt=\"\" class=\"wp-image-619\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"616\" data-id=\"618\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/WIP-230916-omega-new.gif?resize=700%2C616&#038;ssl=1\" alt=\"\" class=\"wp-image-618\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"610\" data-id=\"656\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/WIP-230916-mu-6.gif?resize=700%2C610&#038;ssl=1\" alt=\"\" class=\"wp-image-656\"\/><\/figure>\n<\/figure>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"266\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0003.jpg?resize=700%2C266&#038;ssl=1\" alt=\"\" class=\"wp-image-621\" style=\"width:840px;height:320px\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0003.jpg?w=1803&amp;ssl=1 1803w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0003.jpg?resize=300%2C114&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0003.jpg?resize=1024%2C390&amp;ssl=1 1024w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0003.jpg?resize=768%2C292&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0003.jpg?resize=1536%2C584&amp;ssl=1 1536w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/0003.jpg?w=1400&amp;ssl=1 1400w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n<\/div>\n\n\n<pre class=\"wp-block-code\" style=\"font-size:10px\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">private void RunScript(int D, int N, double alpha, double beta, double A, double a, double b, double phi, double mu, double omega, ref object Pts, ref object Dir, ref object Frames, ref object Gen)\n  {\n    List&lt;Point3d&gt; spiralPoints = ComputePoints(alpha, beta, A, N, D);\n    Curve directrix = Curve.CreateInterpolatedCurve(spiralPoints, 3);\n\n    List&lt;Vector3d&gt; tangentVts = new List&lt;Vector3d&gt;();\n    List&lt;Point3d&gt; basePts = new List&lt;Point3d&gt;();\n    List&lt;double&gt; frameTs = ComputeTs(directrix, out basePts, out tangentVts);\n    List&lt;Plane&gt; frames = ComputeFrames(basePts, tangentVts);\n    List&lt;Plane&gt; rotatedFrames = RotateFrames(frames, phi, mu, omega, D);\n\n    List&lt;Ellipse&gt; generatrixCurves = CreateGeneratrixCurves(rotatedFrames, a, b, alpha);\n\n    Pts = spiralPoints;\n    Dir = directrix;\n    Frames = rotatedFrames;\n    Gen = generatrixCurves;\n  }\n\n  public List&lt;Point3d&gt; ComputePoints (double alpha, double beta, double A, int N, int D)\n  {\n    List&lt;Point3d&gt; spiralPoints = new List&lt;Point3d&gt;();\n    for (double theta = 0.00; theta &lt; N; theta += 1){\n      double X = D * A * Math.Sin(beta) * Math.Cos(theta) * Math.Exp(theta * (Math.Cos(alpha) \/ Math.Sin(alpha)));\n      double Y = A * Math.Sin(beta) * Math.Sin(theta) * Math.Exp(theta * (Math.Cos(alpha) \/ Math.Sin(alpha)));\n      double Z = -A * Math.Cos(beta) * Math.Exp(theta * (Math.Cos(alpha) \/ Math.Sin(alpha)));\n      Point3d currentPt = new Point3d(X, Y, Z);\n      spiralPoints.Add(currentPt);\n    }\n    return spiralPoints;\n  }\n\n  public List&lt;double&gt; ComputeTs (Curve curve, out List&lt;Point3d&gt; basePts, out List&lt;Vector3d&gt; tangentVts){\n    basePts = new List&lt;Point3d&gt;();\n    tangentVts = new List&lt;Vector3d&gt;();\n    List&lt;double&gt; ts = new List&lt;double&gt;();\n    for (double i = 0.00 ; i &lt; curve.SpanCount; i += 1){\n      ts.Add(i);\n      basePts.Add(curve.PointAt(i));\n      tangentVts.Add(curve.TangentAt(i));\n    }\n    return ts;\n  }\n\n  public List&lt;Plane&gt; ComputeFrames (List&lt;Point3d&gt; basePts, List&lt;Vector3d&gt; tangentVts) {\n    List&lt;Plane&gt; frames = new List&lt;Plane&gt;();\n    for (int i = 0; i &lt; basePts.Count; i++) {\n      Vector3d crossProduct = Vector3d.CrossProduct(tangentVts[i], Vector3d.ZAxis);\n      Plane frame = new Plane(basePts[i], crossProduct, Vector3d.ZAxis);\n      frames.Add(frame);\n    }\n    return frames;\n  }\n\n  public List&lt;Plane&gt; RotateFrames (List&lt;Plane&gt;frames, double phi, double mu, double omega, int D){\n    List&lt;Plane&gt; rotatedFrames = new List&lt;Plane&gt;();\n    foreach (Plane frame in frames) {\n      Transform rotationPhi = Transform.Rotation(D * phi, frame.ZAxis, frame.Origin);\n      frame.Transform(rotationPhi);\n      Transform rotationMu = Transform.Rotation(mu, frame.XAxis, frame.Origin);\n      frame.Transform(rotationMu);\n      Transform rotationOmega = Transform.Rotation(omega, frame.YAxis, frame.Origin);\n      frame.Transform(rotationOmega);\n      rotatedFrames.Add(frame);\n    }\n    return rotatedFrames;\n  }\n\n  public List&lt;Ellipse&gt; CreateGeneratrixCurves (List&lt;Plane&gt; frames, double SecW, double SecH, double alpha){\n    List&lt;Ellipse&gt; generatrixCurves = new List&lt;Ellipse&gt;();\n    for (int i = 0; i &lt; frames.Count; i++){\n      Ellipse generatrixCrv = new Ellipse(frames[i], Math.Exp(i * Math.Cos(alpha) \/ Math.Sin(alpha)) * SecW, Math.Exp(i * Math.Cos(alpha) \/ Math.Sin(alpha)) * SecH);\n      generatrixCurves.Add(generatrixCrv);\n    }\n    return generatrixCurves;\n  }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><br>This simplified model doesn&#8217;t consider spikes and tendrils. Despite this simplification, it can still produce  quite accurate replica for some species :<\/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=\"700\" height=\"631\" data-id=\"623\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/41.jpg?resize=700%2C631&#038;ssl=1\" alt=\"Natalina\" class=\"wp-image-623\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/41.jpg?w=796&amp;ssl=1 796w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/41.jpg?resize=300%2C271&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/41.jpg?resize=768%2C693&amp;ssl=1 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\">Natalina<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"635\" data-id=\"624\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/42.jpg?resize=700%2C635&#038;ssl=1\" alt=\"\" class=\"wp-image-624\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/42.jpg?w=796&amp;ssl=1 796w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/42.jpg?resize=300%2C272&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/42.jpg?resize=768%2C697&amp;ssl=1 768w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\">Turitella<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"263\" data-id=\"625\" src=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/43.jpg?resize=300%2C263&#038;ssl=1\" alt=\"\" class=\"wp-image-625\" srcset=\"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/43.jpg?resize=300%2C263&amp;ssl=1 300w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/43.jpg?resize=768%2C672&amp;ssl=1 768w, https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/43.jpg?w=793&amp;ssl=1 793w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption class=\"wp-element-caption\">Conus<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-text-align-center wp-block-paragraph\">Natalina<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D = -1 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03b1 = 80<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03b2 = 40<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A = 25<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">a = 12<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">b = 16<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03d5 = 55<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03c9 =10<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03bc = 30<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-text-align-center wp-block-paragraph\">Turitella<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D = -1<\/p>\n\n\n\n<p class=\"has-text-align-justify wp-block-paragraph\">\u03b1 = 88.9<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03b2 = 4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A = 22.2<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">a = 1.3<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">b = 1.5<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03d5 = 55<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03c9 = 1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03bc = -2<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-text-align-center wp-block-paragraph\">Conus<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D = -1<\/p>\n\n\n\n<p class=\"has-text-align-justify wp-block-paragraph\">\u03b1 = 87<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03b2 = 7<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A = 7<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">a = 4.3<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">b = 1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03d5 = 78<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03c9 = 0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03bc = 0<\/p>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The next step will be to build a detailed model that accommodates noodles and spikes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>To be continued<\/strong>&#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Resources:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list has-small-font-size\">\n<li class=\"\">Picado, Jorge. \u2018Seashells: The Plainness and Beauty of Their Mathematical Description\u2019. Washington, DC: The MAA Mathematical Sciences Digital Library, 25 March 2009. <a href=\"https:\/\/doi.org\/10.4169\/loci003294\">https:\/\/doi.org\/10.4169\/loci003294<\/a>.<\/li>\n\n\n\n<li class=\"\">Cortie, M.B. \u2018Digital Seashells\u2019. <em>Computers &amp; Graphics<\/em> 17, no. 1 (January 1993): 79\u201384. <a href=\"https:\/\/doi.org\/10.1016\/0097-8493(93)90054-D\">https:\/\/doi.org\/10.1016\/0097-8493(93)90054-D<\/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-3\" \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-3-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","protected":false},"excerpt":{"rendered":"<p>The Seashell&#8217;s Anatomy &#8211; A Story of adaptation, innovation, and survival<\/p>\n","protected":false},"author":1,"featured_media":553,"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":[13,10,12,11,15,9,14],"class_list":["post-547","post","type-post","status-publish","format-image","has-post-thumbnail","hentry","category-uncategorized","tag-generating-seashells","tag-grasshopper","tag-growing-structures","tag-seachells-in-grasshopper","tag-seachells-in-rhino","tag-seashells-geometry","tag-seshell-model","post_format-post-format-image"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/tangowithbear.blog\/wp-content\/uploads\/2023\/09\/cover.jpg?fit=1799%2C719&ssl=1","_links":{"self":[{"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=\/wp\/v2\/posts\/547","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=547"}],"version-history":[{"count":5,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=\/wp\/v2\/posts\/547\/revisions"}],"predecessor-version":[{"id":745,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=\/wp\/v2\/posts\/547\/revisions\/745"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=\/wp\/v2\/media\/553"}],"wp:attachment":[{"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tangowithbear.blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}