module view_cylinder(shift=100/3,height=200,thin=0.1) {
translate([0,0,-shift]) {
difference() {
linear_extrude(height=height,center=false) {
offset(r=thin/2) children(0);
}
linear_extrude(height=height,center=false) {
offset(r=-thin/2) children(0);
}
}
}
}
module intersect_view_cylinders(angle=45,size=100,thin=0.1) {
shift=size/3;
height=size*2;
intersection() {
rotate([0,angle,0]) view_cylinder(shift,height,thin) children(0);
rotate([0,-angle,0]) view_cylinder(shift,height,thin) children(1);
}
};
module clip_intersect_view(angle=45,size=100,thin=0.1) {
bound=size*2;
skip=0;
intersection() {
intersect_view_cylinders(angle,size,thin) {
children(0);
children(1);
}
translate([0,-size/2,0]) rotate([0,-90-angle,0]) cube([size,size,size]);
}
intersection() {
intersect_view_cylinders(angle,size,thin) {
children(0);
children(1);
}
translate([0,-size/2,0]) rotate([0,90-angle,0]) cube([size,size,size]);
}
};
module ambiguous_cylinder(angle=45,size=100,thin=0.1,thick=1,height=10) {
minkowski() {
clip_intersect_view(angle,size,thin) {
children(0);
children(1);
}
cylinder(r=thick,h=height*2,center=true);
}
}
module arrow(length=10) {
scale([length/10,length/10,length/10])
polygon([ [-5, 0], [-4.5, 1], [ 2, 1], [ 2.5, 3], [ 5, 0],
[ 2.5,-3], [ 2,-1], [-4.5,-1] ]);
}
ambiguous_cylinder() {
rotate([0,0,90]) arrow(30);
rotate([0,0,-90]) arrow(30);
}
translate([0,50,0]) ambiguous_cylinder() {
circle(d=14);
rotate([0,0,45]) square(size=10,center=true);
}