Numpy求空间向量夹角余弦以及平面法向量

求两向量余弦角以及其平面法向量:

import numpy as np

def calculate_p_vector(x=np.array([1,0,0]),y=np.array([0,1,0]),z=np.array([0,0,1])):
    xy_v=y-x
    xz_v=z-x
    xy_xz_dot=np.dot(xy_v,xz_v)#求点积
    norm_xy=np.linalg.norm(xy_v)#求模
    norm_xz=np.linalg.norm(xz_v)
    cos_xy_xa=xy_xz_dot/(norm_xy*norm_xz)#cos(π/3)
    angle_radians=np.arccos(cos_xy_xa)#π/3
    angle_degree=np.degrees(angle_radians)#60度   
    vector_P=np.cross(xy_v,xz_v)    #叉乘,计算法向量。1,1,1
    print(vector_P)
calculate_p_vector()

由上可得余弦角以及法向量

接下来需要利用matplotlib的三角剖分库tri对一系列点进行三角剖分,

验证1:可以用自己定义的三角形网格进行3d绘图,ax.plot_trisurf()

验证2:可以利用tri库自带的mtri.LinearTriInterpolator()的__call__()方法对3d图形面上的点的z值进行计算

验证3:是否可以利用tri自带的calculate_plane_coefficients()函数对所有三角形面的平面方程系数进行计算

fig_4=plt.figure()
ax_4=fig_4.add_subplot(111,projection='3d')
x=np.array([0,1,2])
y=np.array([0,1])
u,v=np.meshgrid(x,y)
u,v=u.flatten(),v.flatten()
t=np.array([[0,1,3],[1,3,4],[1,4,5],[1,2,5]])
z=np.array([1,0,1,0,0,0])
tr=mtri.Triangulation(u,v,triangles=t)
ax_4.plot_trisurf(tr,z)
plt.show()

证明可以自定义绘制三角形3d图。验证1通过

h=mtri.LinearTriInterpolator(tr,z)
print(h.__call__(0.5,0.5))    #0.0
print(h.__call__(0.25,0.25))    #0.5
print(h.__call__(0.25,0.75))    #0.0

验证2大致通过

ve=tr.calculate_plane_coefficients(z)
print(ve)

得到的值与法向量值很明显与3d面上的法向量值不一致,可能是我还没弄明白数学定义,也可能是没用好这个方法。

验证3暂时未通过,还暂时没弄明白怎么用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值