import com.polymercode.Draw; import flash.geom.Matrix; import flash.display.BitmapData; import GuirdApp; // mtasc -cp "C:\Documents and Settings\Veli\development\AS2" // -cp "C:\cygwin\bin\std8" -version 8 -swf app.swf // -header 800:600:30 PDistort.as class PDistort extends GuirdApp { static var INTID; static var shapemc; static var typemc; static var basemc; static var A,B,C; static var container; static var app:PDistort; function PDistort(){ } static function main(){ app = new PDistort(); //var infoField = createInfoField(); trace("Starting Program..."); container = _root.createEmptyMovieClip("container",1); shapemc = _root.createEmptyMovieClip("shapemc",2); basemc = shapemc.createEmptyMovieClip("base",1); typemc = basemc.createEmptyMovieClip("type",1); A = createPoint(_root.container,"A"); B = createPoint(_root.container,"B"); C = createPoint(_root.container,"C"); //container._x = 300; //container._y = 300; //shapemc._x = container._x; //shapemc._y = container._y; var points = createTrianglePoints(200,60); var pA = points[0]; var pB = points[1]; var pC = points[2]; A._x = pA.x; A._y = pA.y; B._x = pB.x; B._y = pB.y; C._x = pC.x; C._y = pC.y; typemc.lineStyle(2,0xffffff); updateTriangle(); // draw triangle on typemc } static function doShape (triClip, x1, y1, x2, y2, x3, y3) { // The dynamic shape code is provided by Pavils Jurjans pavils@mailbox.riga.lv // Use this code royalty-free as long as you keep these commentaries there var abx = x1-x2; var aby = y1-y2; var cax = x3-x1; var cay = y3-y1; var bcx = x2-x3; var bcy = y2-y3; var dir = (cax*bcy-cay*bcx<0) ? 1 : -1; var ab = abx*abx+aby*aby; var ca = cax*cax+cay*cay; var bc = bcx*bcx+bcy*bcy; var prod = ab*bc*ca; var sum = ab+bc+ca; var mx = (ab>ca) ? ((ab>bc) ? ab : (bc)) : ((ca>bc) ? ca : (bc)); var hh = prod/mx/mx-sum*sum/4/mx-mx+sum; var pp; if (mx == ab) { pp = 1.73205081/Math.sqrt(1+2*Math.sqrt((bc-hh)/(ca-hh))); triClip._rotation = Math.atan2(-aby, -abx)*180/Math.PI; triClip.base.type._rotation = 0; triClip._x = x2; triClip._y = y2; } else if (mx == bc) { pp = 1.73205081/Math.sqrt(1+2*Math.sqrt((ca-hh)/(ab-hh))); triClip._rotation = Math.atan2(-bcy, -bcx)*180/Math.PI; triClip.base.type._rotation = 240; triClip._x = x3; triClip._y = y3; } else { pp = 1.73205081/Math.sqrt(1+2*Math.sqrt((ab-hh)/(bc-hh))); triClip._rotation = Math.atan2(-cay, -cax)*180/Math.PI; triClip.base.type._rotation = 120; triClip._x = x1; triClip._y = y1; } var rr = Math.sqrt(pp*pp+3)/2; triClip.base._xscale = 100*pp; triClip.base._rotation = Math.atan(1.73205081/pp)*180/Math.PI; triClip._xscale = Math.sqrt(mx)/rr; triClip._yscale = 1.15470054*Math.sqrt(hh)*rr/pp*dir; } static function updateShape () { doShape(_root.shapemc, A._x, A._y, B._x, B._y, C._x, C._y); } static function createPoint(mc,name){ var p = mc.createEmptyMovieClip(name, mc.getNextHighestDepth()); p.beginFill(0xffffff,100); Draw.oval(p,0,0,6,6); p.endFill(); p.onPress = function(){ p.startDrag(); PDistort.INTID = setInterval(PDistort.updateShape,50); }; p.onRelease = function(){ p.stopDrag(); clearInterval(PDistort.INTID); }; // p._x = x; // p._y = y; return p; } static function updateTriangle(){ typemc.clear(); typemc.lineStyle(2,0xffffff); typemc.beginFill(0xdddddd,100); typemc.moveTo(A._x, A._y); typemc.lineTo(B._x, B._y); typemc.lineTo(C._x, C._y); typemc.lineTo(A._x, A._y); typemc.endFill(); } static function createTrianglePoints(b,alpha){ alpha = 0.01745*alpha; var h = Math.abs(b*Math.sin(alpha)); var k = h/3; var A = {x:0,y:-2*k}; var B = {x:b*Math.cos(alpha),y:k}; var C = {x:-b*Math.cos(alpha),y:k}; return [A,B,C]; } }