如何计算在X和Z上对齐两个向量所需的旋转角度

问题描述 投票:0回答:1

我正在尝试旋转vector1(红色),使其与3D空间中的vector2(蓝色)对齐。但是,仅应使用绕X和Z轴旋转。

“矢量样本表示”

到目前为止,我已经使用优化算法解决了这个问题,该算法试图使向量之间围绕X和Z轴的角度最小化。在大多数情况下,这种方法效果很好,但是由于我必须计算很多矢量,所以它太慢了。

我用于优化方法的代码:

vector1 = np.array([0., -1., 0.])
vector2 = np.array([0.2, -0.2, -0.5])

def find_a_c(x, *args):
    vector1, vector2 = args[0], args[1]
    angle_x, angle_z = x[0], x[1]

    # Rotation matrices to rotate around X and Z
    Rx = np.array([[1., 0., 0.],
                  [0., np.cos(angle_x), -np.sin(angle_x)],
                  [0., np.sin(angle_x), np.cos(angle_x)]])

    Rz = np.array([[np.cos(angle_z), -np.sin(angle_z), 0.],
                  [np.sin(angle_z), np.cos(angle_z), 0.],
                  [0., 0., 1.]])

    vector1 = vector1.dot(Rx).dot(Rz)

    # calulate the angle between the vectors around X and Z
    angle_x = angle_between_vectors([vector2[1], vector2[2]], [vector1[1], vector1[2]])
    angle_z = angle_between_vectors([vector2[0], vector2[1]], [vector1[0], vector1[1]])

    return np.abs(angle_x) + np.abs(angle_z)

solution = minimize(fun=find_a_c,
                    x0=[0., 0.],
                    args=(vector1, vector2))

angle_x, angle_z = solution.x[0], solution.x[1]

打印:

Angle around X: -60.46948402478365°
Angle around Z: -45.0000003467713°

现在,我正在寻找一种解决问题的分析方法。例如。一个旋转矩阵,该矩阵由两个旋转角度(围绕X和Z轴)形成,以将vector1与vector2对齐。]]

我正在尝试旋转vector1(红色),使其与3D空间中的vector2(蓝色)对齐。但是,仅应使用绕X和Z轴旋转。到目前为止,我已经通过优化来解决此问题...

python optimization vector linear-algebra
1个回答
0
投票

谢谢,我可以告诉你我的国家它坐落在斯里兰卡

© www.soinside.com 2019 - 2024. All rights reserved.