首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用numpy将面与平面对齐

使用numpy将面与平面对齐
EN

Stack Overflow用户
提问于 2018-12-01 03:40:54
回答 1查看 431关注 0票数 0

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

我想把它和z轴对齐,这样它就和它平行了。

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

我在Python 3上使用numpy。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-12-01 05:07:06

要将单位向量旋转到第一个轴,您可以使用QR分解,如下所示:

代码语言:javascript
复制
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的一列或两列

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53563870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档