{"id":260,"date":"2009-04-21T00:00:01","date_gmt":"2009-04-21T07:00:01","guid":{"rendered":"https:\/\/actionsnippet.com\/?p=1194"},"modified":"2009-04-21T00:00:01","modified_gmt":"2009-04-21T07:00:01","slug":"3d-hypocycloid-shape","status":"publish","type":"post","link":"https:\/\/actionsnippet.com\/?p=260","title":{"rendered":"3D Hypocycloid Shape"},"content":{"rendered":"<pre class=\"brush: as3; title: ; notranslate\" title=\"\">\r\nvar matrix:Matrix3D = new Matrix3D();\r\nvar verts:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nvar pVerts:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nvar uvts:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nconst TWO_PI:Number=Math.PI * 2;\r\nvar step:Number=.05;\r\n\r\nvar brush:BitmapData = new BitmapData(3, 2, true, 0x41FFFFFF);\r\nvar n:Number=8;\r\nvar xp:Number=0,yp:Number=0,a:Number=12,t:Number=0;\r\nfor (var i:Number = 0; i&lt;TWO_PI; i+=step) {\r\n\tfor (var j:Number = 0; j&lt;TWO_PI; j+=step) {\r\n        \/\/ unoptimized for readability\r\n\tvar cosi:Number = a\/n * ((n - 1) * Math.cos(i) + Math.cos(Math.abs((n - 1) * i)));\r\n\tvar sini:Number = a\/n * ((n - 1) * Math.sin(i) - Math.sin(Math.abs((n - 1) * i)));\r\n\tvar cosj:Number = a\/n * ((n - 1) * Math.cos(j) + Math.cos(Math.abs((n - 1) * j)));\r\n\tvar sinj:Number = a\/n * ((n - 1) * Math.sin(j) - Math.sin(Math.abs((n - 1) * j)));\r\n\t\tverts.push(cosi * cosj);\r\n\t\tverts.push(sini * cosj);\r\n\t\tverts.push(a * sinj);\r\n\t\tpVerts.push(0),pVerts.push(0);\r\n\t\tuvts.push(0),uvts.push(0),uvts.push(0);\r\n\t}\r\n}\r\nvar canvas:BitmapData=new BitmapData(400,400,false,0x000000);\r\naddChild(new Bitmap(canvas));\r\nvar dx:Number=0;\r\nvar dy:Number=0;\r\naddEventListener(Event.ENTER_FRAME, onLoop);\r\nfunction onLoop(evt:Event):void {\r\n\tdx += (mouseX - dx)\/4;\r\n\tdy += (mouseY - dy)\/4;\r\n\tmatrix.identity();\r\n\tmatrix.appendRotation(dy,Vector3D.X_AXIS);\r\n\tmatrix.appendRotation(dx,Vector3D.Y_AXIS);\r\n\tmatrix.appendTranslation(200, 200, 0);\r\n\tUtils3D.projectVectors(matrix, verts, pVerts, uvts);\r\n\tcanvas.lock();\r\n\tcanvas.fillRect(canvas.rect, 0x000000);\r\n\tvar p = new Point();\r\n\tfor (var i:int = 0; i&lt;pVerts.length; i+=2) {\r\n\t\tp.x = pVerts&#x5B;i];\r\n\t\tp.y = pVerts&#x5B;i + 1];\r\n\t\tcanvas.copyPixels(brush, brush.rect, p, null, null, true);\r\n\t}\r\n\tcanvas.unlock();\r\n}\r\n<\/pre>\n<p>Taking the Hypocycloid stuff from yesterday into 3D&#8230;  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>var matrix:Matrix3D = new Matrix3D(); var verts:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); var pVerts:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); var uvts:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); const TWO_PI:Number=Math.PI * 2; var step:Number=.05; var brush:BitmapData = new BitmapData(3, 2, true, 0x41FFFFFF); var n:Number=8; var xp:Number=0,yp:Number=0,a:Number=12,t:Number=0; for (var i:Number = 0; i&lt;TWO_PI; i+=step) { for (var j:Number = 0; j&lt;TWO_PI; j+=step) { \/\/ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[101,24,121],"tags":[3,4],"class_list":["post-260","post","type-post","status-publish","format-standard","hentry","category-3d","category-bitmapdata","category-math","tag-actionscript","tag-flash"],"_links":{"self":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/posts\/260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=260"}],"version-history":[{"count":0,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/posts\/260\/revisions"}],"wp:attachment":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}