######################################################################## # Lab 5 # Shpinner Yanai 029579273 # Sharov Artyom 317907830 ######################################################################## ######################################################################## # Scorpion body - abdomenon ######################################################################## bodyCrossSection = cbspline(5, list( ctlpt(P2, 1.000000, -0.842444, 0.616292), ctlpt(P2, 1.027483, -0.449317, 0.575963), ctlpt(P2, 0.874532, 0.493037, 0.403991), ctlpt(P2, 1.000000, 1.118971, 0.504823), ctlpt(P2, 1.582196, 0.973398, -0.873345), ctlpt(P2, 1.000000, 0.075027, -0.811361), ctlpt(P2, 1.000000, -0.428725, -0.714898), ctlpt(P2, 0.423936, -0.423482, -0.087695), ctlpt(P2, 1.000000, -1.020364, 0.457663), ctlpt(P2, 1.000000, -0.338692, 0.457663), ctlpt(P2, 1.008469, -0.311296, 0.519907), ctlpt(P2, 1.000000, 0.300107, 0.511254), ctlpt(P2, 1.000000, 0.463022, 0.633441)), list(KV_OPEN)); bodyCrossSection = bodyCrossSection * rotz(-90); bodySweepAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.336117, -0.248434), ctlpt(P2, 1.000000, -1.313152, -0.294363), ctlpt(P2, 1.000000, -1.281837, -0.329854), ctlpt(P2, 1.000000, -1.177453, -0.392484), ctlpt(P2, 1.000000, -0.960334, -0.475992), ctlpt(P2, 1.000000, -0.678497, -0.507307), ctlpt(P2, 1.000000, -0.248434, -0.528184), ctlpt(P2, 1.000000, 0.123173, -0.536534), ctlpt(P2, 1.000000, 0.567850, -0.534447), ctlpt(P2, 1.000000, 0.929019, -0.413361), ctlpt(P2, 1.000000, 1.127349, -0.189979), ctlpt(P2, 1.000000, 1.300626, 0.012526), ctlpt(P2, 1.000000, 1.304802, 0.317328), ctlpt(P2, 1.000000, 1.296451, 0.534447), ctlpt(P2, 1.000000, 1.192067, 0.793319)), list(1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000, 12.000000, 13.000000, 14.000000, 15.000000, 16.000000, 17.000000, 18.000000, 19.000000, 20.000000)); bodySweepAxis = bodySweepAxis * rotx(90); bodyScaleAxis = cbspline(5, list( ctlpt(P2, 1.000000, -2.697286, -0.118998), ctlpt(P2, 1.000000, -2.601253, -0.225470), ctlpt(P2, 1.000000, -2.515658, -0.313152), ctlpt(P2, 1.000000, -2.405010, -0.371608), ctlpt(P2, 1.000000, -2.164927, -0.471816), ctlpt(P2, 1.000000, -1.776618, -0.561587), ctlpt(P2, 1.000000, -1.336117, -0.613779), ctlpt(P2, 1.000000, -0.966597, -0.584551), ctlpt(P2, 1.000000, -0.469729, -0.580376), ctlpt(P2, 1.000000, -0.223382, -0.574113), ctlpt(P2, 1.000000, 0.158664, -0.526096), ctlpt(P2, 1.000000, 0.446764, -0.469729), ctlpt(P2, 1.384615, 1.043520, -0.569456), ctlpt(P2, 1.000000, 1.008351, -0.329854), ctlpt(P2, 1.000000, 1.313152, -0.252610), ctlpt(P2, 1.000000, 1.728601, -0.154489)), list(KV_OPEN)); body = swpsclsrf(bodyCrossSection, bodySweepAxis, bodyScaleAxis, off, 5); color(body, YELLOW); ######################################################################## # Scorpion body - tail ######################################################################## tailCrossSection = pcircle( vector( 0, 0, 0 ), 1 ): tailCrossSection = tailCrossSection * rotz(-90); tailSweepAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.290188, -0.824635), ctlpt(P2, 1.000000, -1.290188, -0.730689), ctlpt(P2, 1.000000, -1.281837, -0.597077), ctlpt(P2, 1.000000, -1.237996, -0.265136), ctlpt(P2, 1.000000, -1.127349, 0.035491), ctlpt(P2, 1.000000, -0.935282, 0.346555), ctlpt(P2, 1.000000, -0.680585, 0.538622), ctlpt(P2, 1.000000, -0.369520, 0.678497), ctlpt(P2, 1.000000, 0.068894, 0.739040), ctlpt(P2, 1.000000, 0.515658, 0.709812), ctlpt(P2, 1.000000, 1.085595, 0.563674), ctlpt(P2, 1.000000, 1.329854, 0.394572), ctlpt(P2, 1.000000, 1.308977, -0.025052), ctlpt(P2, 1.000000, 1.292276, -0.288100)), list(1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000, 12.000000, 13.000000, 14.000000, 15.000000, 16.000000, 17.000000, 18.000000, 19.000000)); tailSweepAxis = tailSweepAxis * rotx(90); tailScaleAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.315240, -0.029228), ctlpt(P2, 0.839636, -1.095558, -0.290980), ctlpt(P2, 1.036960, -1.162521, 0.041132), ctlpt(P2, 1.000000, -0.993737, -0.273486), ctlpt(P2, 1.000000, -0.878914, 0.018789), ctlpt(P2, 1.000000, -0.805845, -0.258873), ctlpt(P2, 1.000000, -0.680585, 0.083507), ctlpt(P2, 1.000000, -0.559499, -0.273486), ctlpt(P2, 1.000000, -0.413361, 0.112735), ctlpt(P2, 1.000000, -0.265136, -0.277662), ctlpt(P2, 1.000000, -0.146138, 0.106472), ctlpt(P2, 1.000000, -0.054280, -0.277662), ctlpt(P2, 1.000000, 0.096033, 0.116910), ctlpt(P2, 1.000000, 0.235908, -0.265136), ctlpt(P2, 1.000000, 0.388309, 0.114823), ctlpt(P2, 1.000000, 0.507307, -0.294363), ctlpt(P2, 1.000000, 0.655532, 0.108559), ctlpt(P2, 1.000000, 0.812109, -0.281837), ctlpt(P2, 1.000000, 0.914405, 0.106472), ctlpt(P2, 1.000000, 0.995825, -0.200418), ctlpt(P2, 1.000000, 1.162839, 0.039666)), list(KV_OPEN)); tail = swpsclsrf(tailCrossSection, tailSweepAxis, tailScaleAxis, off, 5); tail = tail * rotz(180); tail = tail * roty(3.5); tail = tail * scale(vector(0.9, 1.2, 1.0)); tail = tail * trans( vector( 0.2, 0.0, 1.15 ) ); color(tail, YELLOW); ######################################################################## # Sting ######################################################################## stingCrossSection = pcircle( vector( 0, 0, 0 ), 1 ): stingCrossSection = stingCrossSection * rotz(-90); stingSweepAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.290188, -0.824635), ctlpt(P2, 1.000000, -1.290188, -0.730689), ctlpt(P2, 1.000000, -1.281837, -0.597077), ctlpt(P2, 1.000000, -1.237996, -0.265136), ctlpt(P2, 1.000000, -1.127349, 0.035491), ctlpt(P2, 1.000000, -0.935282, 0.346555), ctlpt(P2, 1.000000, -0.680585, 0.538622), ctlpt(P2, 1.000000, -0.369520, 0.678497), ctlpt(P2, 1.000000, 0.068894, 0.739040), ctlpt(P2, 1.000000, 0.515658, 0.709812), ctlpt(P2, 1.000000, 1.085595, 0.563674), ctlpt(P2, 1.000000, 1.329854, 0.394572), ctlpt(P2, 1.000000, 1.308977, -0.025052), ctlpt(P2, 1.000000, 1.292276, -0.288100)), list(KV_OPEN)); stingSweepAxis = stingSweepAxis * rotx(90); stingScaleAxis = CBSPLINE(5 , list( ctlpt(P2, 1.000000, -1.100503, 0.366834), ctlpt(P2, 0.092147, -0.095851, 0.043527), ctlpt(P2, 1.000000, -0.919598, 0.515075), ctlpt(P2, 1.000000, -0.726131, 0.595477), ctlpt(P2, 1.907692, -1.183920, 1.126401), ctlpt(P2, 1.971553, -0.752955, 1.114571), ctlpt(P2, 1.000000, -0.115578, 0.517588), ctlpt(P2, 1.000000, 0.175879, 0.123116), ctlpt(P2, 0.461802, 0.097466, 0.019725), ctlpt(P2, 1.000000, 0.587940, -0.017588), ctlpt(P2, 1.000000, 0.864322, 0.017588) ), list(KV_OPEN)); sting = swpsclsrf(stingCrossSection, stingSweepAxis,stingScaleAxis, off, 5); sting = sting * roty(183.5); sting = sting * scale(vector(0.1.4, 0.20, 0.16)); sting = sting * trans( vector( -1.1, 0.0, 1.365 ) ); color(sting, RED ); ######################################################################## # Legs ######################################################################## legCrossSection = pcircle( vector( 0, 0, 0 ), 1 ): legCrossSection = legCrossSection * rotz(-90); legSweepAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.373695, -0.797495), ctlpt(P2, 84.845979, -115.135459, -57.744863), ctlpt(P2, 1.000000, -1.043841, 0.371608), ctlpt(P2, 1.000000, -0.603340, 0.784969), ctlpt(P2, 1.000000, 0.263048, 0.824635), ctlpt(P2, 0.391593, 0.430016, -0.214191), ctlpt(P2, 1.000000, 1.154488, -0.659708), ctlpt(P2, 1.000000, 1.265136, -0.789144)), list(1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000, 12.000000, 13.000000)); legSweepAxis = legSweepAxis * rotx(90); legScaleAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.275574, -0.079332), ctlpt(P2, 84.845979, -106.810279, 3.188367), ctlpt(P2, 1.000000, -0.870564, 0.223382), ctlpt(P2, 0.973476, -0.254039, 0.296717), ctlpt(P2, 1.000000, 0.724426, 0.200418), ctlpt(P2, 0.391593, 0.468440, 0.067037), ctlpt(P2, 1.000000, 1.252610, 0.058455), ctlpt(P2, 1.000000, 1.363257, -0.070981)), list(KV_OPEN)); leg = swpsclsrf(legCrossSection, legSweepAxis, legScaleAxis, off, 5); leg = leg * scale(vector(0.5, 0.5, 0.7)); color(leg, YELLOW); legR1 = leg * roty(30); legR1 = legR1 * rotz(40); legR1 = legR1 * trans( vector( 1.10, 1.0, -0.280 ) ); legL1 = legR1 * sy( -1 ): legR2 = leg * roty(30); legR2 = leg * scale(vector(1.7, 1.7, 0.7)); legR2 = legR2 * rotz(70); legR2 = legR2 * roty(30); legR2 = legR2 * trans(vector( 0.50, 1.590, -0.270 ) ); legL2 = legR2 * sy( -1 ): legR3 = legR1 * sx( -1 ): legR3 = legR3 * rotz(-15); legR3 = legR3 * trans( vector( 0.0,-0.055,-0.04 ) ); legL3 = legR3 * sy( -1 ): legL1 = -legL1; legL2 = -legL2; legR3 = -legR3; ######################################################################## # Mouth ######################################################################## mouth = leg * scale(vector(1.7, 2.1, 0.7)); mouth = mouth * scale(vector(0.3, 0.3, 0.3)); mouth = mouth * roty(90); mouth = mouth * rotx(-90); mouth = mouth * roty(-30); mouth = mouth * trans(vector(-1.46, 0.0, -0.499)); color(mouth, BLACK ); eye1 = sphere( vector( 0, 0, 0 ), 0.08 ) * rx( 20 ) * ry( -20 ) : eye1 = eye1 * scale(vector(1.2, -0.7, 0.4)); eye1 = eye1 * roty(30); eye1 = eye1 * rotz(10); eye1 = eye1 * trans(vector( -1.26,0.24,-0.40 )); color(eye1, RED); eye2 = eye1 * sy(-1): ######################################################################## # Pincers ######################################################################## pincersLCrossSection = pcircle(vector( 0, 0, 0 ), 1 ): pincersLCrossSection = pincersLCrossSection * rotz(-90); pincersLSweepAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.373695, -0.797495), ctlpt(P2, 84.845979, -115.135459, -57.744863), ctlpt(P2, 1.000000, -1.043841, 0.371608), ctlpt(P2, 1.000000, -0.603340, 0.784969), ctlpt(P2, 1.000000, 0.263048, 0.824635), ctlpt(P2, 0.391593, 0.430016, -0.214191), ctlpt(P2, 1.000000, 1.154488, -0.659708), ctlpt(P2, 1.000000, 1.265136, -0.789144)), list(KV_OPEN)); pincersLSweepAxis = pincersLSweepAxis * rotx(90); pincersLScaleAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.194154, -0.012526), ctlpt(P2, 17.990308, -20.882278, 0.112674), ctlpt(P2, 1.000000, -0.638831, 0.327766), ctlpt(P2, 1.000000, -0.152401, 0.427975), ctlpt(P2, 0.984196, 0.470524, 0.339024), ctlpt(P2, 0.000000, 0.000000, 0.000000), ctlpt(P2, 1.000000, 1.129436, 0.006263), ctlpt(P2, 1.000000, 1.139875, -0.002088)), list(KV_OPEN)); pincersL = swpsclsrf(pincersLCrossSection, pincersLSweepAxis, pincersLScaleAxis, off, 5); pincersL = pincersL * trans(vector(0.1, 1.60, -5.05 )); pincersL = pincersL * roty(-90); pincersL = pincersL * rotz(180); pincersR = pincersL * sy( -1 ): pincersR = pincersR * roty(10); pincersR = pincersR * rotz(40); pincersR = pincersR * trans(vector(1.9, 2.10, -0.05 )); pincersR = -pincersR; color(pincersL, YELLOW); color(pincersR, YELLOW); ######################################################################## # Chelas ######################################################################## chelaRCrossSection = pcircle(vector(0, 0, 0), 1 ): chelaRCrossSection = chelaRCrossSection * rotz(-90); chelaRSweepAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.373695, -0.797495), ctlpt(P2, 84.845979, -115.135459, -57.744863), ctlpt(P2, 1.000000, -1.043841, 0.371608), ctlpt(P2, 1.000000, -0.603340, 0.784969), ctlpt(P2, 1.000000, 0.263048, 0.824635), ctlpt(P2, 0.391593, 0.430016, -0.214191), ctlpt(P2, 1.000000, 1.154488, -0.659708), ctlpt(P2, 1.000000, 1.265136, -0.789144)), list(1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000, 12.000000, 13.000000)); chelaRSweepAxis = chelaRSweepAxis * rotx(90); chelaRScaleAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.448852, -0.137787), ctlpt(P2, 1.000000, -1.162839, 0.056367), ctlpt(P2, 1.000000, -1.108559, 0.175365), ctlpt(P2, 1.000000, -0.724426, -0.073069), ctlpt(P2, 1.000000, -0.304802, 0.290188), ctlpt(P2, 1.000000, 0.392484, 0.346555), ctlpt(P2, 1.058140, 1.027213, 0.417512), ctlpt(P2, 1.000000, 1.296451, 0.139875), ctlpt(P2, 1.000000, 1.446764, -0.256785)), list(KV_OPEN)); chelaR = swpsclsrf(chelaRCrossSection, chelaRSweepAxis, chelaRScaleAxis, off, 5); chelaR = chelaR * scale(vector(0.6, 0.6, 1.0)); chelaR = chelaR * rotx(-90); chelaR = chelaR * roty(210); chelaR = chelaR * rotz(-10); chelaR = chelaR * trans(vector(-1.60, 1.10, 0.0 )); color(chelaR, YELLOW); chelaLCrossSection = pcircle(vector(0, 0, 0), 1): chelaLCrossSection = chelaLCrossSection * rotz(-90); chelaLSweepAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.747390, -0.308977), ctlpt(P2, 1.000000, -1.421712, -0.336117), ctlpt(P2, 1.000000, -1.267223, -0.336117), ctlpt(P2, 0.869635, -0.896868, -0.274144), ctlpt(P2, 1.250433, -0.958056, -0.375913), ctlpt(P2, 1.000000, 0.083507, -0.277662), ctlpt(P2, 0.473688, 0.347107, -0.097902), ctlpt(P2, 1.192702, 1.172782, -0.239038), ctlpt(P2, 1.000000, 1.350731, -0.137787), ctlpt(P2, 1.000000, 1.467641, -0.106472)), list(1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, 11.000000, 12.000000, 13.000000, 14.0, 15.0)); chelaLSweepAxis = chelaLSweepAxis * rotx(90); chelaLScaleAxis = cbspline(5, list( ctlpt(P2, 1.000000, -1.448852, -0.137787), ctlpt(P2, 1.000000, -1.162839, 0.056367), ctlpt(P2, 1.000000, -1.108559, 0.175365), ctlpt(P2, 1.000000, -0.724426, -0.073069), ctlpt(P2, 1.000000, -0.304802, 0.290188), ctlpt(P2, 1.000000, 0.392484, 0.346555), ctlpt(P2, 1.058140, 1.027213, 0.417512), ctlpt(P2, 1.000000, 1.296451, 0.139875), ctlpt(P2, 1.000000, 1.446764, -0.256785)), list(KV_OPEN)); chelaL = swpsclsrf(chelaLCrossSection, chelaLSweepAxis, chelaLScaleAxis, off, 5); chelaL = chelaL * scale(vector(1.4, 0.6, 1.0)); chelaL = chelaL * rotx(90); chelaL = chelaL * roty(180); chelaL = chelaL * rotz(20); chelaL = chelaL * trans(vector(-2.60, -1.32, -0.38)); color(chelaL, YELLOW); color(chelaR, YELLOW); attrib(body, "texture", "marble, 2"); scorpion = List(body, tail, sting, legL1, legR1, legL2, legR2, legL3, legR3, pincersL, pincersR, mouth, chelaL, chelaR, eye1, eye2); #sibling2 = sibling1 * trans(vector(0, 3, 0)); #color(scorpion, YELLOW); #body1=body; #color(body1, brown); #tail1=tail; #color(tail1, brown); #legL11=legL1; #color(legL11, brown); #legR11=legR1; #color(legR11, brown); #legL21=legL2; #color(legL21, brown); #legR21=legR2; #color(legR21, brown); #legL31=legL3; #color(legL31, brown); #legR31=legR3; ##color(legR31, brown); #pincersL1=pincersL; ##color(pincersL1, brown); #pincersR1=pincersR; ##color(pincersR1, brown); #mouth1=mouth; #color(mouth1, RED); #chelaL1=chelaL; ##color(chelaL1, brown); #chelaR1=chelaR; #color(chelaR1, brown); scorpion1 = scorpion; #List(body1, tail1, sting, legL11, legR11, legL21, legR21, legL31, legR31, pincersL1, pincersR1, mouth1, chelaL1, chelaR1, eye1, eye2); scorpion1 = scorpion1 * trans(vector(10, 0, 0)) * rotZ(180)* scale(vector(1.2, 1.2, 1.2)); ATTRIB(scorpion1, "rgb", "124,50,24"); view(scorpion, 1); view(scorpion1, 0); #view(sibling2, 0); scorpions = list(scorpion, scorpion1); #sibling1, sibling2); save("scorpions.itd", scorpions); FREE(bodyCrossSection); FREE(bodySweepAxis); FREE(bodyScaleAxis); FREE(body); FREE(tailCrossSection); FREE(tailSweepAxis); FREE(tailScaleAxis); FREE(tail); FREE(stingCrossSection); FREE(stingSweepAxis); FREE(stingScaleAxis); FREE(sting); FREE(legCrossSection); FREE(legSweepAxis); FREE(legScaleAxis); FREE(leg); FREE(legL1); FREE(legR1); FREE(legL2); FREE(legR2); FREE(legL3); FREE(legR3); FREE(mouth); FREE(eye1); FREE(eye2); FREE(pincersLCrossSection); FREE(pincersLSweepAxis); FREE(pincersLScaleAxis); FREE(pincersL); FREE(pincersR); FREE(chelaRCrossSection); FREE(chelaRSweepAxis); FREE(chelaRScaleAxis); FREE(chelaLCrossSection); FREE(chelaLSweepAxis); FREE(chelaLScaleAxis); FREE(chelaL); FREE(chelaR); FREE(scorpion); FREE(scorpion1); #FREE(sibling2); FREE(scorpions);