python 实现三维向量之间的夹角

原理:

设  m=(x_1,y_1,z_1), n=(x_2,y_2,z_2)

                                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        cos<m,n>=\frac{m*n}{\left | m \right |*\left | n \right |}

m*n = (x_1*x_2+y_1*y_2+z_1*z_2)

\left | m \right |=\sqrt{x_1^2+y_1^2+z_1^2}

\left | n \right |=\sqrt{x_2^2+y_2^2+z_2^2}

这里求出的两个夹角的取值范围为 [0, pi]。

代码

这里方便起见,计算n个3维向量与z坐标之间的夹角。代码如下

import numpy as np
    
normal1 = np.random.rand(5, 3)  # 创建5行3列取值范围为[0,1)的数组
normal2 = np.array([0, 0, 1]).reshape(1, -1)

data_M = np.sqrt(np.sum(normal1*normal1,axis=1))
data_N = np.sqrt(np.sum(normal2*normal2,axis=1))
cos_theta = np.sum(normal1 * normal2, axis=1)/(data_M*data_N)
theta = np.degrees(np.arccos(cos_theta))  # 角点b的夹角值

print(normal1)
print(theta)

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值