{"id":398,"date":"2009-09-06T02:40:58","date_gmt":"2009-09-06T09:40:58","guid":{"rendered":"https:\/\/actionsnippet.com\/?p=2128"},"modified":"2026-02-22T23:28:03","modified_gmt":"2026-02-22T23:28:03","slug":"distance-spring","status":"publish","type":"post","link":"https:\/\/actionsnippet.com\/?p=398","title":{"rendered":"Distance Spring"},"content":{"rendered":"<pre class=\"brush: as3; title: ; notranslate\" title=\"\">\r\n&#x5B;SWF(backgroundColor=0x222222, width=500, height=500)]\r\nvar hsw:Number = stage.stageWidth \/ 2;\r\nvar hsh:Number = stage.stageHeight \/ 2;\r\nvar pointNum:int = 800\r\nvar points3D:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nvar points3Dout:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nvar points2D:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nvar uvts:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nvar sorted:Array = &#x5B;];\r\nvar pnt:Point = new Point();\r\nvar m:Matrix3D = new Matrix3D();\r\nvar v:Vector3D = new Vector3D();\r\nfor (var i:int = 0; i&lt;pointNum; i++){\r\n\tv.y = i * 0.7 - 300\r\n\tvar t =Math.random()*6.28;\r\n\tv.x = 200 * Math.cos(i * 2 * Math.PI \/ 180);\r\n\tv.z = 200 * Math.sin(i * 2 * Math.PI \/ 180);\r\n\tv = m.transformVector(v);\r\n\tpoints3D.push(v.x, v.y, v.z);\r\n\tpoints2D.push(0,0);\r\n\tuvts.push(0,0,0);\r\n\tsorted.push(new Vector3D());\r\n}\r\npoints3D.fixed = true;\r\npoints2D.fixed = true;\r\nuvts.fixed = true;\r\nvar p:PerspectiveProjection = new PerspectiveProjection();\r\nvar proj:Matrix3D = p.toMatrix3D();\r\nvar dx:Number = 0, dy:Number = 0;\r\naddEventListener(Event.ENTER_FRAME, onLoop);\r\nfunction onLoop(evt:Event):void {\r\n\tvar i:int, j:int;\r\n\tdx += (mouseX - dx) \/ 4;\r\n\tdy += (mouseY - dy) \/ 4;\r\n\tm.identity();\r\n\tm.appendRotation(getTimer() \/ 4, Vector3D.Y_AXIS);\r\n\tm.transformVectors(points3D, points3Dout);\r\n\t\r\n\tm.identity();\r\n\tm.appendRotation(dx, Vector3D.Z_AXIS);\r\n\tm.appendRotation(dy, Vector3D.X_AXIS);\r\n\tm.appendTranslation(0, 0, 1000);\r\n\tm.append(proj);\r\n\tUtils3D.projectVectors(m, points3Dout, points2D, uvts);\r\n\tfor (i = 0, j = 0; i&lt;points2D.length; i+=2, j++){\r\n\t\tsorted&#x5B;j].x = points2D&#x5B;i] + hsw;\r\n\t\tsorted&#x5B;j].y = points2D&#x5B;i + 1] + hsh;\r\n\t\tsorted&#x5B;j].z = uvts&#x5B;j * 3 + 2];\r\n\t}\r\n\tsorted.sortOn(&quot;z&quot;, Array.NUMERIC);\r\n\tgraphics.clear();\r\n\tfor(i = 0; i&lt;sorted.length; i++){\r\n\t\tvar zpos:Number = sorted&#x5B;i].z * 10000;\r\n\t\tvar c:int = zpos * 14;\r\n\t\tgraphics.beginFill(c &lt;&lt;16 | c &lt;&lt;8 | c);\r\n\t\tgraphics.drawCircle(sorted&#x5B;i].x, sorted&#x5B;i].y, zpos);\r\n\t\tgraphics.endFill();\r\n\t}\r\n}\r\n<\/pre>\n<p>A variation on some recent posts&#8230; this snippet draws a rotating spring made up of 800 particles&#8230;<\/p>\n<p><a href=\"http:\/\/wonderfl.net\/code\/f400bc07adbfe58f927eea226b4227958d73bd39\" target=\"blank\">Have a look at the swf&#8230;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/actionsnippet.com\/wp-content\/dist_spring.jpg\" \/><br \/>\n<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#x5B;SWF(backgroundColor=0x222222, width=500, height=500)] var hsw:Number = stage.stageWidth \/ 2; var hsh:Number = stage.stageHeight \/ 2; var pointNum:int = 800 var points3D:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); var points3Dout:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); var points2D:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); var uvts:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); var sorted:Array = &#x5B;]; var pnt:Point = new Point(); var m:Matrix3D = new Matrix3D(); var v:Vector3D [&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,33,79],"tags":[99,14,4],"class_list":["post-398","post","type-post","status-publish","format-standard","hentry","category-3d","category-graphics","category-vector","tag-actionsnippet","tag-as3","tag-flash"],"_links":{"self":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/posts\/398","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=398"}],"version-history":[{"count":2,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/posts\/398\/revisions"}],"predecessor-version":[{"id":559,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/posts\/398\/revisions\/559"}],"wp:attachment":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}