b1 = np.cross(u, [1, 0, 0]) # [1, 0, 0] can be replaced by other vectors, just get a vector orthogonal to u
b2 = np.cross(u, b1)
b1, b2 = b1 / np.linalg.norm(b1), b2 / np.linalg.norm(b2)
字符串 如果你喜欢的话,我会给你一个简短的答案。 得到一个变换矩阵
B = np.array([b1, b2])
TransB = np.dot(B.T, B)
u2b = TransB.dot(u) # should be like [0, 0, 0]
3条答案
按热度按时间erhoui1w1#
Gram-Schmidt过程将执行此操作。举例来说:
字符串
获得第一个:
型
获得第二个:
型
并核实:
型
cclgggtu2#
对不起,我不能把它作为一个评论,因为缺乏声誉。
关于@behzad.nouri的回答,请注意,如果
k
不是单位向量,代码将不再给予正交向量!这样做的正确和一般的方法是减去随机向量的纵向部分。其通式为here
所以你只需要在原始代码中替换它:
字符串
zengzsys3#
假设支持正交基的向量是u。
字符串
如果你喜欢的话,我会给你一个简短的答案。
得到一个变换矩阵
型