我必须在 3D 空间中找到两个向量,a
和b
已知c
的a x b = c
。我还知道一个约束,假设a_y = 0
所以我必须在(c_x)x+(c_y)y+(c_z)z=0
平面上寻找这 2 个向量,对于向量a
我可以将其简化为(c_x)x+(c_z)z=0
对于向量b
因为它垂直于a
,它也必须在平面和(c_x)x+(c_y)y+(c_z)z=0
平面(a_x)x+(a_z)z=0
交。
添加交叉积方程后,我有4
方程和5
未知数(a_x,a_z,b_x,b_y,b_z)
。我该如何解决这个问题?
提前感谢。
编辑:也许解释我需要这些会以某种方式有所帮助.
我有相机方向矢量,我需要指向屏幕右侧的矢量,第二个指向上方。
-
问题定义
A,B=? C=! Ay=! A x B = C
由于垂直性,点和叉积的隐含性质:
(A.C) = 0 (B.C) = 0 |A|.|B| = |C|
-
将其中一个向量的
length
设置为任何已知的常量,例如1
|A|=1 |B|=|C|
约翰·默勒在他的评论中也提到了这一点
-
计算
A
因此,
|A|=1
长度和(A.C)=0
的点积,因为它们是垂直的,因此:Ax^2 + Ay^2 + Az^2 = 1 Ax.Cx + Ay.Cy + Az.Cz = 0
这是
2
方程组,2
未知数,所以解决它。这将导致2
解决方案选择非零。 -
计算
B
我们知道
B
垂直于C
所以(B.C)=0
所以把约束放在一起:A x B = C Bx.Cx + By.Cy + Bz.Cz = 0 Bx^2 + By^2 + Bz^2 = Cx^2 + Cy^2 + Cz^2
如果你展开叉积,你会得到
5
方程和3
未知数。所以求解系统(选择任何3
非平凡方程)。
PS似乎这是为了生成您的NEH矩阵类比
因此,如果是这种情况,所有 3 个向量都彼此垂直,而一个指向特定方向(Up
或North
...),并且所有向量的大小通常1
。
因此,让我们假设D
向量是已知的对齐向量:
A'= C x D
B = C x A'
A = C x B
您可以更改操作数的顺序以获取所需的方向。如果D
未知,那么您可以使用(1,0,0)
或(0,1,0)
或(0,0,1)
选择与C
不平行的...或拥有最大的(C.D)
.另请查看:
- 如何找到视点坐标?
[注释]
点积:(A.B)=Ax.Bx+Ay.By+Az.Cz
交叉积:A x B
长度:|A| = sqrt (Ax^2 + Ay^2 + Az^2)