如何基于两个几乎垂直的向量创建正交基?

时间:2013-02-01 02:55:13

标签: matlab orthogonal

我正在尝试创建一个基于两个“几乎”垂直向量的正交坐标系,这些向量是从医学图像中推导出来的。我有两个向量,例如:

Z=[-1.02,1.53,-1.63];
Y=[2.39,-1.39,-2.8];

几乎是垂直的,因为它们的内积等于5e-4。

然后我找到他们的交叉产品来创建我的第三个基础:

X=cross(Y,Z);

即使这第三个向量与ZY也不完全正交,因为它们的内积大约为-15和-16,但我猜这几乎为零。为了使用这组矢量作为局部坐标系的正交基,我假设它们应该几乎完全垂直。我首先想到我可以通过将我的向量四舍五入到较小的十进制数字来做到这一点,但没有帮助。我想我需要找到一种方法来改变我的初始矢量,使它们更垂直,但我不知道该怎么做。

我很感激任何建议。

2 个答案:

答案 0 :(得分:3)

如上所述,Gram-Schmidt是正确的。

基本上,你想从Y中减去Z方向的Y分量(注意:你可以选择Z而不是Y)。

Z方向的Y分量由下式给出:

   dot(Y,Z)*Z/(norm(Z)^2)

(Y投射到Z上)

请注意,如果Y与Z正交,则为0。

所以:

   Y = Y - dot(Y,Z)*Z/(norm(Z)^2)

和Z保持不变。

答案 1 :(得分:0)

让V = Y + aZ Z点V = 0,因此您可以求解并得到V. 现在使用V和Z作为基础

您可能需要对矢量进行标准化并使用double类型来获得所需的精度。