// Stefano Calcaterra, 405769 // Final Project - Tavolino da pranzo Noguchi //porzione di arco pieno function arc (alpha, r, R) { var domain = DOMAIN([[0,alpha],[r,R]])([36,1]); var mapping = function (v) { var a = v[0]; var r = v[1]; return [r*COS(a), r*SIN(a)]; } var model = MAP(mapping)(domain); return model; } var dom1 = PROD1x1([INTERVALS(1)(36),INTERVALS(1)(36)]); /////////////////////////// piano superiore /////////////////////////// var piano_superiore_struct = EXTRUDE([0.2])(arc(2*PI, 0, 6)); var piano_superiore = T([2])([7.25])(piano_superiore_struct); /////////////////////////// base /////////////////////////// var alpha = BEZIER(S0)([[1,0,0.4],[1.1,0,0.4],[1.2,0,0.4],[1.3,0,0.4],[1.4,0,0.4],[1.5,0,0.4],[1.5,0,0.4],[1.8,0,0.2],[2.4,0,0.2],[2.5,0,0]]); var alpha2 = BEZIER(S0)([[1,0,0],[1,0,0.4]]); var alpha3= BEZIER(S0)([[1,0,0],[2.5,0,0]]); var beta = BEZIER(S1)([[2.4,0,0],[2.4,3.05,0],[-2.4,3.05,0],[-2.4,0,0]]); var surface1 = MAP(PROFILEPROD_SURFACE([alpha,beta]))(dom1); var surface1_scaled = SCALE([0,1])([0.5,0.5])(surface1); var surface2 = MAP(PROFILEPROD_SURFACE([alpha2,beta]))(dom1); var surface2_scaled = SCALE([0,1])([0.5,0.5])(surface2); var surface3 = MAP(PROFILEPROD_SURFACE([alpha3,beta]))(dom1); var surface3_scaled = SCALE([0,1])([0.5,0.5])(surface3); var base1 = STRUCT(REPLICA(2)([surface1_scaled,R([0,1])(PI)])); var base2 = STRUCT(REPLICA(2)([surface2_scaled,R([0,1])(PI)])); var base3 = STRUCT(REPLICA(2)([surface3_scaled,R([0,1])(PI)])); //DRAW(STRUCT([MAP(alpha)(dom1),MAP(beta)(dom1), base1, base2])) var base = STRUCT([base1, base2, base3]); /////////////////////////// corpo /////////////////////////// var elemento_corpo_d_struct = EXTRUDE([7.8])(arc(2*PI, 0, 0.03)); var elemento_corpo_ds1 = STRUCT(REPLICA(2)([elemento_corpo_d_struct,R([0,2])(PI/6)])); var elemento_corpo_ds2 = R([0,2])(-PI/12)(elemento_corpo_ds1); var elemento_corpo_ds = T([1,2])([-1.4,0.4])(R([1,2])(-PI/8)(elemento_corpo_ds2)); //15° var elementi_corpo_tot = STRUCT(REPLICA(7)([elemento_corpo_ds,R([0,1])(PI/3.5)])); var anello_struct = EXTRUDE([0.05])(arc(2*PI, 2.4, 2.5)); var anello = T([2])([7.20])(anello_struct); var corpo = STRUCT([elementi_corpo_tot, anello]); //DRAW(STRUCT([piano_superiore, base, elementi_corpo_tot])) /////////////////////////// TOTALE /////////////////////////// var tavolino = STRUCT([COLOR([2,2,2])(piano_superiore), COLOR([0.2,0.2,0.2])(base), COLOR([0,0,0])(corpo)]); DRAW(tavolino);