flash on 2016-3-2
♥0 |
Line 94 |
Modified 2016-03-02 05:32:51 |
MIT License
archived:2017-03-30 11:39:40
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/0oyK
*/
package {
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
var b:xLine;
var ax:Number; var ay:Number;
var nx:Number; var ny:Number;
var t:Number;
var i:int; var num:int; var a:xLine;
var ta:Number; var tb:Number; var d:Number;
graphics.clear();
graphics.lineStyle(2,0);
vecLine = new Vector.<xLine>(0,false);
num = 32;
for (i=0;i<num;i+=1)
{
ta = Math.random()*6.28;
a = new xLine();
a.x0 = Math.random()*465;
a.y0 = Math.random()*465;
a.y0 = Math.random()*250 + 130;
a.x1 = a.x0 + Math.cos(ta)*128;
a.y1 = a.y0 + Math.sin(ta)*128;
a.nx = Math.sin(ta);
a.ny = -Math.cos(ta);
vecLine.push(a);
drawLine(a);
}//nexti
ax=230; ay=230;
nx =0;ny=1;
graphics.drawCircle(ax,ay, 8);
graphics.moveTo(ax+ny*500,ay+nx*-500);
graphics.lineTo(ax+ny*-500,ay+nx*500);
graphics.moveTo(ax+nx*16,ay+ny*64);
graphics.lineTo(ax,ay);
for (i=0;i<num;i+=1)
{
a = vecLine[i];
t = cutLine(a,ax,ay,nx,ny);
if (t <= 0) { graphics.lineStyle(4,0xFF); drawLine(a); continue; }
if (t >= 1) { graphics.lineStyle(4,0xFF0000); drawLine(a); continue; }
ta = (a.x0-ax)*nx + (a.y0-ay) * ny;
b = new xLine();
b.copyLine(a);
if (ta < 0)
{
a.x0 += (a.x1-a.x0)*t;
a.y0 += (a.y1-a.y0)*t;
t=1-t;
b.x1 += (b.x0-b.x1)*t;
b.y1 += (b.y0-b.y1)*t;
}
else
{
b.x0 += (b.x1-b.x0)*t;
b.y0 += (b.y1-b.y0)*t;
t=1-t;
a.x1 += (a.x0-a.x1)*t;
a.y1 += (a.y0-a.y1)*t;
}
graphics.lineStyle(4,0x00FF00); drawLine(b);
graphics.lineStyle(4,0x00FFFF); drawLine(a);
}//nexti
}//ctor
public var vecLine:Vector.<xLine>;
public function cutLine(a:xLine, ax:Number, ay:Number, nx:Number, ny:Number):Number
{ var ta:Number; var tb:Number;
ta = (a.x0-ax)*nx + (a.y0-ay) * ny; tb = (a.x1-ax)*nx + (a.y1-ay) * ny;
if (ta < 0 && tb < 0) { return 0; } if (ta > 0 && tb > 0) { return 1; }
return ta / ( (a.x0-a.x1)*nx + (a.y0-a.y1)* ny);
}//cutline
public function drawLine(a:xLine):void
{
var ax:Number; var ay:Number;
graphics.moveTo(a.x0,a.y0);
graphics.lineTo(a.x1,a.y1);
ax = a.x0 + (a.x1-a.x0)*0.5;
ay = a.y0 + (a.y1-a.y0)*0.5;
graphics.moveTo(ax,ay);
graphics.lineTo(ax+a.nx*8,ay+a.ny*8);
}//drawline
}//classend
}
internal class xLine
{
public var x0:Number = 0;
public var y0:Number = 0;
public var x1:Number = 0;
public var y1:Number = 0;
public var nx:Number = 0;
public var ny:Number = 0;
public function copyLine(a:xLine):void
{x0=a.x0;y0=a.y0;x1=a.x1;y1=a.y1;nx=a.nx;ny=a.ny; }
}//xline