для ленивых

Код:
package {
import flash.display.Sprite;
import flash.geom.Point;
import flash.events.Event;
public class test extends Sprite
{
public function test()
{
this.addEventListener(Event.ENTER_FRAME,enterFrame);
}
public function enterFrame(e:Event):void
{
var p0:Point = new Point(40,200);
var p1:Point = new Point(mouseX,mouseY);
var A:Point = new Point(100,100);
var B:Point = new Point(200,200);
graphics.clear();
graphics.lineStyle(1,0xff0000);
var p:Point = lineline(p0,p1,A,B);
graphics.moveTo(p0.x,p0.y);
graphics.lineTo(p1.x,p1.y);
graphics.moveTo(A.x,A.y);
graphics.lineTo(B.x,B.y);
graphics.drawCircle(p.x,p.y,5);
}
public function lineline(p0:Point,p1:Point,A:Point,B:Point):Point
{
var x:Array = kramer2([(p1.x-p0.x),-(B.x-A.x),p1.y-p0.y,-(B.y-A.y)],[-p0.x+A.x,-p0.y+A.y]);
if(x[0]<0||x[0]>1||x[1]<0||x[1]>1)graphics.lineStyle(1);
return new Point(p0.x+(p1.x-p0.x)*x[0],p0.y+(p1.y-p0.y)*x[0]);
}
private function kramer2(A:Array, B:Array):Array {
var o:Number = A[0]*A[3]-A[1]*A[2];
return [(B[0]*A[3]-A[1]*B[1])/o, (A[0]*B[1]-B[0]*A[2])/o];
}
}
}