给定一个轴的矢量,如何找到其他两个轴的矢量?

时间:2010-06-15 22:24:43

标签: math vector rotation

这是一个数学问题,我不确定该怎么办。矢量未与轴对齐,因此仅围绕x,y或z旋转90度不一定会给我其他轴。

4 个答案:

答案 0 :(得分:17)

我可以想到你可能会问的几个不同的场景。


鉴于:预先存在的坐标系

  • 在2D系统中,您的轴/基础始终为[1,0][0,1] - x y 轴。< / p>

  • 在3D系统中,您的轴/基础始终为[1,0,0][0,1,0][0,0,1] - x y z


给定:任意基础2D坐标系中的一个轴

如果在任意基础2D坐标系中有一个轴,则另一个轴是正交矢量。

正交旋转矢量逆时针

[x_new, y_new] = [ -y_old, x_old]

正交旋转矢量顺时针

[x_new, y_new] = [ y_old, -x_old]

总结:

Given: x-axis = [ a,  b]
Then:  y-axis = [-b,  a]

Given: y-axis = [ c,  d]
Then:  x-axis = [ d, -c]

给定:任意基础3D坐标系中的两个轴

为此,请找到交叉产品。

[a,b,c] x [d,e,f] = [ b*f - c*e, c*d - a*f, a*e - b*d ]

遵循以下三条准则:

  • x 轴)x( y 轴)=( z 轴)
  • y 轴)x( z 轴)=( x 轴)
  • z 轴)x( x 轴)=( y 轴)

给定:任意基础3D坐标系中的一个轴

没有足够的信息来查找 唯一解决方案此问题。这是因为,如果查看第二种情况(任意基础2D坐标系中的一个轴),首先需要找到正交向量。但是,在3D空间中存在无限量的可能正交向量到单个轴!

但是,您可以找到一种可能的解决方案。

通过查找任何向量[d,e,f]来找到这些正交向量中的任意一个的一种方法:

[a,b,c] = original axis
[d,e,f] = arbitrary orthogonal axis (cannot be [0,0,0])

a*d + b*e + c*f = 0

例如,如果您的原始轴是[2,3,4],则您将解决:

2 * d + 3 * e + 4 * f = 0

也就是说,满足这个的{em>任何值[d,e,f]是一个令人满意的正交向量(只要它不是[0,0,0])。例如,人们可以选择[3,-2,0]

2 * 3 + 3 *-2 + 4 * 0 = 0
  6   +  -6   +   0   = 0

正如你所看到的,一个适用的“公式”是[d,e,f] = [b,-a,0] ......但还有许多其他的方法也可以起作用;事实上,有无限的!

找到两个轴[a,b,c][d,e,f]后,您可以使用[a,b,c][d,e,f]作为x,将其缩减回上一个案例(案例3)和y轴(或你需要的任何轴,针对你的具体问题)。


<强>正常化

请注意,随着您不断进行点积和交叉产品,您的向量将开始变得越来越大。根据您的需要,可能不需要这样做。例如,您可能希望基础向量(坐标轴)的大小/长度都相同。

将任何向量([0,0,0]除外)转换为单位向量(长度为1的向量,与原始向量的方向相同):

r  = [a,b,c]   
v  = Sqrt(a^2 + b^2 + c^2)   <-- this is the length of the original vector
r' = [ a/v , b/v , c/v ]

其中r'表示r的单位向量 - 长度为1的向量指向与r相同的方向。一个例子:

r  = [1,2,3]
v  = Sqrt(1^2 + 2^2 + 3^2) = Sqrt(13) = 3.60555  <-- this is the length of the original vector
r' = [0.27735, 0.55470, 0.83205]

现在,如果我想要一个长度为5的同一方向r的向量,我只需乘以r' * 5,即[a' * 5, b' * 5, c' * 5]

答案 1 :(得分:3)

只有一个轴是不够的,因为仍然有无数个轴可以在垂直平面内。

如果您设法获得另一个轴,则可以使用交叉产品来查找第三个轴。

答案 2 :(得分:1)

如果你有一个向量(x,y,z)你可以得到一个垂直向量作为(y,-x,0)(点积为x yy x + 0 * z = 0)

然后你取两者的交叉乘积来得到剩下的垂直向量: (x,y,z)×(y,-x,0)=(0y + zx,yz-0x,-x²-y²)=(zx,yz,-x²-y²)

答案 3 :(得分:0)

您是在谈论典型的3坐标系统,例如3D引擎中使用的系统吗?

只有一个矢量,你找不到另外两个,唯一的信息就是它们所在的平面......但是如果它们与唯一的一个矢量垂直,它们也可以是任意角度有