Код | package { import flash.display.Graphics; public class SmoothLine { public static function draw(graphics:Graphics, dots:Array, tansion:Number, step:Number = 0.02):void { var x:Number = dots[dots.length-1].x + (dots[dots.length-2].x - dots[dots.length-1].x); var y:Number = dots[dots.length-1].y - (dots[dots.length-2].y - dots[dots.length-1].y); var endDot:Vector = new Vector(x,y); x = dots[0].x - (dots[1].x - dots[0].x); y = dots[0].y - (dots[1].y - dots[1].y); var startDot:Vector = new Vector(x,y); var newDots:Array = new Array(); var i:Number = 0; newDots.push(startDot); for (i=0;i<dots.length;i++) { newDots.push(dots[i]); } newDots.push(endDot); graphics.moveTo(dots[0].x,dots[0].y); for (i = 0;i<newDots.length-3;i++) { for (var j:Number = 0; j<=1;j+=step) { var p0:Vector = newDots[i]; var p1:Vector = newDots[(i + 1)%newDots.length]; var p2:Vector = newDots[(i + 2)%newDots.length]; var p3:Vector = newDots[(i + 3)%newDots.length]; var u:Number = j; var uu:Number = Math.pow(u,2); var uuu:Number = Math.pow(u,3); var h0:Number = 2*uuu - 3*uu + 1;// calculate basis function 1 var h1:Number = -2*uuu + 3*uu;// calculate basis function 2 var h2:Number = uuu - 2*uu + u; // calculate basis function 3 var h3:Number = uuu - uu; // calculate basis function 4 var t1x:Number = tansion*(p2.x - p0.x); var t1y:Number = tansion*(p2.y - p0.y); var t2x:Number = tansion*(p3.x - p1.x); var t2y:Number = tansion*(p3.y - p1.y); x = h0*p1.x + h1*p2.x + h2*t1x + h3*t2x; y = h0*p1.y + h1*p2.y + h2*t1y + h3*t2y;
graphics.lineTo(x,y); } } } } }
|
Код | package { public class Vector { public var x:Number; public var y:Number; public function Vector(x:Number,y:Number) { this.x = x; this.y = y; } } }
|
Код | package { import flash.display.Sprite; import flash.display.Graphics; import flash.ui.Keyboard; import flash.events.Event;
public class convertS extends Sprite { public function drawPlus(target:Graphics,x:Number,y:Number,r:Number):void { target.moveTo(x+r,y); target.lineTo(x-r,y); target.moveTo(x,y+r); target.lineTo(x,y-r); } public function convertS() { var pList:Array = new Array(); pList.push(new Vector(50, 250)); pList.push(new Vector(100, 300)); pList.push(new Vector(150, 200)); pList.push(new Vector(200, 250)); pList.push(new Vector(250, 300)); pList.push(new Vector(300, 350)); pList.push(new Vector(350, 320)); var sbuf:Sprite = new Sprite(); sbuf.graphics.clear(); sbuf.graphics.lineStyle(1); addChild(sbuf); for (var i:Number = 0;i<pList.length;i++) { var v:Vector = pList[i]; // drawPlus(sbuf.graphics,v.x,v.y,2); } var dbuf:Sprite = new Sprite(); dbuf.graphics.lineStyle(1); addChild(dbuf); SmoothLine.draw(dbuf.graphics,pList,0.6,0.0002); } } }
|
переводить в as 2 лень, это ActionScript 3. Но смысл я думаю понять можно. |