Research-Stack/3-Mathematical-Models/cad_models/gabriels_horn.scad
2026-05-05 21:09:48 -05:00

98 lines
2.4 KiB
OpenSCAD

// 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
}