Angle between 3 points in 3d space

后端 未结 4 1259
挽巷
挽巷 2020-12-15 07:17

I have 3 points containing X, Y, Z coordinates:

var A = {x: 100, y: 100, z: 80},
    B = {x: 100, y: 175, z: 80},
    C = {x: 100, y: 100, z: 120};
         


        
4条回答
  •  遥遥无期
    2020-12-15 08:03

    The same in python (with output in degrees):

    import numpy as np
    import math 
    import time
    
    def angle_2p_3d(a, b, c):       
    
        v1 = np.array([ a[0] - b[0], a[1] - b[1], a[2] - b[2] ])
        v2 = np.array([ c[0] - b[0], c[1] - b[1], c[2] - b[2] ])
    
        v1mag = np.sqrt([ v1[0] * v1[0] + v1[1] * v1[1] + v1[2] * v1[2] ])
        v1norm = np.array([ v1[0] / v1mag, v1[1] / v1mag, v1[2] / v1mag ])
    
        v2mag = np.sqrt(v2[0] * v2[0] + v2[1] * v2[1] + v2[2] * v2[2])
        v2norm = np.array([ v2[0] / v2mag, v2[1] / v2mag, v2[2] / v2mag ])
        res = v1norm[0] * v2norm[0] + v1norm[1] * v2norm[1] + v1norm[2] * v2norm[2]
        angle_rad = np.arccos(res)
    
        return math.degrees(angle_rad)
    
    
    p1 = np.array([1,0,0])
    p2 = np.array([0,0,0])
    p3 = np.array([0,0,1])
    
    start = time.time()
    angle= angle_2p_3d(p1, p2, p3)
    end = time.time()
    
    print("angle: ", angle)
    print("elapsed in: ", end - start)
    

    Output:

    angle: 90.0

    elapsed in: 8.392333984375e-05

提交回复
热议问题