点在直线的投影坐标 n维向量投影坐标 几何投影坐标
一、点在直线的投影坐标
如下图所示,直线l1:y=kx+b,直线外有一点P(x0, y0),问:点P在直线上的投影坐标为多少呢?

求点P的投影坐标,即是求过点P(x0, y0)的直线l2垂直于直线l1的交点M。由于两条直线相互垂直,则有:k1k2=-1,设过P点的直线l2为:y-y0=-k-1(x-x0),两条直线的交点为M(x1, y1),那么点P在直线l1的投影为:

以下是Matlab求点P在直线y=kx+b的投影坐标:
clc;clear all; p=[4 4]; %点p k=2; %直线斜率 b=1; X=[0:0.1:10]; Y=k*X+b; %y=kx+b的直线 %% 计算投影点M(x1,y1) x1=(k*(p(2)-b)+p(1))/(k*k+1); y1=k*x1+b; M=[x1 y1] %点P往直线y=kx+b投影后的坐标 %% 绘图 figure(); hold on;axis equal %等比例显示 axis([0 10 0 10]) plot(X,Y,'g'); %绘制y=kx+b的直线 plot(p(1),p(2),'*k'); plot(M(1),M(2),'xr'); title('点往直线投影'); xlabel('X') ylabel('Y') grid on
二、 点在某方向上的投影坐标
w1
=[1 2]
,
w2
=[3 4],问w2在w1的投影坐标为多少?
转为
“点在直线的投影坐标”,w1的直线斜率为k=2,所以w1直线可表示为y=kx,向量w2即为点P=(3,4),即用下列公式,直接求解即可:
这种方法,简单也易于理解,不过也繁琐,下面用线性代数几何应用的方法
(2)向量投影法:将问题转为“向量w2在向量w1方向的投影”(这是我做Fisher线性判别,样本投影到直线时,总结出来的,应该没错吧):

思路:用u表示w1方向的单位向量(即上图中的绿色剪头u,也是w1归一化后的单位向量),向量w2在向量w1方向的投影坐标,即为向量OM,由几何知识得:

上式中,u是向量w1的单位向量,即:

利用上式,可以得到向量w2在向量w1方向的投影坐标,即点P=(3,4)在直线w1的投影坐标为:

对于Matlab强大的矩阵运算来说,这种运算再适合不过了!!!!!!
(3)推广到d维投影的情况:设有n×d的坐标矩阵A(矩阵A中,共有n行,每行为一个向量,每个向量是d维),坐标矩阵A往某一方向w投影时,其投影坐标矩阵M为:

例如:坐标矩阵A=[ 1 4;2 7;4 5;4 2;3 2;5 6],这是6×2的坐标矩阵,其投影坐标如图所示:

clc;clear all; %p=[2 6]; %矩阵点p A=[ 1 4;2 7;4 5;4 2;3 2;5 6]; k=2; %直线斜率 X=[0:0.1:10]; Y=k*X; %y=kx的直线 wk=[1 k]; %投影的直线方向 wk=wk/sqrt(sum(wk.^2)); %归一化,变为模为1的单位矢量wk wd= A*wk'*wk; figure hold on; axis equal %等比例显示 axis([0 10 0 10]) plot(A(:,1),A(:,2),'*b'); plot(X,Y,'k'); plot(wd(:,1),wd(:,2),'xr'); xlabel('X1') ylabel('X2') grid on
(4)特别说明
:
强大的
矩阵运算来说,是非常好的,希望对大家有用,娃哈哈~!
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208719.html原文链接:https://javaforall.net
