This sounds like something for which OpenSCAD is well suited! The code here is a bit crude (and could do with tidying) but it's a proof of concept. You can play with the period (or is it 'pitch') of the corrugations - and the dimensions of the roof.
Code: Select all
corrugation_radius=5;
corrugation_period=4;
roof_radius=100;
roof_thickness=2;
roof_length=150;
roof_width=100;
rotate([-0.5*acos(1-(roof_width^2/(2*roof_radius^2))),0,0])
rotate([0,90,0])
rotate_extrude(angle=acos(1-(roof_width^2/(2*roof_radius^2))))
translate([-roof_radius,0,0])
rotate([0,0,90])
roof_section(corrugation_radius,corrugation_period,roof_thickness);
module roof_section(corrugation_radius,corrugation_period,roof_thickness) {
for(i=[0:0.5*roof_length/corrugation_period])
translate([2*i*corrugation_period,0,0])
wavy_line(corrugation_radius,corrugation_period,roof_thickness);
}
module wavy_line(corrugation_radius,corrugation_period,roof_thickness) {
translate([0,-sqrt((corrugation_radius-roof_thickness)^2-(corrugation_period/2)^2),0])
corrugation_arc(corrugation_radius,corrugation_period,roof_thickness);
translate([corrugation_period,sqrt((corrugation_radius)^2-(corrugation_period/2)^2),0])
rotate([0,0,180])
corrugation_arc(corrugation_radius,corrugation_period,roof_thickness);
}
module corrugation_arc(corrugation_radius,corrugation_period,roof_thickness) {
difference() {
circle(r=corrugation_radius);
circle(r=corrugation_radius-roof_thickness);
translate([-corrugation_radius,-2*corrugation_radius,0])
square(size=2*corrugation_radius);
translate([corrugation_period/2,0,0])
square(size=corrugation_radius);
translate([-corrugation_radius-corrugation_period/2,0,0])
square(size=corrugation_radius);
}
}
$fn=100;