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

8

这是一个数学问题,我不确定如何解决。该向量未与任何轴对齐,因此仅围绕x、y或z旋转90度并不能给出其他轴。

4个回答

20

我可以想到您可能在问几种不同的情况。


给定: 一个预先存在的坐标系

  • 在2D系统中,您的轴/基础始终为[1,0][0,1]--xy轴。

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


给定: 一个任意基础下的二维坐标系统中的一个轴

如果您在任意基础下的二维坐标系统中有一个轴,则另一个轴是正交向量。

要逆时针将向量旋转90度:

[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轴)

已知:三维坐标系中的一个轴

现有的信息不足以找到此问题的唯一解。这是因为,在第二种情况(任意基础下的二维坐标系),需要先找到一个正交向量,但是在三维空间中,单个轴有无限多个可能的正交向量!

然而,可以找到其中一个可能的解。

通过找到任何向量 [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

也就是说,任何满足条件的[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]后,您可以将其缩小回到以前的情况(第3种情况),使用[a,b,c][d,e,f]作为您的x和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]

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


如果他正在使用模拟或游戏软件,他可能已经有了物体的旋转,这将使得找到另外两个轴变得足够容易。 - LanceH
2
这个问题说实话相当模糊 =/ - Justin L.
所以,简而言之,Justin:首先使用点积规则,即两个正交向量的点积为零,来得到第二轴。然后使用这两个轴的叉积来得到第三轴。我理解这一切。我唯一的问题是,如何得到任意正交轴,比如一个向量{4.418020,-6.474061,-6.210284}的轴? - Stoff81
你是如何选择[3,-2,0]作为你的正交轴的? - Stoff81
好的,我明白你是如何得到[b, -a, 0]的,但这并不适用于任何向量,对吧?它只适用于[2, 3, 4]。 - Stoff81
显示剩余3条评论

3

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

如果您成功获得另一个轴,您可以使用叉积来找到第三个轴。


当你立即说有无限数量的合适向量,并且在下一段中说明如何继续,假设找到了一个合适的向量时,“仅有一个轴不足”的说法怎么可能是真的呢? - sigfpe

1
如果您有一个向量(x,y,z),则可以得到一个垂直于它的向量为(y,-x,0)(点积为xy-yx+0*z = 0)
然后,您需要对两个向量进行叉乘以获得剩余的垂直向量: (x,y,z)×(y,-x,0)=(0y+zx,yz-0x,-x²-y²)=(zx,yz,-x²-y²)

2
让 (x,y,z)=(0,0,1)。向量 (y,-x,0) 是 (0,0,0)。那是一个零向量。 - sigfpe
@user207442:问题描述说向量未与坐标轴对齐。如果 (x,y,z)=(0,0,1),那么找到另外两个向量是很简单的。 - Ozan

0
你是在谈论像3D引擎中使用的典型三维坐标系吗?
仅凭一个向量,你无法找到另外两个向量,你所拥有的信息只有它们所在的平面...但即使它们与你所拥有的唯一一个向量垂直,它们也可以处于任何角度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接