参考:维基百科-投影
PA 就是A的列空间的投影矩阵。比如A=[Vec1,Vec2],其中Vec1、Vec2都是列向量,向量b在A空间内的投影就是PA*b。
再通俗一点,A是一个平面,知道A里边的两个不平行的向量Vec1、Vec2,求任意一个向量b在平面A上的投影。
对于一维,就是,知道一个向量A,求向量b在A上的投影。
做了个demo:
效果:
代码:
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
public class Main extends MovieClip {
public var pO:MovieClip;
public var pA:MovieClip;
public var pB:MovieClip;
public function Main() {
// constructor code
drag(pO);
drag(pA);
drag(pB);
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
private function enterFrameHandler(e:Event):void
{
var p0:Point = new Point(pO.x, pO.y);
var p1:Point = new Point(pA.x, pA.y);
var p2:Point = new Point(pB.x, pB.y);
var p01:Point = p1.subtract(p0);
var p02:Point = p2.subtract(p0);
var A:Point = p02;
var b:Point = p01;
//
//
graphics.clear();
graphics.lineStyle(4, 0x000000, 1.0);
graphics.moveTo(p0.x, p0.y);
graphics.lineTo(p1.x, p1.y);
graphics.moveTo(p0.x, p0.y);
graphics.lineTo(p2.x, p2.y);
graphics.lineStyle(2, 0x000000, 1.0);
graphics.moveTo(p0.x + b.x, p0.y + b.y);
graphics.lineTo(p0.x + pb.x, p0.y + pb.y);
graphics.lineStyle(2, 0xff0000, 1.0);
graphics.moveTo(p0.x, p0.y);
graphics.lineTo(p0.x + pb.x, p0.y + pb.y);
}
//-----------------------------
private var curSp:Sprite;
private function drag(sp:Sprite):void{
sp.buttonMode = true;
sp.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
}
private function mouseDownHandler(e:MouseEvent):void
{
curSp = e.currentTarget as Sprite;
curSp.startDrag();
addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
addEventListener(Event.MOUSE_LEAVE, mouseUpHandler);
}
private function mouseUpHandler(e:MouseEvent):void
{
curSp.stopDrag();
curSp = null;
removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
removeEventListener(Event.MOUSE_LEAVE, mouseUpHandler);
}
private function mouseMoveHandler(e:MouseEvent):void
{
//
}
}
}可以用于求点到线段上的垂线。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。