Imagine a 100 frequency icosasphere, meaning the 20 triangles of the icosahedron have been 3-way cross-hatched by 99 lines (100 intervals) to subdivide each into 100 by 100 subtriangles. In contrast, the icosa below is 6-frequency, not 100-frequency:
How many faces do we have? Each of twenty faces has 10,000 triangles, so 200K faces.
faces = 20 * (100 * 100)
faces
200000
We might also use the frequency formula for icosahedral numbers, to get the same answer:
# from Synergetics
F = 100
balls = 10 * F * F + 2
non_polar_balls = balls - 2
edges = non_polar_balls * 3
faces = non_polar_balls * 2
faces
200000
from math import pi, sqrt as rt2, sin, cos, radians
def sphere_xyz(r=1): # R units
"XYZ volume"
return (4/3) * pi * r**3
def sphere_ivm(r=0.5): # D units
"IVM volume"
return pi * rt2(2) * (2*r)**3
Syn3 = rt2(9/8)
interval = 1
ball_radius = 0.5
The XYZ formula for a sphere's volume, given radius, expects input in R units (R = 1).
sphere_xyz(1)
4.1887902047863905
The IVM function expects input in terms if Diameters D. These two results are for the same IVM unit-radius sphere.
sphere_ivm(0.5) # individual IVM ball in tetravolumes
4.442882938158366
sphere_ivm(0.5) / sphere_xyz(1) # Syn3
1.0606601717798214
from tetravolume import Tetrahedron as T # GdJ algorithm: edges -> tvs
Lets contemplate 200K "average tetrahedrons" that come together to approximate a sphere such as the above.
In practice, these tetrahedrons cannot all have equal surface edges, as that would make them equilateral and therefore equiangular. But 60-60-60 triangles do not produce curvature.
We need less than 360 degrees around each vertex, albeit only a little less. All these deltas (degrees less than 360) add up to 720 degrees (one tetrahedron's worth); Descartes' Deficit. Yet every triangle still has 180 degrees.
So we stipulate the surface edges "average" out to 1, meaning some edges are longer, others shorter. Our results are approximate.
Using surface area, we could say an equilateral triangle that's 1 on a side has only 43% the area of a 1 x 1 square.
tri_area_xyz = sin(radians(60))/2
tri_area_xyz
0.4330127018922193
So 200K such triangles give a total surface area (in squares) which we may use to get the radius, working backward from $R = \sqrt{A/4 \pi}$
sphere_area_xyz = 200000 * tri_area_xyz
sphere_area_xyz
86602.54037844385
radius = rt2(sphere_area_xyz / (4 * pi))
radius
83.01572858665037
sphere_ivm(radius) # smooth ball
20334617.56626723
tv = T(83, 83, 83, 1, 1, 1).ivm_volume() * 200000 # bumpy ball, yet 100% convex
tv # tetravolumes
20330272.993740145
Very close!
Only some of these get used on this page.
φ = (rt2(5)+1)/2 # golden ratio
Syn3 = rt2(9/8) # not to be confused with Smod
S = (φ**-5) / 2 # home base Smod
Cubocta = 20
SuperRT = Syn3 * Cubocta
E = (rt2(2) / 8) * (φ**-3) # home base Emod
E3 = (rt2(2) / 8)
e3 = E * (φ**-3)
S_factor = S / E # 2*sqrt(7-3*sqrt(5))
icosa = 20 * 1/S_factor
icosa
18.512295868219162