meth = list ( ctlpt(E3,-0.391721 , 0.0,-0.701308), ctlpt(E3,-0.398588 ,0.0, -0.509769 ), ctlpt(E3,-0.394588 , 0.0,-0.333769 ), ctlpt(E3,-0.446588 , 0.0,-0.297769 ), ctlpt(E3,-0.446588 ,0.0, -0.113769 ), ctlpt(E3,-0.758171 ,0.0,-0.568628 ), ctlpt(E3,-0.0985884 ,0.0,-0.0817693 ), ctlpt(E3, -0.612855 ,0.0,-0.0758171 ), ctlpt(E3, -0.854588 ,0.0, 0.246231 ), ctlpt(E3,-0.770807 ,0.0, 0.404358 ), ctlpt(E3, -0.178588 ,0.0, 0.342231 ), ctlpt(E3,-0.416994 ,0.0, 0.530719 ), ctlpt(E3, -0.274588 ,0.0, 0.534231 ), ctlpt(E3, -0.410676 ,0.0, 0.960349 ), ctlpt(E3,-0.0631809 ,0.0, 1.02985 ) ); meth1 = list ( ctlpt(E3,0.084 , 0.0, 0.52), ctlpt(E3,-0.06 ,0.0,0.46 ), ctlpt(E3, -0.312 , 0.0, 0.592 ), ctlpt(E3, -0.9 , 0.0, 0.816 ), ctlpt(E3,-0.364 ,0.0, 0.792 ), ctlpt(E3,-0.376 , 0.0,0.436), ctlpt(E3,-0.324 ,0.0,0.384 ), ctlpt(E3,-0.316 , 0.0, 0.384 ), ctlpt(E3,-0.316 , 0.0, 0.384 ), ctlpt(E3,-0.32 ,0.0,0.384 ), ctlpt(E3,-0.312 , 0.0, 0.384 ), ctlpt(E3, -0.22 ,0.0, 0.44 ), ctlpt(E3,-0.432 , 0.0,0.272 ), ctlpt(E3,-0.236 ,0.0, -0.46 ), ctlpt(E3,-0.316 ,0.0, -0.984 ) ); meth2 = list ( ctlpt(E3,-0.852 ,0.0,-0.5999 ), ctlpt(E3,-0.852 ,0.0,-0.1 ), ctlpt(E3,-0.852 ,0.0,0.76 ), ctlpt(E3,-0.852 ,0.0,0.76 ), ctlpt(E3,-0.852 ,0.0,0.76 ), ctlpt(E3,-0.8 ,0.0,0.564 ), ctlpt(E3, -0.56 ,0.0, 0.644 ), ctlpt(E3, -0.56 ,0.0, 0.644 ), ctlpt(E3, -0.56 ,0.0,0.644 ), ctlpt(E3, -0.56 ,0.0,0.644 ), ctlpt(E3, -0.56 ,0.0,0.644 ), ctlpt(E3, -0.66 ,0.0,0.672 ), ctlpt(E3,-0.784 ,0.0,-0.328 ), ctlpt(E3,-0.268 ,0.0,0.04 ), ctlpt(E3,-0.268 ,0.0,0.04 ), ctlpt(E3,-0.268 ,0.0,0.04 ), ctlpt(E3,-0.268 ,0.0,0.04 ), ctlpt(E3,-0.268 ,0.0,-0.148 ), ctlpt(E3,-0.268 ,0.0,-0.5999 ) ); meth3 = list ( ctlpt(E3,0.776 ,0.0,-0.62 ), ctlpt(E3,0.764 ,0.0,-0.28 ), ctlpt(E3,0.76 ,0.0,-0.28 ), ctlpt(E3,0.432 ,0.0,-0.156 ), ctlpt(E3,-0.516 ,0.0,0.12 ), ctlpt(E3,-0.764 ,0.0, 0.128 ), ctlpt(E3,-0.68 ,0.0,0.396 ), ctlpt(E3,-0.832 ,0.0,0.696 ), ctlpt(E3,-0.832 ,0.0,0.696 ), ctlpt(E3,-0.832 ,0.0,0.696 ), ctlpt(E3,-0.832 ,0.0,0.696 ), ctlpt(E3,-0.832 ,0.0,0.696 ), ctlpt(E3,-0.832 ,0.0,0.696 ), ctlpt(E3,-0.204 ,0.0,-0.024 ), ctlpt(E3,0.32 ,0.0,-0.064 ), ctlpt(E3,0.944 ,0.0,-0.064 ) ); meth4 = list ( ctlpt(E3,-0.02 ,0.0, 0.024 ), ctlpt(E3,-0.336 ,0.0,-0.012 ), ctlpt(E3,-0.808 ,0.0, 0.076 ), ctlpt(E3,-0.824 ,0.0, 0.076 ), ctlpt(E3,-0.808 ,0.0, 0.096 ), ctlpt(E3,-0.54 ,0.0, 0.14 ), ctlpt(E3,-0.616 ,0.0, -0.224 ), ctlpt(E3,-0.28 ,0.0, -0.104 ), ctlpt(E3,-0.076 ,0.0, -0.188 ), ctlpt(E3,-0.008 ,0.0, -0.2 ) ); meth5 = list ( ctlpt(E3,-0.848 ,0.0,0.408 ), ctlpt(E3,-0.696 ,0.0,0.408 ), ctlpt(E3,-0.52 ,0.0,0.408 ), ctlpt(E3,-0.52 ,0.0,0.408 ), ctlpt(E3,-0.384 ,0.0,0.36 ), ctlpt(E3,-0.368 ,0.0,0.36 ), ctlpt(E3,-0.368 ,0.0,0.36 ), ctlpt(E3,-0.264 ,0.0,0.196 ), ctlpt(E3,-0.24 ,0.0,-0.044 ), ctlpt(E3,-0.13 ,0.0,-0.284 ), ctlpt(E3,-0.008 ,0.0,-0.352 ), ctlpt(E3,0.224 ,0.0,-0.392 ), ctlpt(E3,0.256 ,0.0, -0.376 ), ctlpt(E3,0.516 ,0.0,-0.288 ), ctlpt(E3,0.532 ,0.0,-0.28 ), ctlpt(E3,0.616 ,0.0,0.044 ), ctlpt(E3,0.624 ,0.0,0.044 ), ctlpt(E3,0.636 ,0.0,0.17 ) ); meth6 = list ( ctlpt(E3,-0.024 ,0.0,0.728 ), ctlpt(E3,-0.288 ,0.0,0.052 ), ctlpt(E3,-0.288 ,0.0,0.052 ), ctlpt(E3,-0.288 ,0.0,0.052 ), ctlpt(E3,-0.3 ,0.0,0.012 ), ctlpt(E3,-0.224 ,0.0,-0.06 ), ctlpt(E3, 0.132 ,0.0,-0.1 ), ctlpt(E3,-0.168 ,0.0,-0.348 ), ctlpt(E3,-0.192 ,0.0,-0.192 ), ctlpt(E3,-0.22 ,0.0,-0.208 ), ctlpt(E3, -0.28 ,0.0,-0.316 ), ctlpt(E3,-0.224 ,0.0, -0.368 ), ctlpt(E3,-0.196 ,0.0, -0.388 ), ctlpt(E3,-0.168 ,0.0, -0.424 ), ctlpt(E3,-0.16 ,0.0,-0.476 ), ctlpt(E3,-0.188 ,0.0,-0.376 ), ctlpt(E3,-0.108 ,0.0, -0.612 ), ctlpt(E3,-0.108 ,0.0, -0.612 ), ctlpt(E3,-0.10 ,0.0, -0.612 ), ctlpt(E3,-0.108 ,0.0, -0.612 ), ctlpt(E3,-0.096 ,0.0,-0.608 ) ); kap = cbezier(meth6); kap = surfrev(kap); color( kap ,white); attrib(kap,"transp",0.4); attrib(kap,"index",0.3); attrib(kap,"reflect",0.3); circ = circle(vector(0,0,0),0.015); circ = SWEEPSRF(circle(vector(0.0,0.0,0.0),0.002), circ, OFF ); attrib( circ,"rgb","180,125,0" ); circ = circ* trans( vector( 0.0, -0.05, 0.0)); circ = circ*rotx(180); attrib(circ,"reflect",0.3); circ1 = circ *roty(90); circ1 = SWEEPSRF(circle(vector(0.0,0.0,0.0),0.002), circ1, OFF ); attrib( circ1,"rgb","180,125,0" ); circ1 = circ1* trans( vector( 0.0, -0.1, 0.0)); circ1 = circ1*rotx(180); attrib(circ,"reflect",0.3); kap = kap * scale( vector(0.075 , 0.075 , 0.075 ) ); kap = kap *rotx(90); kapla1 = list(kap,circ); kapla1 = kapla1 * trans( vector( -0.335, -0.2, 0.3)); kapla2 = kapla1 * trans( vector( 0.21, 0.0, 0.0)); kapla3 = kapla1 * trans( vector( 0.46, 0.0, 0.0)); kapla4 = kapla1 * trans( vector( 0.67, 0.0, 0.0)); kapla5 = list(kap,circ1); kapla5 = kapla5 * trans( vector( -0.335, -0.2, 0.3)); kapla5 = kapla5 * trans( vector( 0.105, 0.0, 0.105)); kapla6 = kapla5 * trans( vector( 0.0, 0.0, -0.21)); kapla7 = kapla5 * trans( vector( 0.46, 0.0, 0.0)); kapla8 = kapla6 * trans( vector( 0.46, 0.0, 0.0)); kaples = list (kapla1,kapla2,kapla3,kapla4,kapla5,kapla6,kapla7,kapla8); lamp = cbezier(meth); lamp =surfrev(lamp); color( lamp, yellow ); lamp = lamp*scale( vector(0.085 , 0.085 , 0.085 ) ); lamp = lamp * trans( vector( 0.0, 0.0, 0.125)); attrib(lamp,"reflect",0.3); vetv1 = cbezier(meth5); vetv1 = SWEEPSRF(circle(vector(0.0,0.0,0.0),0.05), vetv1, OFF ); attrib( vetv1,"rgb","180,125,0" ); vetv1 = vetv1*scale(vector(0.25,0.25,0.25)); vetv1 = vetv1*rotx(-90); vetv2 = vetv1*roty(240); color( vetv2, green ); vetv1 = vetv1*roty(-60); vetv1 = vetv1*trans( vector( 0.15, -0.2, 0.17)); vetv2 = vetv2*trans(vector(-0.15,-0.2,0.17)); vetv = list(vetv1,vetv2); attrib(vetv1,"reflect",0.3); attrib(vetv2,"reflect",0.3); stvol = cbezier(meth1); stvol =surfrev(stvol); color(stvol, white) ; stvol= stvol*scale( vector( 0.1 , 0.1 , 0.15 ) ); #stvol = stvol*trans( vector( 0.0, 0.0, 0.075)); nasten = cbezier(meth2); nasten = nasten * trans( vector( 0.0, 0.0, 0.6)); nasten = nasten*roty(-90); nasten =surfrev(nasten); attrib( nasten,"rgb","180,125,0" ); nasten= nasten*scale( vector( 0.175 , 0.175 , 0.175 ) ); nasten = nasten * trans( vector( -0.05, 0.0, 0.04)); nasten= nasten*rotz(90); attrib(nasten,"reflect",0.3); chasha = cbezier(meth4); chasha =surfrev(chasha); color( chasha, white ); chasha = chasha*scale( vector(0.15 , 0.15 , 0.15 ) ); chasha = chasha * trans( vector( 0.0, 0.0, -0.15)); attrib(chasha,"transp",0.4); attrib(chasha,"index",0.3); attrib(chasha,"reflect",0.3); svecha1 = list(lamp,stvol,chasha); svecha1 = svecha1* trans( vector( -0.3, 0.23, 0.0)); svecha1 = svecha1* rotx(-90); svecha1 = svecha1* roty(90); svecha2 = list(lamp,stvol,chasha); svecha2 = svecha2* trans( vector( -0.3, -0.23, 0.0)); svecha2 = svecha2* rotx(-90); svecha2 = svecha2* roty(90); V1 = vector( -0.75,0.75, -0.1125 ); V2 = vector( -0.75,-0.75, -0.1125 ); V3 = vector( 0.75, -0.75, -0.1125); V4 = vector( 0.75, 0.75,-0.1125); mir = POLY( list( V1, V2, V3,V4 ),FALSE ); attrib(mir,"rgb","125,125,125"); attrib(mir,"reflect",0.9); bra = list(svecha1,svecha2,nasten,vetv,kaples,mir); viewstate("DblBuffer"); #save_mat = view_mat; #view_mat = view_mat * scale( vector( 0.1, 0.1, 0.1) ); interact(bra); save("lamp",bra);