Speed improvement for volume and centroid.

This commit is contained in:
Adrian Mariano 2020-03-30 19:17:27 -04:00
parent 857e7a94fb
commit 49603a4fed

View file

@ -345,6 +345,9 @@ module vnf_polyhedron(vnf, convexity=2) {
} }
// Function: vnf_volume() // Function: vnf_volume()
// Usage: // Usage:
// vol = vnf_volume(vnf); // vol = vnf_volume(vnf);
@ -353,10 +356,11 @@ module vnf_polyhedron(vnf, convexity=2) {
// no holes; otherwise the results are undefined. Returns a positive volume if face direction is clockwise and a negative volume // no holes; otherwise the results are undefined. Returns a positive volume if face direction is clockwise and a negative volume
// if face direction is counter-clockwise. // if face direction is counter-clockwise.
function vnf_volume(vnf) = function vnf_volume(vnf) =
let(vnf = vnf_triangulate(vnf)) let(vnf = vnf_triangulate(vnf),
vert=vnf[0])
sum([ sum([
for(face_index=vnf[1]) let( for(face_index=vnf[1]) let(
face = select(vnf[0], face_index), face = select(vert, face_index),
n = cross(face[2]-face[0],face[1]-face[0]) n = cross(face[2]-face[0],face[1]-face[0])
) face[0] * n ) face[0] * n
])/6; ])/6;
@ -373,10 +377,11 @@ function vnf_volume(vnf) =
function vnf_centroid(vnf) = function vnf_centroid(vnf) =
let( let(
vnf = vnf_triangulate(vnf), vnf = vnf_triangulate(vnf),
vert = vnf[0],
val=sum([ val=sum([
for(face_index=vnf[1]) for(face_index=vnf[1])
let( let(
face = select(vnf[0], face_index), face = select(vert, face_index),
n = cross(face[2]-face[0],face[1]-face[0]) n = cross(face[2]-face[0],face[1]-face[0])
) [ ) [
face[0] * n, face[0] * n,