三维点投影到直线上
是鄙人在做模式识别----计算Fisher线性判别时,经常需要将大量的样本点投影到某个方向上,而采用传统的几何投影方法,特别对于多维的情况,过程十分繁杂。本人补充:对于不过原点的直线,只需对点进行平移即可,也就是说,用向量投影法求得的点加上直线上的点。例如:坐标矩阵A=[ 1 4;的坐标矩阵A(矩阵A中,共有n行,每行为一个向量,每个向量是d维。点在直线的投影坐标n维向量投影坐标 几何投影坐标。点
点在直线的投影坐标 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
二、 点在某方向上的投影坐标
(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),'x
r');
-
xlabel('X1
')
-
ylabel('X2
')
-
grid on
(4)特别说明
:
更多推荐
所有评论(0)