flash on 2013-9-3
♥0 |
Line 194 |
Modified 2013-09-03 17:32:47 |
MIT License
archived:2017-03-30 22:50:20
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/rVOb
*/
package {
import flash.text.TextField;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest()
{
vecVert = new Vector.<Number>;
vecFace = new Vector.<int>;
var i:int;
var k:int;
var mw:int;
var mh:int;
var cw:Number;
var ch:Number;
var sx:Number;
var sy:Number;
sx = 64;
sy = 64;
cw = 32;
ch = 32;
mw = 8;
mh = 8;
var f:int;
f = 0;
for (i = 0; i < mh; i++)
{
for (k = 0; k < mw; k++)
{
vecVert.push(sx+k*cw + Math.random()*(cw*0.5));
vecVert.push(sy+i*ch + Math.random()*(ch*0.5));
}
}
var ek:int;
var ei:int;
var yt:int;
ek = mw - 1;
ei = mh - 1;
for (i = 0; i < ei; i++)
{
yt = i *mw;
for (k = 0; k < ek; k++)
{
if (Math.random() < 0.2) { continue; }
vecFace.push(0+k+yt);
vecFace.push(1+k+yt);
vecFace.push(0+k+mw+yt);
vecFace.push(1+k+yt);
vecFace.push(1+k+mw+yt);
vecFace.push(0+k+mw+yt);
}//nextk
}//nexti
/*
vecTest = new Vector.<xVert>(vecVert.length/2, false);
var num:int;
num = vecTest.length;
for (i = 0; i < num; i++) { vecTest[i] = new xVert(); }
num = vecFace.length;
// var f:int;
f = 0;
for (i = 0; i < num; i+= 3)
{
vecTest[ vecFace[i] ].vecFace.push(f);
vecTest[ vecFace[i+1] ].vecFace.push(f);
vecTest[ vecFace[i+2] ].vecFace.push(f);
f += 1;
}//nexti
*/
vecNode = new Vector.<xNode>(vecFace.length/3, false);
var ax:Number; var ay:Number;
var bx:Number; var by:Number;
var cx:Number; var cy:Number;
// var f:int;
var m:int;
var node:xNode;
var num:int;
num = vecFace.length;
m = 0;
for (i = 0; i < num; i += 3)
{
node = new xNode();
vecNode[m] = node;
f = vecFace[i] * 2;
ax = vecVert[f];
ay = vecVert[f+1];
f = vecFace[i+1] * 2;
bx = vecVert[f];
by = vecVert[f+1];
f = vecFace[i+2] * 2;
cx = vecVert[f];
cy = vecVert[f+1];
node.va = vecFace[i];
node.vb = vecFace[i+1];
node.vc = vecFace[i+2];
node.cx = (ax+bx+cx)/3;
node.cy = (ay+by+cy)/3;
m += 1;
}//nexti
var nb:xNode;
num = vecNode.length
for (i = 0; i < num; i += 1)
{
node = vecNode[i];
for (k = i+1; k < num; k += 1)
{
nb = vecNode[k];
var s:int;
s = 0;
if (node.va == nb.va ||
node.va == nb.vb ||
node.va == nb.vc) { s += 1;}
if (node.vb == nb.va ||
node.vb == nb.vb ||
node.vb == nb.vc) { s += 1;}
if (node.vc == nb.va ||
node.vc == nb.vb ||
node.vc == nb.vc) { s += 1;}
if (s== 2)
{
node.vecNext.push(nb);
nb.vecNext.push(node);
}
}//nextk
}//nexti
deb = new TextField();
deb.mouseEnabled = false;
deb.width = 320;
deb.height = 240;
addChild(deb);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecVert:Vector.<Number>; //2 num/vertex
public var vecFace:Vector.<int>; //3 int /tri
// public var vecTest:Vector.<xVert>;
public var vecNode:Vector.<xNode>;
public var deb:TextField;
public function onEnter(e:Event):void
{
var i:int;
var num:int;
graphics.clear();
graphics.lineStyle(1, 0);
/*
num = vecVert.length;
for (i = 0; i < num; i+= 2)
{
graphics.drawCircle(vecVert[i], vecVert[i+1], 3);
}//nexti
*/
num = vecFace.length;
var ax:Number; var ay:Number;
var bx:Number; var by:Number;
var cx:Number; var cy:Number;
var f:int;
for (i = 0; i < num; i += 6)
{
f = vecFace[i] * 2;
ax = vecVert[f];
ay = vecVert[f+1];
f = vecFace[i+1] * 2;
bx = vecVert[f];
by = vecVert[f+1];
f = vecFace[i+2] * 2;
cx = vecVert[f];
cy = vecVert[f+1];
graphics.beginFill(0x808080,0.5);
graphics.moveTo(ax,ay);
graphics.lineTo(bx,by);
graphics.lineTo(cx,cy);
graphics.lineTo(ax,ay);
graphics.endFill();
f = vecFace[i+3] * 2;
ax = vecVert[f];
ay = vecVert[f+1];
f = vecFace[i+4] * 2;
bx = vecVert[f];
by = vecVert[f+1];
f = vecFace[i+5] * 2;
cx = vecVert[f];
cy = vecVert[f+1];
graphics.beginFill(0x707070,0.5);
graphics.moveTo(ax,ay);
graphics.lineTo(bx,by);
graphics.lineTo(cx,cy);
graphics.lineTo(ax,ay);
graphics.endFill();
}//nexti
num = vecNode.length;
var node:xNode;
var k:int;
var nk:int;
var nb:xNode;
var vec:Vector.<xNode>;
for (i = 0; i < num; i++)
{
node = vecNode[i];
graphics.drawCircle(node.cx, node.cy, 2);
vec = node.vecNext;
nk = vec.length;
for (k = 0; k < nk; k++)
{
nb = vec[k];
graphics.moveTo(node.cx,node.cy);
graphics.lineTo(nb.cx, nb.cy);
}//nextk
}//nexti
}//onenter
}//classend
}
import flash.utils.Dictionary;
internal class xNode
{
public var cx:Number = 0;
public var cy:Number = 0;
public var va:int = 0;
public var vb:int = 0;
public var vc:int = 0;
public var vecNext:Vector.<xNode> = new Vector.<xNode>(0, false);
}//xnode
/*
internal class xVert
{
public var vecFace:Vector.<int> = new Vector.<int>(0, false);
}//xvert
*/