flash on 2012-10-17
♥0 |
Line 78 |
Modified 2012-11-08 19:49:22 |
MIT License
archived:2017-03-30 22:57:13
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/zPkV
*/
package {
import flash.text.TextField;
import flash.utils.Proxy;
import flash.events.Event;
import flash.geom.Point;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest()
{
deb = new TextField();
addChild(deb);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var p0:Point = new Point(53,33);
public var p1:Point = new Point(70,250);
public var p2:Point = new Point(300, 90);
public var p3:Point = new Point(50, 400);
public var deb:TextField;
public function onEnter(e:Event):void
{
p3.x = mouseX;
p3.y = mouseY;
graphics.clear();
graphics.lineStyle(2, 0);
graphics.moveTo(p0.x, p0.y);
graphics.lineTo(p1.x, p1.y);
graphics.lineStyle(2,0xFF0000);
graphics.moveTo(p2.x, p2.y);
graphics.lineTo(p3.x, p3.y);
graphics.lineStyle(2, 0);
var t:Number;
t= lineLineInter(p0,p1,p2,p3);
//if (t != 999)
//graphics.drawCircle(p0.x+(p1.x-p0.x)*t,p0.y+(p1.y-p0.y)*t, 8);
var kx:Number;
var ky:Number;
kx = p0.x + (p1.x - p0.x) * t;
ky = p0.y + (p1.y - p0.y) * t;
var u:Number;
u= t;
if (u < 0) { u = 0;}
if (u > 1) { u = 1;}
/*
u = getClosep(kx, ky, p0.x,p0.y, p1.x,p1.y);
*/
var jx:Number;
var jy:Number;
jx = p0.x + (p1.x - p0.x) * u;
jy = p0.y + (p1.y - p0.y) * u;
deb.text = "t:"+t +" u: " +u;
graphics.drawCircle(kx,ky, 8);
graphics.drawCircle(jx,jy, 4);
}//onenter
public function lineLineInter(v0:Point, v1:Point, v2:Point, v3:Point):Number
{
var ua:Number;
var ub:Number;
var bot:Number;
bot = ((v3.y-v2.y)*(v1.x-v0.x))-((v3.x-v2.x)*(v1.y-v0.y));
if (bot == 0) { return 999;}
ua = (((v3.x-v2.x)*(v0.y-v2.y))-((v3.y-v2.y)*(v0.x-v2.x))) / bot;
ub = (((v1.x-v0.x)*(v0.y-v2.y))-((v1.y-v0.y)*(v0.x-v2.x))) / bot;
// if (ua > 1 || ua < 0 || ub > 1 || ub < 0) { return 999; }
if (ub > 1 || ub < 0) { return 999; }
return ua;
}//lineline
public function getClosep(px:Number, py:Number,
ax:Number, ay:Number, bx:Number, by:Number):Number
{
var vx:Number;
var vy:Number;
var dx:Number;
var dy:Number;
var h:Number;
var dotv:Number;
vx = bx - ax;
vy = bx - ay;
dx = px - ax;
dy = py - ay;
h = (vx*dx + vy*dy) / (vx*vx + vy*vy);
//if (h < 0.0) { h = 0.0; }
//if (h > 1.0) { h = 1.0; }
return h;
}//getclose
}//classend
}