flash on 2013-1-29
♥0 |
Line 140 |
Modified 2013-01-29 22:17:14 |
MIT License
archived:2017-03-30 22:53:54
ActionScript3 source code
/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/x1LE
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public var vecNode:Vector.<wNode>;
public var vecVert:Vector.<wVert>;
public function FlashTest()
{
var a:wNode;
vecNode = new Vector.<wNode>(0,false);
a = new wNode();
a.cx+=200;
a.cy+=200;
a.mx = a.cx;
a.my = a.cy;
vecNode.push(a);
a = new wNode();
a.cx += 200;
a.cy = 60 + 200;
a.ang = 1.57;
a.mx = a.cx;
a.my = a.cy;
a.mang = a.ang;
vecNode.push(a);
a = new wNode();
a.cx = 200;
a.cy = 120 + 200;
a.ang = 0.71;
a.mx = a.cx;
a.my = a.cy;
a.mang = a.ang;
vecNode.push(a);
vecVert = new Vector.<wVert>(0,false);
var i:int;
var w:wVert;
for (i = 0; i < 32; i++)
{
w = new wVert();
w.cx = Math.random()*50 + 200 - 25;
w.cy = Math.random()*200 + 200 - 25;
w.par = getClose(w.cx,w.cy);
w.tx = w.cx;
w.ty = w.cy;
vecVert.push(w);
}//nexti
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public function getDist(dx:Number, dy:Number):Number
{ return Math.sqrt(dx*dx + dy*dy); }
public function getClose(ax:Number, ay:Number):wNode
{
var i:int;
var num:int;
var ret:wNode;
var b:wNode;
var dist:Number;
var d:Number;
num = vecNode.length;
ret = vecNode[0];
dist = getDist(ax-ret.cx, ay -ret.cy );
for (i = 1; i < num; i++)
{
b = vecNode[i];
d = getDist(ax-b.cx, ay - b.cy);
if (d > dist) { continue;}
ret = b;
dist = d;
}//nexti
return ret;
}//getclose
public function onEnter(e:Event):void
{
var i:int;
var num:int;
var a:wNode;
var v:wVert;
graphics.clear();
graphics.lineStyle(1,0);
num = vecNode.length;
a = vecNode[0];
a.ang += 0.02;
a = vecNode[1];
a.ang -= 0.02;
a = vecNode[2];
a.ang += 0.04;
for (i = 0; i < num; i++)
{
a = vecNode[i];
graphics.drawCircle(a.cx, a.cy, 4);
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(a.cx+Math.cos(a.ang)*a.size, a.cy+Math.sin(a.ang)*a.size);
}//nexti
num = vecVert.length;
for (i = 0; i < num; i++)
{
v = vecVert[i];
graphics.drawCircle(v.cx, v.cy, 2);
}//nexti
graphics.lineStyle(1, 0xFF0000);
var kx:Number;
var ky:Number;
var ka:Number;
var jx:Number;
var jy:Number;
for (i = 0; i < num; i++)
{
v = vecVert[i];
a = v.par;
kx = a.cx - a.mx;
ky = a.cy - a.my;
ka = a.ang - a.mang;
jx = v.cx - a.mx;
jy = v.cy - a.my;
v.tx = jx * Math.cos(ka) - jy*Math.sin(ka) + kx;
v.ty = jx * Math.sin(ka) + jy*Math.cos(ka) + ky;
v.tx += a.mx;
v.ty += a.my;
// v.tx = v.cx + kx;
// v.ty = v.cy + ky;
graphics.drawCircle(v.tx, v.ty, 2);
}//nexti
}//onenter
}//classend
}
internal class wVert
{
public var cx:Number = 0;
public var cy:Number = 0;
public var par:wNode = null;
public var tx:Number = 0;
public var ty:Number = 0;
}//vert
internal class wNode
{
public var cx:Number = 0;
public var cy:Number = 0;
public var ang:Number = 0;
public var size:Number = 16;
public var mx:Number = 0;
public var my:Number = 0;
public var mang:Number = 0;
}//wnode