code: def compute_volume(sizes, centers, normals):
      
      # the volume of a slanted triangular cone is A_triangle * (r_vec dot norm_vec) / 3.
  
      # TODO: implement normalizing normals into meshing routines (or at least have them supply normal_mags to the mesh)
  
  
      # TODO: remove this function - should now be returned by the meshing algorithm itself
      # although wd method may currently use this
      normal_mags = np.linalg.norm(normals, axis=1) #np.sqrt((normals**2).sum(axis=1))
      return np.sum(sizes*((centers*normals).sum(axis=1)/normal_mags)/3)
docs: Compute the numerical volume of a convex mesh
  
      :parameter array sizes: array of sizes of triangles
      :parameter array centers: array of centers of triangles (x,y,z)
      :parameter array normals: array of normals of triangles (will normalize if not already)
      :return: the volume (float)