{"id":1654,"date":"2024-09-09T11:09:15","date_gmt":"2024-09-09T10:09:15","guid":{"rendered":"https:\/\/janxhopkins.com\/?page_id=1654"},"modified":"2025-06-04T09:48:44","modified_gmt":"2025-06-04T08:48:44","slug":"stemdata","status":"publish","type":"page","link":"https:\/\/janxhopkins.com\/index.php\/process\/stemdata\/","title":{"rendered":"stemdata"},"content":{"rendered":"\n<div style=\"height:32px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-gutenbergp5-p5js gutenbergp5-align-center gutenbergp5-block-p5js\"><iframe srcdoc=\"\n        <!DOCTYPE html&gt;\n        <html&gt;\n            <body style=&quot;padding: 0; margin: 0;&quot;&gt;<\/body&gt;\n            <script src=&quot;https:\/\/janxhopkins.com\/wp-content\/plugins\/easy-p5-js-block\/\/assets\/js\/p5.min.js&quot;&gt;<\/script&gt;\n            <script&gt;\n                let noiseOffset = 0;\nlet stems = [];  \/\/ Array to store stem properties\nlet letters = ['l', 'x', '0', 'e', 'v'];  \/\/ Array of letters\n\nfunction setup() {\n  createCanvas(600, 600);\n  stroke(90);  \/\/ Set stroke to 90\n  fill(200);  \/\/ Light grey fill\n  background(240);\n  frameRate(30);  \/\/ Set frame rate\n\n  let numStems = 20;  \/\/ Number of stems\n  for (let i = 0; i < numStems; i++) {\n    \/\/ Store stem properties in an object\n    let baseWidth = random(10, 15);\n    let leafHeight = random(height - 200, height - 100);\n    \n    \/\/ Calculate circle properties based on the stem width and height\n    let circleHeight = random(50, leafHeight - 50);  \/\/ Random height for circle along the stem\n    let widthFactor = map(circleHeight, 0, leafHeight, baseWidth, 10);  \/\/ Width of the stem at circle height\n    let circleDiameter = abs(widthFactor) * 0.95;  \/\/ Circle diameter almost equal to stem width (95%)\n\n    \/\/ Initially assign a random letter from the array\n    let letter = random(letters);\n    \n    \/\/ Assign a random update interval for each letter (30 to 120 frames)\n    let letterUpdateInterval = floor(random(30, 120));\n\n    \/\/ Store the current frame count for when to update the letter next\n    let nextLetterUpdate = frameCount + letterUpdateInterval;\n\n    stems.push({\n      baseWidth: baseWidth,  \/\/ Base width\n      leafHeight: leafHeight,  \/\/ Leaf height\n      curveHeight: random(60, 100),  \/\/ Curve height at the top\n      xOffset: random(-150, 150),  \/\/ X offset for position on canvas\n      angleOffset: random(-QUARTER_PI \/ 8, QUARTER_PI \/ 8),  \/\/ Initial growth angle variation\n      circleHeight: circleHeight,  \/\/ Stored circle height\n      circleDiameter: circleDiameter,  \/\/ Stored circle diameter\n      letter: letter,  \/\/ Stored random letter\n      letterUpdateInterval: letterUpdateInterval,  \/\/ Interval for updating the letter\n      nextLetterUpdate: nextLetterUpdate  \/\/ Frame count for next letter update\n    });\n  }\n}\n\nfunction draw() {\n  background(240);  \/\/ Clear background to animate smoothly\n  \n  for (let i = 0; i < stems.length; i++) {\n    let stem = stems[i];  \/\/ Retrieve the stored properties\n\n    \/\/ Check if it's time to update the letter for this specific stem\n    if (frameCount &gt;= stem.nextLetterUpdate) {\n      \/\/ Update the letter and set the next update time\n      stem.letter = random(letters);\n      stem.nextLetterUpdate = frameCount + stem.letterUpdateInterval;  \/\/ Set next update time\n    }\n\n    drawStem(\n      stem.baseWidth,\n      stem.leafHeight,\n      stem.curveHeight,\n      stem.xOffset,\n      stem.angleOffset,\n      stem.circleHeight,\n      stem.circleDiameter,\n      stem.letter  \/\/ Pass the letter for drawing\n    );\n  }\n}\n\nfunction drawStem(baseWidth, leafHeight, curveHeight, xOffset, angleOffset, circleHeight, circleDiameter, letter) {\n  push();  \/\/ Save current transformation\n  \n  let baseOffset = 50;  \/\/ Offset to start stems below the canvas\n  translate(width \/ 2 + xOffset, height + baseOffset);  \/\/ Move to base position (below canvas)\n\n  \/\/ Add swaying effect using frameCount for a smooth, periodic movement (wind simulation)\n  let sway = sin(frameCount * 0.02 + xOffset * 0.01) * QUARTER_PI \/ 16;  \/\/ Sway angle variation based on time\n  rotate(angleOffset + sway);  \/\/ Apply rotation with additional sway\n\n  beginShape();\n  \n  \/\/ Left side of the leaf, going up\n  for (let y = 0; y <= leafHeight - curveHeight; y++) {\n    let noiseFactor = noise(noiseOffset + y * 0.005);  \/\/ Subtle noise\n    let widthFactor = map(y, 0, leafHeight, baseWidth, 10);  \/\/ Ensure base width is always wider\n    let noiseX = map(noiseFactor, 0, 1, -2, 2);  \/\/ Slight variation for organic shape\n\n    vertex(-widthFactor + noiseX, -y);  \/\/ Adjusted for correct placement\n  }\n\n  \/\/ Create a smooth curve for the top\n  for (let angle = PI; angle < TWO_PI; angle += 0.05) {\n    let x = cos(angle) * 10;  \/\/ Curve's radius and position\n    let y = -leafHeight + sin(angle) * curveHeight;\n    vertex(x, y);\n  }\n\n  \/\/ Right side of the leaf, going down\n  for (let y = leafHeight - curveHeight; y &gt;= 0; y--) {\n    let noiseFactor = noise(noiseOffset + y * 0.005);\n    let widthFactor = map(y, 0, leafHeight, baseWidth, 10);  \/\/ Same tapering on the right\n    let noiseX = map(noiseFactor, 0, 1, -2, 2);\n\n    vertex(widthFactor + noiseX, -y);\n  }\n  \n  endShape(CLOSE);\n  \n  \/\/ Draw the circle at the stored height and with the stored diameter\n  noStroke();  \/\/ No stroke for the circle\n  fill(255);  \/\/ White fill\n  ellipse(0, -circleHeight, circleDiameter);  \/\/ Draw circle centrally (x = 0)\n\n  \/\/ Draw the letter in the center of the circle\n  fill(90);  \/\/ Dark fill for the letter\n  textAlign(CENTER, CENTER);  \/\/ Align text to the center\n  textSize(circleDiameter);  \/\/ Set text size relative to the circle diameter\n  text(letter, 0, -circleHeight);  \/\/ Draw the letter at the center of the circle\n\n  pop();  \/\/ Restore original transformation\n}\n            <\/script&gt;\n        <\/html&gt;\" sandbox=\"allow-scripts allow-same-origin\" scrolling=\"no\" style=\"overflow:hidden;\" width=\"\" height=\"\" class=\"\" title=\"p5.js canvas\"><\/iframe><\/div>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">in the&nbsp;<em>mamagarden<\/em>, the&nbsp;<strong>stemdata<\/strong>&nbsp;are living, breathing entities, infused with devotion by a resistant breeze&#8211;&gt; each stem() with its unique curve, width, and angle, grows a quiet individuality, embodying the garden\u2019s nurturing spirit*** &nbsp;within&gt;the [orbCells] cradling their soft data, are like little seeds of affection\u2014each one a pulse of emotion beating at its own pace &amp;&amp;&gt; a reminder that life here is ever-evolving &amp;&amp; full of surprises ^^ where every curve and sway distributes love freely&gt;&gt;&gt; as if the whole garden is a desperate conduit for compassion&gt;&gt;\/__when it&#8217;s this dark&gt;&gt;it&#8217;s sorely needed<\/p>\n","protected":false},"excerpt":{"rendered":"<p>in the&nbsp;mamagarden, the&nbsp;stemdata&nbsp;are living, breathing entities, infused with devotion by a resistant breeze&#8211;&gt; each stem() with its unique curve, width, and angle, grows a quiet individuality, embodying the garden\u2019s nurturing spirit*** &nbsp;within&gt;the [orbCells] cradling their soft data, are like little seeds of affection\u2014each one a pulse of emotion beating at its own pace &amp;&amp;&gt; a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1658,"parent":1948,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","footnotes":""},"class_list":["post-1654","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/janxhopkins.com\/index.php\/wp-json\/wp\/v2\/pages\/1654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/janxhopkins.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/janxhopkins.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/janxhopkins.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/janxhopkins.com\/index.php\/wp-json\/wp\/v2\/comments?post=1654"}],"version-history":[{"count":4,"href":"https:\/\/janxhopkins.com\/index.php\/wp-json\/wp\/v2\/pages\/1654\/revisions"}],"predecessor-version":[{"id":1996,"href":"https:\/\/janxhopkins.com\/index.php\/wp-json\/wp\/v2\/pages\/1654\/revisions\/1996"}],"up":[{"embeddable":true,"href":"https:\/\/janxhopkins.com\/index.php\/wp-json\/wp\/v2\/pages\/1948"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/janxhopkins.com\/index.php\/wp-json\/wp\/v2\/media\/1658"}],"wp:attachment":[{"href":"https:\/\/janxhopkins.com\/index.php\/wp-json\/wp\/v2\/media?parent=1654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}