Ответ на пост «Комиксы Herta Burbe»
// HYDRAnt – модель для печати. Базовая, сделана ChatGPT в несколько запросов и минимально поправлена.
// Для печати – OpenSCAD экспортировать в stl, stl печатать (понадобятся поддержки для голов и ртов). Советую улучшить дальше тем же ChatGPT :-)
$fn = 64;
// ===== размеры =====
height_total = 80;
base_d = 42;
base_h = 14;
neck_d = 7;
// ===== ОСНОВАНИЕ =====
module hydrant_base(){
union(){
cylinder(h=base_h,d=base_d);
translate([0,0,base_h])
cylinder(h=6,d=base_d*0.75);
translate([0,0,base_h-2])
difference(){
cylinder(h=3,d=base_d*1.05);
cylinder(h=4,d=base_d*0.92);
}
}
}
// ===== СЕГМЕНТ ШЕИ =====
module neck_segment(p1,p2){
hull(){
translate(p1)
sphere(d=neck_d);
translate(p2)
sphere(d=neck_d);
}
}
// ===== КОЛЬЦО НА ШЕЕ =====
module flange(){
difference(){
cylinder(h=4,d=neck_d*2,center=true);
cylinder(h=5,d=neck_d*1,center=true);
}
}
// ===== ИЗОГНУТАЯ ШЕЯ =====
module curved_neck(angle){
h = height_total-base_h-10;
// точки S-образной кривой
p0 = [0,0,base_h];
p1 = [6*cos(angle),6*sin(angle),base_h+8];
p2 = [12*cos(angle+12),12*sin(angle+12),base_h+18];
p3 = [18*cos(angle-10),18*sin(angle-10),base_h+30];
p4 = [22*cos(angle+6),22*sin(angle+6),base_h+42];
p5 = [24*cos(angle),24*sin(angle),base_h+h];
neck_segment(p0,p1);
neck_segment(p1,p2);
neck_segment(p2,p3);
neck_segment(p3,p4);
neck_segment(p4,p5);
// фланец 1
translate(p2)
rotate([0,0,angle])
flange();
// фланец 2
translate(p4)
rotate([0,0,angle])
flange();
}
module hydra_head(angle){
h = height_total-base_h-12;
pos = [22*cos(angle),22*sin(angle),base_h+h];
translate(pos)
rotate([0,0,angle]) // только разворот по кругу
difference(){
union(){
// форма черепа
hull(){
translate([0,0,0])
sphere(d=9);
translate([8,0,0])
sphere(d=7);
}
// нижняя челюсть
translate([6,0,-3])
hull(){
sphere(d=4);
translate([4,0,0])
sphere(d=3);
}
// глаза
translate([3.5,2.5,3.5])
sphere(d=2);
translate([3.5,-2.5,3.5])
sphere(d=2);
}
// пасть (вырез спереди)
translate([12,0,-2.5])
cube([10,8,1],center=true);
}
}
// ===== СБОРКА =====
module hydrant_hydra(){
hydrant_base();
for(a=[0:45:315]){
curved_neck(a);
hydra_head(a);
}
}
hydrant_hydra();






