/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/40Ku
*/
package {
import flash.text.TextField;
import flash.geom.Vector3D;
import flash.geom.Matrix3D;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public var start:wVert;
public var end:wVert;
public var vecVert:Vector.<wVert>;
public var deb:TextField;
public function FlashTest() {
deb = new TextField();
addChild(deb);
start = new wVert(0,0,0);
end = new wVert(50,-120,0);
vecVert = new Vector.<wVert>(0,false);
vecVert.push( new wVert(0,0,0) );
vecVert.push( new wVert(0,0,0) );
vecVert.push( new wVert(0,0,0) );
vecVert.push( new wVert(0,0,0) );
deb.text = " " + vecVert.length;
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var mat:Matrix3D = new Matrix3D();
public var ang:Number = 0;
public function onEnter(e:Event):void
{
var sx:Number;
var sy:Number;
var vec:Vector.<Number>;
ang += 3;
mat.identity();
mat.appendRotation(ang, Vector3D.Y_AXIS);
mat.appendRotation(ang, Vector3D.X_AXIS);
mat.appendRotation(ang, Vector3D.Z_AXIS);
vec = mat.rawData;
graphics.clear();
graphics.lineStyle(1,0);
//deb.text= "reach1" ;
sx = start.cx;
sy = start.cy;
// graphics.drawCircle(200+sx,200+sy,4);
sx = end.cx;
sy = end.cy;
// graphics.drawCircle(200+sx,200+sy,4);
var mag:Number;
var ax:Number;
var ay:Number;
var az:Number;
var bx:Number;
var by:Number;
var bz:Number;
var dx:Number;
var dy:Number;
var dz:Number;
ax = start.cx - end.cx;
ay = start.cy - end.cy;
az = start.cz - end.cz;
mag = Math.sqrt(ax*ax+ay*ay+az*az);
if (mag == 0) { return; } //nothing to draw
ax /= mag;
ay /= mag;
az /= mag;
/*
bx = vec[8];
by = vec[9];
bz = vec[10];
*/
bx = vec[2];
by = vec[6];
bz = vec[10];
/*
bx = vec[1];
by = vec[5];
bz = vec[9];
*/
dx = ay * bz - by * az;
dy = az * bx - bz * ax;
dz = ax * by - bx * ay;
dx *= 8;
dy *= 8;
dz *= 8;
vecVert[0].copyVert(start);
vecVert[0].addValue(dx,dy,dz);
vecVert[1].copyVert(start);
vecVert[1].subValue(dx,dy,dz);
vecVert[2].copyVert(end);
vecVert[2].addValue(dx,dy,dz);
vecVert[3].copyVert(end);
vecVert[3].subValue(dx,dy,dz);
/*
vecVert[0].copyVert(start);
vecVert[0].cx += 8;
vecVert[1].copyVert(start);
vecVert[1].cx -= 8;
vecVert[2].copyVert(end);
vecVert[2].cx += 8;
vecVert[3].copyVert(end);
vecVert[3].cx -= 8;
*/
var i:int;
var num:int;
var a:wVert;
num = vecVert.length;
for (i = 0; i < num; i++)
{
a = vecVert[i];
sx = vec[0]*a.cx + vec[4]*a.cy + vec[8] * a.cz;
sy = vec[1]*a.cx + vec[5]*a.cy + vec[9] * a.cz;
a.px = sx+200;
a.py = sy+200;
graphics.drawCircle(a.px,a.py,3);
// deb.text = " " +i;
}//nexti
a = vecVert[0];
graphics.moveTo(a.px,a.py);
a = vecVert[1];
graphics.lineTo(a.px,a.py);
a= vecVert[2];
graphics.lineTo(a.px,a.py);
a = vecVert[0];
graphics.lineTo(a.px,a.py);
a = vecVert[1];
graphics.moveTo(a.px,a.py);
a = vecVert[3];
graphics.lineTo(a.px,a.py);
a= vecVert[2];
graphics.lineTo(a.px,a.py);
a = vecVert[1];
graphics.lineTo(a.px,a.py);
}//onenter
}//classend
}
internal class wVert
{
public var cx:Number = 0;
public var cy:Number = 0;
public var cz:Number = 0;
public var px:Number = 0;
public var py:Number = 0;
public var pz:Number = 0;
public function wVert(x:Number, y:Number, z:Number)
{
cx = x;
cy = y;
cz = z;
}//ctor
public function subValue(x:Number, y:Number, z:Number):void
{
cx -= x; cy -= y; cz -= z;
}
public function addValue(x:Number, y:Number, z:Number):void
{
cx+=x; cy+=y; cz+=z;
}
public function setValue(x:Number, y:Number, z:Number):void
{
cx = x; cy = y; cz = z;
}
public function copyVert(v:wVert):void
{
cx = v.cx;
cy = v.cy;
cz = v.cz;
}
}//classend