function f1(x) =0.02*x*x*x; xmin=-6; xmax=6; Funktion1=1; function f2(x) = 0.2*x*x; xmin2=-6; xmax2=6; Funktion2=0; /*Einstellungen:*/ Verstaerkung1=1; Verstaerkung2=1; Einheit=1; x_Einheit=0; y_Einheit=0; Platte=0; /* Code:*/ module line(p1,p2,w,d) { hull() { translate(p1) cylinder(h=w, r=d, center=false); translate(p2) cylinder(h=w, r=d, center=false); } } module polyline(points,w,d) { module polyline_inner(points, index) { if(index < len(points)) { line(points[index - 1], points[index],w,d); polyline_inner(points, index + 1); } } polyline_inner(points, 1); } points = [ for (a = [ xmin : 0.1 : xmax]) [10*a, 10*f1(a)] ]; polyline(points, Funktion1*10, 0.25); module line1(p11,p21,w1,d1) { hull() { translate(p11) cylinder(h=w1, r=d1, center=false); translate(p21) cylinder(h=w1, r=d1, center=false); } } module polyline1(points1,w1,d1) { module polyline1_inner(points1, index) { if(index < len(points1)) { line1(points1[index - 1], points1[index],w1,d1); polyline1_inner(points1, index + 1); } } polyline1_inner(points1, 1); } points1 = [ for (a = [ xmin2 : 0.1 : xmax2]) [10*a, 10*f2(a)] ]; polyline1(points1, Funktion2*10, 0.25); /* Platte: */ for (c1=[xmin:0.1:xmax]) { t1=f1(c1); maxf1=max(t1); minf1=min(t1); for (c2=[xmin2:0.1:xmax2]) { t2=f2(c2) ; maxf2=max(t2); minf2=min(t2); translate([min(Funktion1*xmin*10, Funktion2*xmin2*10)-3,min(Funktion1*minf1*10,Funktion2*minf2*10)-3,0])cube([Platte*(max(Funktion1*xmax*10, Funktion2*xmax2*10)-min(Funktion1*xmin*10, Funktion2*xmin2*10)+6),Platte*(max(Funktion1*maxf1*10,Funktion2*maxf2*10)-min(Funktion1*minf1*10,Funktion2*minf2*10)+6),Platte*3]); translate([-0.25,min(Funktion1*minf1*10,Funktion2*minf2*10)-3,0])cube([0.5,Platte*(max(Funktion1*maxf1*10,Funktion2*maxf2*10)-min(Funktion1*minf1*10,Funktion2*minf2*10)+6),Platte*4]); translate([min(Funktion1*xmin*10, Funktion2*xmin2*10)-3,-0.25,0])cube([Platte*(max(Funktion1*xmax*10, Funktion2*xmax2*10)-min(Funktion1*xmin*10, Funktion2*xmin2*10)+6),0.5,Platte*4]); for(d2=[min(Funktion1*ceil(minf1), Funktion2*ceil(minf2)):max(Funktion1*ceil(maxf1+0.000005)-1, Funktion2*ceil(maxf2+0.000005))-1]){ translate([-2,d2*10-0.25,0]) cube([4,0.5,Platte*4]);} }} for(d1=[min(Funktion1*ceil(xmin), Funktion2*ceil (xmin2)):max(Funktion1*ceil(xmax+0.000005)-1, Funktion2*ceil(xmax2+0.000005))-1]){ translate([d1*10-0.25,-2,0]) cube([0.5,4,Platte*4]); } /* Verstärkung:*/ points = [ for (a = [ xmin : 0.1 : xmax]) [10*a, 10*f1(a)] ]; polyline(points, 3, Funktion1*Verstaerkung1*2); points1 = [ for (a = [ xmin2 : 0.1 : xmax2]) [10*a, 10*f2(a)] ]; polyline1(points1, 3, Funktion2*Verstaerkung2*2); /* Einheit: */ translate([10*x_Einheit+4,10*y_Einheit+0,1.5])cube([12,4,3*Einheit], center=true); translate([10*x_Einheit+0,10*y_Einheit+4,1.5])cube([4,12,3*Einheit], center=true); translate([10*x_Einheit+5,10*y_Einheit+0,3.5])cube([10.5,0.5,1*Einheit], center=true); translate([10*x_Einheit+0,10*y_Einheit+5,3.5])cube([0.5,10.5,1*Einheit], center=true);