使用numpy

时间:2018-11-30 19:40:54

标签: python numpy vector 3d face

我有一张由4个xyz顶点构成的脸。

我想将其与z轴对齐,使其与z轴平行。

如果我计算法线,则可以计算它们之间的角度,但这仅仅是角度。我需要x旋转和y旋转。

我在Python 3上使用numpy。

谢谢。

1 个答案:

答案 0 :(得分:1)

要将单位矢量旋转到第一个轴,可以使用QR反压缩,如下所示:

normal = np.random.random(3)
normal /= np.sqrt(normal@normal)
some_base = np.identity(3)
some_base[:, 0] = normal
Q, R = np.linalg.qr(some_base)
Q.T@normal
# array([-1.00000000e+00, -2.77555756e-17,  1.11022302e-16])

如您所见,您可能需要翻转Q的一两列:

if (Q.T@normal)[0] < 0:
    if np.linalg.det(Q) < 0:
        rot = (Q * [-1, 1, 1]).T
    else:
        rot = (Q * [-1, -1, 1]).T
else:
    if np.linalg.det(Q) < 0:
        rot = (Q * [1, -1, 1]).T
    else:
        rot = Q.T