我们在3d中有基础,Vx
=(1,0,0),Vy
=(0,1,0),Vz
=(0,0,1) ,它通过(旋转)矩阵M分别转换为Vx'
,Vy'
,Vz'
。所以我们有3个方程式:
M * Vx = Vx'
M * Vy = Vy'
M * Vz = Vz'
因此,对于矩阵M的9个分量,我们有9个线性方程。
现在我需要以A * m = b
的形式转换这个等式(用numpy解决它),其中m是未知M
组件的列向量,如[m11, m12, m13, m21, ...]
,A
是系数矩阵b
是系数列 - 矢量。
所以问题是,A
和b
的公式是什么?是否可以为它编写一些矩阵公式?或者,是否有任何工具可以帮助编写每个组件的公式?
答案 0 :(得分:0)
实际上这很容易。
矩阵A
|Vx 000 000|
|000 Vx 000|
A = |000 000 Vx|
|Vy 000 000|
|000 Vy 000|
....
在此表示法中考虑Vx
是3个标量Vx1, Vx2, Vx2
(Vx的x,y,z分量),因此矩阵为9x9。
b是来自V'组分的垂直堆积的列向量
|Vx'|
b = |Vy'|
|Vz'|
这是Python / numpy的最终解决方案:
import numpy as np
def solve_3vector_equation(v1, v2, v3, v1_, v2_, v3_):
"""
Solves linear equation system:
M * v1 = v1_
M * v2 = v2_
M * v3 = v3_
Where M is 3x3 matrix, v... - 3d vectors
"""
A = np.zeros((9, 9))
vs = [v1, v2, v3]
vs_ = [v1_, v2_, v3_]
for i in range(3):
for j in range(3):
A[i * 3 + j, j * 3:(j + 1) * 3] = vs[i]
b = np.hstack(vs_)
return np.linalg.solve(A, b).reshape((3, 3))