【发布时间】:2018-12-01 22:02:49
【问题描述】:
我有一张由 4 个 xyz 顶点组成的脸。
我想将它与 z 轴对齐,使其平行。
如果我计算法线,我可以计算它们之间的角度,但这只是角度。我需要一个 x 旋转和一个 y 旋转。
我在 Python 3 上使用 numpy。
谢谢。
【问题讨论】:
-
在 3D 中你应该得到两个角度,然后你可以尝试导出对齐面部所需的旋转矩阵。
标签: python numpy vector 3d face
我有一张由 4 个 xyz 顶点组成的脸。
我想将它与 z 轴对齐,使其平行。
如果我计算法线,我可以计算它们之间的角度,但这只是角度。我需要一个 x 旋转和一个 y 旋转。
我在 Python 3 上使用 numpy。
谢谢。
【问题讨论】:
标签: python numpy vector 3d face
要将单位向量旋转到第一轴,您可以使用 QR decomp,如下所示:
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
【讨论】: