{ "name": "spiral twirls star 2D", "id": "X4S9zmtj3YaTuGixJ", "sources": { "main": "/*\n Spiral twirls star 2D\n \n This is \"Spiral twirls 2D\" (ChrisNZ) modified with some code from \n \"Geometry Morphing Demo 2D\" (Zranger1) to mask to a star shape.\n Mixed by wizard.\n \n A configurable 2D pattern that creates a variety of rotating and swirling\n circular and spiral effects masked to a star.\n \n*/\n\n//from Geometry Morphing Demo\nvar objectSize = 0.4;\nvar lineWidth = 0.05;\nexport function sliderSize(v) {\n objectSize = .9 * v;\n}\nexport function sliderLineWidth(v){\n lineWidth = 0.25 * v * v;\n}\n\n\nvar twistSpeed = .015\nvar rotateSpeed = .002\nvar startingColor = .3\nvar colorSpeed = .015\nvar twist, rotation, colorShift, arms\nexport var starRotateSpeed = .002 //added for rotating the star\nvar starRotationTimer = timer(starRotateSpeed)\n\n// How quickly the spiral should rotate back and forth\nexport function sliderTwistSpeed(v) { twistSpeed = v = 0 ? 0 : .015 / v }\n\n// How quickly the entire pattern should rotate\nexport function sliderRotationSpeed(v) { rotateSpeed = v = 0 ? 0 : .005 / v }\n\n// What initial colors to display. If colorSpeed is zero then the pattern will\n// stay this color\nexport function sliderInitialColor(v) { startingColor = v * 2 }\n\n// How quickly the colors of the pattern should change\nexport function sliderColorSpeed(v) { colorSpeed = v = 0 ? 0 : .015 / v }\n\n// How many arms of symmetry the pattern should have (1-3)\nexport function sliderArms(v) { arms = 1 + floor(v * 2.999) }\n\n//how fast to rotate the star mask\nexport function sliderStarRotation(v) {\n starRotateSpeed = triangle(v)\n starRotateSpeed = pow(10, (starRotateSpeed*starRotateSpeed -.5)*4)\n if (v < .5)\n starRotateSpeed = -starRotateSpeed\n timerSetInterval(starRotationTimer, starRotateSpeed)\n}\n\n\nexport function beforeRender(delta) {\n twist = wave(time(twistSpeed)) * 2 - 1\n rotation = time(rotateSpeed)\n colorShift = time(colorSpeed)\n \n resetTransform()\n translate(-.5, -.5)\n scale(2,2)\n \n // rotate entire scene\n var theta = PI2 * timerNow(starRotationTimer);\n rotate(theta); \n}\n\nexport function render2D(index, x, y) {\n if (hexStar(x, y, objectSize) > lineWidth)\n return\n \n dist = hypot(x,y)\n angle = (atan2(y, x) + PI) / PI / 2\n angle += dist * twist / 2\n \n h = angle * arms - rotation + 10\n h = h - floor(h)\n v = (1.01 - dist) * (h < .5 ? h * h * h : h)\n h = (h + startingColor) / 2 + colorShift\n \n hsv(h, 1, v)\n}\n\n// Experimentally-derived isometric projection. YMMV.\nexport function render3D(index, x0, y0, z0) {\n x = x0 / 3\n y = y0 / 3 + 0.68\n z = z0 / 3 - 0.75\n px = 0.4 * (1.71 * x - 1.71 * z)\n py = 0.4 * (x + 2 * y + z)\n render2D(index, px, py)\n}\n\n// Render the line sliced across the horizon, y = .5\nexport function render(index) {\n pct = index / pixelCount\n render2D(index, pct, 0.5)\n}\n\n\n//from Geometry Morphing Demo\nfunction signum(a) {\n return (a > 0) - (a < 0)\n}\n\nfunction hexStar(x,y,r) {\n // rescale to pointy parts of star\n x = abs(x*1.73205); y = abs(y*1.73205); \n dot = 2 * min(-0.5*x + 0.866025 * y,0);\n x -= dot * -0.5; y -= dot * 0.866025;\n \n dot = 2 * min(0.866025*x + -0.5 * y,0);\n x -= dot * 0.866025; y -= dot * -0.5;\n \n x -= clamp(x, r * 0.57735, r * 1.73205);\n y -= r;\n return signum(y) * hypot(x,y) / 1.73205;\n}\n\n\n//timer utility functions for smooth speed adjustment\nfunction timer(interval) {\n return [0, interval]\n}\n\nfunction timerSetInterval(timer, interval) {\n var p1 = time(timer[1]) //measure the current interval's value\n var p2 = time(interval) //measure the new interval's value\n //calculate the phase difference between these\n timer[0] = mod(timer[0] + p1 - p2, 1)\n timer[1] = interval\n}\n\nfunction timerNow(timer) {\n return (time(timer[1]) + timer[0]) % 1\n}\n" }, "preview": "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" }