{"id":653,"date":"2009-01-06T16:01:39","date_gmt":"2009-01-06T08:01:39","guid":{"rendered":"http:\/\/fdream.net\/blog\/article\/653.aspx"},"modified":"2009-01-06T16:01:37","modified_gmt":"2009-01-06T08:01:37","slug":"AS3%e4%bd%8d%e5%9b%be%e4%bb%bb%e6%84%8f%e5%bd%a2%e5%8f%98%e4%b8%80%e6%ad%a5%e4%b8%80%e6%ad%a5%e6%9d%a5%ef%bc%885%ef%bc%89%e2%80%94%e2%80%94%e7%ae%80%e5%8d%95Demo","status":"publish","type":"post","link":"https:\/\/fdream.net\/blog\/article\/653","title":{"rendered":"AS3\u4f4d\u56fe\u4efb\u610f\u5f62\u53d8\u4e00\u6b65\u4e00\u6b65\u6765\uff085\uff09\u2014\u2014\u7b80\u5355Demo"},"content":{"rendered":"<p>\u793a\u4f8b\uff0c\u7ea2\u989c\u8272\u7684\u662f\u4e09\u89d2\u5f62\u7684\u5206\u5272\u7ebf\u3002<\/p>\n<p><object id=\"swf26\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http:\/\/download.macromedia.com\/pub\/shockwave\/cabs\/flash\/swflash.cab#version=9,0,28,0\" width=\"540\" height=\"400\"><param name=\"movie\" value=\"http:\/\/fdream.net\/blog\/wp-content\/uploads\/2009\/01\/disort_bm.swf\" \/><param name=\"quality\" value=\"high\" \/><param name=\"wmode\" value=\"opaque\" \/><param name=\"allowFullScreen\" value=\"true\" \/><param name=\"allowScriptAccess\" value=\"sameDomain\" \/><embed src=\"http:\/\/fdream.net\/blog\/wp-content\/uploads\/2009\/01\/disort_bm.swf\" id=\"swf26\" allowFullScreen=\"true\" allowScriptAccess=\"sameDomain\" quality=\"high\" wmode=\"opaque\" pluginspage=\"http:\/\/www.adobe.com\/shockwave\/download\/download.cgi?P1_Prod_Version=ShockwaveFlash\" type=\"application\/x-shockwave-flash\" width=\"540\" height=\"400\"><\/embed><\/object><\/p>\n<p>\u6df7\u4e71\u4e11\u964b\u4f46\u662f\u5b8c\u6574\u800c\u4e14\u53ef\u4ee5\u8dd1\u7684\u6d4b\u8bd5\u4ee3\u7801\uff08\u5168\u90e8\u653e\u5728\u7b2c\u4e00\u5e27\u5c31\u53ef\u4ee5\u4e86\uff09\uff1a<\/p>\n<p><pre lang=\"actionscript\">\n\/\/\n\n\/\/-----------------------\nvar url:String = 'green.jpg';\nvar bd:BitmapData = null;\n\nvar px0,px1,px2,px3,py0,py1,py2,py3;\nvar pxa, pxb, pxc, pxd, pya, pyb, pyc, pyd;\nvar drct = true;\nvar steps = 20;\nvar interid;\n\n\/\/ segments\nvar hs:Number = 8, vs:Number = 8;\n\n\/\/ px: x coordinate\n\/\/ py: y coordinate\nvar pxs:Array = new Array();\nvar pys:Array = new Array();\nvar trs:Array = new Array();\nvar nps:Array = new Array();\n\n\/\/ four points of a rectangle, like this:\n\/\/ p0--------p1\n\/\/ |          |\n\/\/ p2--------p3\n\/\/ \n\n\/\/ calculate points\n\/\/ \u5305\u542bx\u5750\u6807\u548cy\u5750\u6807\uff0c\u5206\u522b\u5b58\u50a8\u5728pxs\u548cpys\u6570\u7ec4\u4e2d\n\/\/ @params:\n\/\/   w: \u4f4d\u56fe\u5bbd\n\/\/   h: \u4f4d\u56fe\u9ad8\n\/\/   hs: \u6c34\u5e73\u5206\u6bb5\u6570\n\/\/   vs: \u5782\u76f4\u5206\u6bb5\u6570\n\/\/ @return:\n\/\/   void\nfunction CalculatePoints(w:Number, h:Number, hs:Number, vs:Number):void {\n    var iw:Number = w \/ hs;\n    var ih:Number = h \/ vs;\n    for (var h=0; h&lt;=hs; h++) {\n        pxs[h] = h * iw;\n    }\n    for (var v=0; v&lt;=vs; v++) {\n        pys[v] = v * ih;\n    }\n}\n\nfunction CalculateNewPoints(p0:Point, p1:Point, p2:Point, p3:Point, hs:Number, vs:Number):void {\n    var lp:Point = new Point(p0.x, p0.y);\n    var rp:Point = new Point(p1.x, p1.y);\n\n    var lxd:Number = (p2.x - p0.x)\/vs;\n    var lyd:Number = (p2.y - p0.y)\/vs;\n\n    var rxd:Number = (p3.x - p1.x)\/vs;\n    var ryd:Number = (p3.y - p1.y)\/vs;\n    nps = [];\n    for (var v=0; v&lt;=vs; v++) {\n        lp.x = p0.x + lxd * v;\n        lp.y = p0.y + lyd * v;\n        rp.x = p1.x + rxd * v;\n        rp.y = p1.y + ryd * v;\n\n        nps.push(new Array());\n        var xd:Number = (rp.x - lp.x)\/hs;\n        var yd:Number = (rp.y - lp.y)\/hs;\n        for (var h=0; h&lt;=hs; h++) {\n            nps[v].push(new Point(lp.x + xd * h, lp.y + yd * h));\n        }\n    }\n    \/\/trace(nps);\n}\n\/\/CalculateNewPoints(new Point(-10, -20), new Point(40, -30), new Point(-30, 10), new Point(80, 30), 2, 2)\n\nfunction CalculateMatrix(oa:Object, ob:Object):Matrix {\n    var p1 = oa.p1, p2 = oa.p2, p3 = oa.p3;\n    var pa = ob.p1, pb = ob.p2, pc = ob.p3;\n    var mt:Matrix = new Matrix();\n    mt.a = ((p3.y - p1.y)*(pb.x - pa.x) - (p2.y-p1.y)*(pc.x-pa.x))\/((p3.y-p1.y)*(p2.x-p1.x)-(p3.x-p1.x)*(p2.y-p1.y));\n    mt.b = ((p3.y - p1.y)*(pb.y - pa.y) - (p2.y-p1.y)*(pc.y-pa.y))\/((p3.y-p1.y)*(p2.x-p1.x)-(p3.x-p1.x)*(p2.y-p1.y));\n    mt.c = ((p3.x - p1.x)*(pb.x - pa.x) - (p2.x-p1.x)*(pc.x-pa.x))\/((p2.y-p1.y)*(p3.x-p1.x)-(p3.y-p1.y)*(p2.x-p1.x));\n    mt.d = ((p3.x - p1.x)*(pb.y - pa.y) - (p2.x-p1.x)*(pc.y-pa.y))\/((p2.y-p1.y)*(p3.x-p1.x)-(p3.y-p1.y)*(p2.x-p1.x));\n    \/\/mt.tx = ((pb.x*p1.x - pa.x*p2.x)*(p3.y*p1.x-p1.y*p3.x)-(pc.x*p1.x-pa.x*p3.x)*(p2.y*p1.x-p1.y*p2.x))\/((p1.x-p2.x)*(p3.y*p1.x-p1.y*p3.x)-(p1.x-p3.x)*(p2.y*p1.x-p1.y*p2.x));\n    \/\/mt.tx = ((pb.y*p1.x - pa.y*p2.x)*(p3.y*p1.x-p1.y*p3.x)-(pc.y*p1.x-pa.y*p3.x)*(p2.y*p1.x-p1.y*p2.x))\/((p1.x-p2.x)*(p3.y*p1.x-p1.y*p3.x)-(p1.x-p3.x)*(p2.y*p1.x-p1.y*p2.x));\n    return mt;\n}\n\n\/\/ draw triangles\nfunction AddTriangle(bmd:BitmapData, mt:Matrix, pa:Point, pb:Point, pc:Point):void {\n    var t:Shape = new Shape();\n    t.graphics.lineStyle(1, 0xff0000);\n    t.graphics.beginBitmapFill(bmd, mt, false, true);\n    t.graphics.moveTo(pa.x, pa.y);\n    t.graphics.lineTo(pb.x, pb.y);\n    t.graphics.lineTo(pc.x, pc.y);\n    t.graphics.endFill();\n    trs.push(t);\n}\n\nfunction Load():void {\n    var req:URLRequest = new URLRequest(url);\n    var loader:Loader = new Loader();\n    ConfigureListeners(loader.contentLoaderInfo);\n    try {\n        loader.load(req);\n        \/\/this.addChild(loader);\n    } catch (err:Error) {\n    }\n}\nfunction ConfigureListeners(dispatcher:IEventDispatcher):void {\n    dispatcher.addEventListener(Event.COMPLETE, CompleteHandler);\n    \/*dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);\n    dispatcher.addEventListener(Event.INIT, initHandler);\n    dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);\n    dispatcher.addEventListener(Event.OPEN, openHandler);\n    dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);\n    dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);*\/\n}\nfunction CompleteHandler(evt:Event):void {\n    var ld:Loader = Loader(evt.target.loader);\n    var info:LoaderInfo = LoaderInfo(ld.contentLoaderInfo);\n    bd = new BitmapData(info.width, info.height);\n    bd.draw(info.content);\n\n    split();\n}\n\nfunction split() {\n    var wi:Number = bd.width;\n    var hi:Number = bd.height;\n    CalculatePoints(wi, hi, hs, vs);\n\n    var m:Matrix = new Matrix();\n    for (var v=0; v&lt;vs; v++) {\n        for (var h=0; h&lt;hs; h++) {\n            var p0:Point = new Point(pxs[h], pys[v]);\n            var p1:Point = new Point(pxs[h+1], pys[v]);\n            var p2:Point = new Point(pxs[h], pys[v+1]);\n            var p3:Point = new Point(pxs[h+1], pys[v+1]);\n            \/\/trace(p0, p1, p2, p3);\n            AddTriangle(bd, m, p0, p1, p2);\n            AddTriangle(bd, m, p1, p2, p3);\n        }\n    }\n    join();\n}\n\nfunction join() {\n    var len:Number = trs.length;\n    var xfix:Number = (bd.width&gt;&gt;2) + 10;\n    var yfix:Number = (bd.height&gt;&gt;2) + 20;\n    for (var i=0; i&lt;len; i++) {\n        this.addChild(trs[i]);\n    }\n    \n    px0 = 0; px1 = bd.width;\n    px2 = 0; px3 = bd.width;\n    py0 = 0; py1 = 0; \n    py2 = bd.height;\n    py3 = bd.height;\n    \n    pxa = 40; pxb = 240;\n    pxc = 80; pxd = 480;\n    pya = 40; pyb = 20;\n    pyc = 320;\n    pyd = 240;\n    interid = setInterval(TestRender, 40);\n    \n    \/\/rendNew(new Point(pxa, pya), new Point(pxb, pyb), new Point(pxc, pyc), new Point(pxd, pyd));\n    \/\/rendNew(new Point(40, 40), new Point(640, 20), new Point(80, 520), new Point(680, 440));\n}\n\nfunction rendNew(p0:Point, p1:Point, p2:Point, p3:Point) {\n    CalculateNewPoints(p0, p1, p2, p3, hs, vs);\n\n    var pa:Point, pb:Point, pc:Point, pd:Point;\n    var m1:Matrix, m2:Matrix;\n    var tid:Number = 0;\n    var ps0:Point = new Point(pxs[0], pys[0]);\n    var psa:Point = nps[0][0];\n    for (var v=0; v&lt;vs; v++) {\n        for (var h=0; h&lt;hs; h++) {\n            p0.x = pxs[h];\n            p0.y = pys[v];\n            p1.x = pxs[h+1];\n            p1.y = pys[v];\n            p2.x = pxs[h];\n            p2.y = pys[v+1];\n            p3.x = pxs[h+1];\n            p3.y = pys[v+1];\n            pa = nps[v][h];\n            pb = nps[v][h+1];\n            pc = nps[v+1][h];\n            pd = nps[v+1][h+1];\n\n            tid = v*hs*2 + h*2;\n            var ta = trs[tid];\n            var tb = trs[tid+1];\n            m1 = CalculateMatrix({p1:p0, p2:p1, p3:p2}, {p1:pa, p2:pb, p3:pc});\n            if (tid &gt; hs * 2 &amp;&amp; h != 0) {\n                m1.tx = trs[tid - hs * 2 - 1].transform.matrix.tx;\n                m1.ty = trs[tid - hs * 2 - 1].transform.matrix.ty;\n            } else {\n                m1.tx = 0;\n                m1.ty = 0;\n            }\n            \n            m2 = CalculateMatrix({p1:p1, p2:p2, p3:p3}, {p1:pb, p2:pc, p3:pd});\n            if(v &gt; 0){\n                m2.tx = trs[1].transform.matrix.tx * (h + 1) * (v + 1);\n            }\n            else{\n                m2.tx = ((pb.x - psa.x) - (p1.x - pxs[0])) - ((pd.x - nps[v+1][0].x) - (p3.x - pxs[0]));\n            }\n            if(tid &gt; 0){\n                m2.ty = trs[1].transform.matrix.ty * (h + 1) * (v + 1);\n            }\n            else{\n                m2.ty = ((pc.y - psa.y) - (p2.y - pys[0])) - ((pd.y - nps[0][h+1].y) - (p3.y - pys[0]));\n            }\n            ta.transform.matrix = m1;\n            tb.transform.matrix = m2;\n        }\n    }\n}\n\nfunction TestRender(){\n    if(Math.abs(pxa - px0) &lt; 1){\n        if(drct){\n            pxa = 0;\n            pya = 0;\n            pxb = bd.width;\n            pyb = 0;\n            pxc = 0;\n            pyc = bd.height;\n            pxd = bd.width;\n            pyd = bd.height;\n        }\n        else{\n            pxa = 10;\n            pya = 10;\n            pxb = 240;\n            pyb = 20;\n            pxc = 20;\n            pyc = 210;\n            pxd = 280;\n            pyd = 180;\n        }\n        drct = !drct;\n    }\n    \n    px0 += (pxa - px0) \/ steps;\n    py0 += (pya - py0) \/ steps;\n    px1 += (pxb - px1) \/ steps;\n    py1 += (pyb - py1) \/ steps;\n    px2 += (pxc - px2) \/ steps;\n    py2 += (pyc - py2) \/ steps;\n    px3 += (pxd - px3) \/ steps;\n    py3 += (pyd - py3) \/ steps;\n    rendNew(new Point(px0, py0),\n            new Point(px1, py1),\n            new Point(px2, py2),\n            new Point(px3, py3));\n}\n\nLoad();\n<\/pre><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u793a\u4f8b\uff0c\u7ea2\u989c\u8272\u7684\u662f\u4e09\u89d2\u5f62\u7684\u5206\u5272\u7ebf\u3002 \u6df7\u4e71\u4e11\u964b\u4f46\u662f\u5b8c\u6574\u800c\u4e14\u53ef\u4ee5\u8dd1\u7684\u6d4b\u8bd5\u4ee3\u7801\uff08\u5168\u90e8\u653e\u5728\u7b2c\u4e00\u5e27\u5c31\u53ef\u4ee5\u4e86\uff09\uff1a \/\/ \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; var url:String = &#8216;green.jpg&#8217;; var bd:BitmapData = null; var px0,px1,px2,px3,py0,py1,py2,py3; var pxa, pxb, pxc, pxd, pya, pyb, pyc, pyd; var drct = true; var steps = 20; var interid; \/\/ segments var hs:Number = 8, vs:Number = 8; \/\/ px: x coordinate \/\/ py: y coordinate var pxs:Array = new Array(); &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-653","post","type-post","status-publish","format-standard","hentry","category-coding"],"views":21945,"_links":{"self":[{"href":"https:\/\/fdream.net\/blog\/wp-json\/wp\/v2\/posts\/653","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fdream.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fdream.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fdream.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fdream.net\/blog\/wp-json\/wp\/v2\/comments?post=653"}],"version-history":[{"count":0,"href":"https:\/\/fdream.net\/blog\/wp-json\/wp\/v2\/posts\/653\/revisions"}],"wp:attachment":[{"href":"https:\/\/fdream.net\/blog\/wp-json\/wp\/v2\/media?parent=653"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fdream.net\/blog\/wp-json\/wp\/v2\/categories?post=653"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fdream.net\/blog\/wp-json\/wp\/v2\/tags?post=653"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}