Python:向量计算,向量与向量,向量与面,向量与体

文章目录

      • 向量
        • 向量的模(向量的长度)
        • 向量规范化
      • 向量与向量
        • 向量和向量之间的夹角(数字表示范围:[0,π],0度到180度 )
        • 向量和x轴之间夹角(数字表示范围:[-π,π] ,-180度到+180度)
        • 向量和x轴之间夹角(数字表示范围:[0,2π] ,0度到360度)
      • 向量与面
      • 向量与体
      • 点与面
        • 将点投影到面
        • 点到面的距离


向量

向量的模(向量的长度)

l_norm = (lx**2+ly**2)**0.5

向量规范化

l_norm = (lx**2+ly**2)**0.5
lx = lx/l_norm
ly = ly/l_norm

向量与向量

向量和向量之间的夹角(数字表示范围:[0,π],0度到180度 )

import numpy as np
import scipy.linalg as laa = np.array([1,0])
b = np.array([0,0])
c = np.array([1,-1])ba = a - b
bc = c - bcosine_angle = np.dot(ba, bc) / (la.norm(ba) * la.norm(bc))
angle = np.arccos(cosine_angle)print (np.degrees(angle))

向量和x轴之间夹角(数字表示范围:[-π,π] ,-180度到+180度)

import numpy as np
import scipy.linalg as laa = np.array([1,0])
b = np.array([0,0])
c = np.array([1,-1])ba = a - b
bc = c - bcosine_angle = np.dot(ba, bc) / (la.norm(ba) * la.norm(bc))
angle = np.arctan2(bc[1], bc[0]) - np.arctan2(ba[1], ba[0])print (np.degrees(angle))

向量和x轴之间夹角(数字表示范围:[0,2π] ,0度到360度)

import numpy as np
import scipy.linalg as laa = np.array([1,0])
b = np.array([0,0])
c = np.array([1,-1])ba = a - b
bc = c - bcosine_angle = np.dot(ba, bc) / (la.norm(ba) * la.norm(bc))
angle = np.arctan2(bc[1], bc[0]) - np.arctan2(ba[1], ba[0])if angle<0:angle = np.pi*2 + angleprint (np.degrees(angle))

向量与面

待更新...

向量与体

待更新...

点与面

将点投影到面

点到面的距离

空间上不共线的三个点P1,P2,P3确定一个平面,计算空间上某个点P4到{P1,P2,P3}组成的平面的距离,可如下计算

import numpy as npdef define_area(point1, point2, point3):"""法向量    :n={A,B,C}空间上某点:p={x0,y0,z0}点法式方程:A(x-x0)+B(y-y0)+C(z-z0)=Ax+By+Cz-(Ax0+By0+Cz0)https://wenku.baidu.com/view/12b44129af45b307e87197e1.html:param point1::param point2::param point3::param point4::return:(Ax, By, Cz, D)代表:Ax + By + Cz + D = 0"""point1 = np.asarray(point1)point2 = np.asarray(point2)point3 = np.asarray(point3)AB = np.asmatrix(point2 - point1)AC = np.asmatrix(point3 - point1)N = np.cross(AB, AC)  # 向量叉乘,求法向量# Ax+By+CzAx = N[0, 0]By = N[0, 1]Cz = N[0, 2]D = -(Ax * point1[0] + By * point1[1] + Cz * point1[2])return Ax, By, Cz, Ddef point2area_distance(point1, point2, point3, point4):""":param point1:数据框的行切片,三维:param point2::param point3::param point4::return:点到面的距离"""Ax, By, Cz, D = define_area(point1, point2, point3)mod_d = Ax * point4[0] + By * point4[1] + Cz * point4[2] + Dmod_area = np.sqrt(np.sum(np.square([Ax, By, Cz])))d = abs(mod_d) / mod_areareturn dif __name__ == '__main__':# 初始化数据point1 = [2, 3, 1]point2 = [4, 1, 2]point3 = [6, 3, 7]point4 = [-5, -4, 8]# 计算点到面的距离d1 = point2area_distance(point1, point2, point3, point4)  # s=8.647058823529413print("点到面的距离s: " + str(d1))

本文链接:https://my.lmcjl.com/post/9346.html

展开阅读全文

4 评论

留下您的评论.