According to a proof by Dr. Robert Gray, at one time archived on a Synergetics listserv, any tetrahedron of IVM vertexes (assuming non-coplanar) will have a whole number volume.
In this Notebook, we randomly generate IVM tetrahedrons and compute their volumes. Within the error of floating point, we demonstrate this result.
from tetravolume import Qvector
from itertools import permutations
combos = set()
for combo in permutations((0,1,1,2)):
combos.add(combo)
combos = list(combos)
combos
[(0, 1, 1, 2), (1, 2, 0, 1), (0, 2, 1, 1), (0, 1, 2, 1), (2, 1, 0, 1), (1, 1, 2, 0), (1, 2, 1, 0), (2, 1, 1, 0), (1, 0, 2, 1), (2, 0, 1, 1), (1, 0, 1, 2), (1, 1, 0, 2)]
One frequency:
import random
def any_ball():
# random coefficients for arbitrary choice of vectors...
coeffs = [random.randint(0, 300) for _ in range(12)]
vectors = ([coeffs[i] * Qvector(combos[i]) for i in range(12)])
vector_sum = Qvector((0,0,0,0))
for v in vectors:
vector_sum = vector_sum + v
return vector_sum
any_ball()
ivm_vector(a=365, b=159, c=336, d=0)
A,B,C,D = any_ball(), any_ball(), any_ball(), any_ball()
lengths = [("AB", (A-B).length()),
("AC", (A-C).length()),
("AD", (A-D).length()),
("BC", (B-C).length()),
("CD", (C-D).length()),
("DB", (D-B).length())]
lengths
[('AB', 373.0321701944753), ('AC', 333.39616074574104), ('AD', 476.14808620848197), ('BC', 534.9635501601955), ('CD', 544.9155897935019), ('DB', 280.3194606159194)]
from tetravolume import Tetrahedron
t = Tetrahedron(*[lengths[i][1] for i in range(6)])
t.ivm_volume()
44190451.00000004
def demo():
A,B,C,D = any_ball(), any_ball(), any_ball(), any_ball()
lengths = [("AB", (A-B).length()),
("AC", (A-C).length()),
("AD", (A-D).length()),
("BC", (B-C).length()),
("CD", (C-D).length()),
("DB", (D-B).length())]
t = Tetrahedron(*[lengths[i][1] for i in range(6)])
return t.ivm_volume()
demo()
14170140.999999965
t.xyz_volume()
41663156.754389174
from IPython.display import YouTubeVideo
YouTubeVideo("v8vjw3gCBgs") # https://youtu.be/v8vjw3gCBgs