【问题标题】:Align a face to a plane with numpy使用 numpy 将面与平面对齐
【发布时间】:2018-12-01 22:02:49
【问题描述】:

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

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

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

我在 Python 3 上使用 numpy。

谢谢。

【问题讨论】:

  • 在 3D 中你应该得到两个角度,然后你可以尝试导出对齐面部所需的旋转矩阵。

标签: python numpy vector 3d face


【解决方案1】:

要将单位向量旋转到第一轴,您可以使用 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

【讨论】:

  • 谢谢,我会试试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
相关资源
最近更新 更多