// Gabriel's Horn: y = 1/x Surface of Revolution // 3D slice of PIST pathological manifold // Finite volume, infinite surface area // Visualized as hollow shell (the byte container surface) // Generate horn profile as a polygon // Then rotate_extrude to create the surface module horn_profile() { points = [ [0.050, 40.000], [0.250, 8.000], [0.450, 4.444], [0.650, 3.077], [0.850, 2.353], [1.050, 1.905], [1.250, 1.600], [1.450, 1.379], [1.650, 1.212], [1.850, 1.081], [2.050, 0.976], [2.250, 0.889], [2.450, 0.816], [2.650, 0.755], [2.850, 0.702], [3.050, 0.656], [3.250, 0.615], [3.450, 0.580], [3.650, 0.548], [3.850, 0.519], [4.050, 0.494], [4.250, 0.471], [4.450, 0.449], [4.650, 0.430], [4.850, 0.412], [5.050, 0.396], [5.250, 0.381], [5.450, 0.367], [5.650, 0.354], [5.850, 0.342], [6.050, 0.331], [6.250, 0.320], [6.450, 0.310], [6.650, 0.301], [6.850, 0.292], [7.050, 0.284], [7.250, 0.276], [7.450, 0.268], [7.650, 0.261], [7.850, 0.255], [8.050, 0.248], [8.250, 0.242], [8.450, 0.237], [8.650, 0.231], [8.850, 0.226], [9.050, 0.221], [9.250, 0.216], [9.450, 0.212], [9.650, 0.207], [9.850, 0.203], [10.050, 0.199], [10.250, 0.195], [10.450, 0.191], [10.650, 0.188], [10.850, 0.184], [11.050, 0.181], [11.250, 0.178], [11.450, 0.175], [11.650, 0.172], [11.850, 0.169], [12.050, 0.166], [12.250, 0.163], [12.450, 0.161], [12.650, 0.158], [12.650, 0], [0.05, 0] ]; polygon(points); } // Thick-walled horn (byte positions on surface) difference() { rotate_extrude($fn=64) horn_profile(); scale([0.95, 0.95, 0.95]) rotate_extrude($fn=64) horn_profile(); } // Byte position markers (sample every 32 positions) color([1, 0.5, 0]) { translate([0.05, -1.89, 39.96]) sphere(r=0.8, $fn=8); // n=1 translate([1.65, -1.21, 0.01]) sphere(r=0.8, $fn=8); // n=33 translate([3.25, -0.04, -0.61]) sphere(r=0.8, $fn=8); // n=65 translate([4.85, 0.41, -0.05]) sphere(r=0.8, $fn=8); // n=97 translate([6.45, 0.06, 0.30]) sphere(r=0.8, $fn=8); // n=129 translate([8.05, -0.24, 0.06]) sphere(r=0.8, $fn=8); // n=161 translate([9.65, -0.06, -0.20]) sphere(r=0.8, $fn=8); // n=193 translate([11.25, 0.17, -0.06]) sphere(r=0.8, $fn=8); // n=225 }