mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
98 lines
2.4 KiB
OpenSCAD
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
|
|
}
|