// Voyager spacecraft // Kurt Bangert 1998 //radius of small cylinders #declare rs = 0.005 //------------------------- //antenna #declare antenna = object { sor { 6, <0.00, 0.28>, <0.001, 0.29>, <0.40, 0.33>, <0.66, 0.41>, <0.98, 0.60>, <1.03, 0.66> open pigment { White } }} //ring attached to antenna #declare ring = union { object {cylinder {<0.,0.22,0> <0.,0.34,0>, 0.46 open} pigment {White} } object {cylinder {<0.,0.22,0> <0.,0.34,0>, 0.44 open} pigment {White} } object { disc {<0.,0.22,0> <0,1,0>, 0.46,0.44 } pigment {White} } } //inner parts of antenna #declare sa1 = object {cylinder { < -.4, 0.34,-.1> < -.17,0.99,0.0> ,2*rs }} #declare sa2 = object {cylinder { < -.4, 0.34,0.1> < -.17,0.99,0.0> ,2*rs }} #declare inner_antenna = union{ object {sa1} object {sa1 rotate y*120} object {sa1 rotate y*240} object {sa2} object {sa2 rotate y*120} object {sa2 rotate y*240} sor {6, <0.00, 0.88>, <0.001, 0.881>, <0.1, 0.92>, <0.14, 0.94>, <0.17, 0.99>, <0.17, 0.995> open pigment { White } } cone {<0,0.90,0>0.07<0,1.11> 0.01 texture {Tinny_Brass}} pigment {White}} //------------------------ //bus (see spacecraft.gif) #declare bus = union { #declare bus_element = union { box { <-.17,-.25, .41> <.17,0.,.51 > } cylinder { <-.17,-.25, .50> <-.17,0.,.50>, 0.01 }} #declare Count=0; #while (Count < 10) object{bus_element rotate y*(36*Count+18)} #declare Count=Count+1; #end #declare s1=object {cylinder { < -.17, 0.0,0.43> < 0, 0.22,0.43> ,2*rs } pigment {White}} #declare s2=object {cylinder { < .17, 0.0,0.43> < 0, 0.22,0.43> ,2*rs } pigment {White}} #declare Count=0; #while (Count <5) object {s1 rotate y*72*Count} object {s2 rotate y*72*Count} #declare Count=Count+1; #end #declare s1=object {cylinder { < -.38, -0.25,0.29> < 0,-0.85,0.29> ,2*rs } pigment {White}} #declare s2=object {cylinder { < 0.38, -0.25,0.29> < 0,-0.85,0.29> ,2*rs } pigment {White}} object {s1 rotate y*90} object {s1 rotate y*270} object {s2 rotate y*90} object {s2 rotate y*270} #declare s3=object {cylinder { < -.38, -0.25,0.29> < -.38,-0.85,0> ,2*rs } pigment {White}} #declare s4=object {cylinder { < 0.38, -0.25,0.29> < 0.38,-0.85,0> ,2*rs } pigment {White}} object {s3 rotate y*90} object {s3 rotate y*270} object {s4 rotate y*90} object {s4 rotate y*270} #declare s5=object {cylinder { < -.38, -0.25,0.29> < -.38,-0.25,-0.29> ,2*rs } pigment {White}} #declare s6=object {cylinder { < 0.38, -0.25,0.29> < -.38,-0.25, 0.29> ,2*rs } pigment {White}} object {s5 rotate y*90} object {s5 rotate y*270} object {s6 rotate y*90} object {s6 rotate y*270} //optical calibration target and radiator object {cylinder { < -.38, -0.45,0.23> < -0.38,-0.45,-0.23> ,2*rs } rotate y*90 pigment {White}} object {cylinder { < 0.49, -0.75,0.> < 0.38,-0.85, 0 > ,2*rs } rotate y*270 pigment {White}} object {triangle { < -.38,-0.45,0.23> < -.38,-0.45,-0.23> < -.50,-0.75,0.23> } rotate y*90 pigment {White} } object {triangle { < -.38,-0.45,-0.23> < -.50,-0.75,0.23> < -.50,-0.75,-0.23> } rotate y*90 pigment {White} } } //end bus //------------------------- // thermoelectric generator #declare power = union { object {cylinder { < -.17, 0, 0.51> < -.17, 0.1,0.94> ,2*rs }} object {cylinder { < 0.17, 0, 0.51> < 0.17, 0.1,0.94> ,2*rs }} object {cylinder { < -.17,-.25,0.51> < -.17, 0.1,0.94> ,2*rs }} object {cylinder { < 0.17,-.25,0.51> < 0.17, 0.1,0.94> ,2*rs }} object {cylinder { < -.17, 0.1,0.94> < 0.17, 0.1,0.94> ,2*rs }} object {cylinder { < -.17,-.25, 0.51> < -.14,-.25,1.5> ,2*rs }} object {cylinder { < .17,-.25, 0.51> < .14,-.25,1.5> ,2*rs }} object {cylinder { < -.17,0.1,0.94> < -.14,-.25 ,1.50> ,2*rs }} object {cylinder { < 0.17,0.1,0.94> < 0.14,-.25 ,1.50> ,2*rs }} //generator object {cylinder { < 0, -.25,1.50> < 0,-.25 ,2.50> , .14 } } object {cylinder { < -.15, -.25,1.50> < -.15,-.25 ,2.50> , .01 }} object {cylinder { < -.15, -.25,1.50> < -.15,-.25 ,2.50> , .01 }} object {cylinder { < 0, -.4,1.50> < 0,-.4,2.50> , .01 }} object {cylinder { < 0, -.25,1.50> <0,-.4,2.50> , .01 }} object {torus { .14,.05 rotate x*90 translate <0,-.25,2.5> }} object {torus { .14,.025 rotate x*90 translate <0,-.25,1.5> } } object {torus { .14,.025 rotate x*90 translate <0,-.25,1.83> }} object {torus { .14,.025 rotate x*90 translate <0,-.25,2.16> }} rotate y*198 color Gray75} // end thermoelectric generator //------------------------- //arm with some instruments #declare arm = object {union { #declare arm_element = object {cylinder { <-.05, 0.27,.77> <-.05, 0.373,.67> , rs } pigment {White}} #declare Count=0; #while (Count < 8) object{arm_element translate y*0.0125*Count translate z*0.13*Count } #declare Count=Count+1; #end #declare arm_element = object {cylinder { <-.05, 0.27,.67> <.05, 0.27,.77> , rs } pigment {White}} #declare Count=0; #while (Count < 8) object{arm_element translate y*0.0125*Count translate z*0.13*Count } #declare Count=Count+1; #end #declare arm_element = object {cylinder { <-.05, 0.373,.77> <.05,0.373,.67> , rs } pigment {White}} #declare Count=0; #while (Count < 8) object{arm_element translate y*0.0125*Count translate z*0.13*Count } #declare Count=Count+1; #end #declare arm_element = object {cylinder { <.05, 0.27,.67> <.05, 0.373,.77> , rs } pigment {White}} #declare Count=0; #while (Count < 8) object{arm_element translate y*0.0125*Count translate z*0.13*Count} #declare Count=Count+1; #end object {cylinder { < .05, 0.26,.67> < .05, 0.37,1.71> , rs } pigment {White}} object {cylinder { <-.05, 0.27,.67> <-.05, 0.37,1.71> , rs } pigment {White}} object {cylinder { < .05, 0.37,.67> < .05, 0.46,1.71> , rs } pigment {White}} object {cylinder { <-.05, 0.37,.67> <-.05, 0.46,1.71> , rs } pigment {White}} object {cylinder { < .05, 0.27,0.67> < .05, 0.37, 0.67> , rs } pigment {White}} object {cylinder { <-.05, 0.27,0.67> <-.05, 0.37, 0.67> , rs } pigment {White}} object {cylinder { <-.05, 0.27,0.67> < .05, 0.27, 0.67> , rs } pigment {White}} object {cylinder { <-.05, 0.37,0.67> < .05, 0.37, 0.67> , rs } pigment {White}} object {cylinder { < .05, 0.37,1.71> < .05, 0.46, 1.71> , rs } pigment {White}} object {cylinder { <-.05, 0.37,1.71> <-.05, 0.46, 1.71> , rs } pigment {White}} object {cylinder { <-.05, 0.37,1.71> < .05, 0.37, 1.71> , rs } pigment {White}} object {cylinder { <-.05, 0.46,1.71> < .05, 0.46, 1.71> , rs } pigment {White}} object {cylinder { <-.17, .0, .50> <-.05, 0.30,.87>, rs } pigment {White}} object {cylinder { <-.17, .0, .50> < .05, 0.30,.87>, rs } pigment {White}} object {cylinder { < .17, .0, .50> < .05, 0.27,.67>, rs } pigment {White}} object {cylinder { < .17, .0, .50> <-.05, 0.27,.67>, rs } pigment {White}} //cosmic ray object {box{<0,0,0><0.16,0.07,0.16>} pigment {White}rotate x*(-5.) translate <-.08,0.44,1.048>} object {cylinder { < 0, 0.31,1.17> <0, 0.37,1.17>, .06 } rotate x*(-5.5) pigment {White} } //plasma #declare plasma = object{ prism {linear_sweep linear_spline 0,1,7, <3,5>, <-3,5>, <-5,0>, <-3,-5>, <3, -5>, <5,0>, <3,5> }} object {plasma pigment { White } scale 0.02 rotate x*(-5.) translate < 0,0.46,1.45>} object {plasma pigment { White } scale 0.015 rotate x*(-5.) translate < 0,0.44,1.45>} object {box{<0,0,0><0.14,0.14,0.14>} pigment {White} rotate x*(-5.) translate <-.08,0.36,1.6>} }} //end of arm //more instruments attached to the arm //arm #declare axis1=object {cylinder { < 0,0.,0.> < 0.,-0.6, 0.> , .01 } pigment {White}} //infrared #declare infrared= object {union { object {cylinder { < .15,-0.6,-0.07> < .15 ,-0.6, 0.07> , .15 open } pigment {White}} object {cylinder { < .15,-0.6,-0.001> < .15 ,-0.6, 0.001> , .15 } pigment {White}} object {cylinder { < .15,-0.6,-0.15> < .15 ,-0.6,0.15> , .03 } pigment {White}} object {cylinder { < .15,-0.6,-0.14> < .15 ,-0.60,-0.13> , .05 } pigment {White}} object {cylinder { < .15,-0.6,0.14> < .15 ,-0.60,0.13> , .05 } pigment {White}} object {box { < 0., -0.7,-0.04><-.05 ,-0.5, 0.04> } pigment {White}} object {box { <-0.05,-0.42,-0.02> <.25 ,-0.35,0.02> } pigment {White}} }} //narrow angle #declare narrow = object {union { object {cylinder { < -0.1,-0.3,-0.2> <-0.1 ,-0.3, 0.2> , .05 open } pigment {White}} object {cylinder { < -0.1,-0.3,-0.17> <-0.1 ,-0.3,-0.16> , .06 } pigment {White}} object {cylinder { < -0.1,-0.3,-0.1> <-0.1 ,-0.3,0.1> , .06 } pigment {White}} object {cylinder { < -0.1,-0.3,0.16> <-0.1 ,-0.3,0.17> , .06 } pigment {White}} }} #declare photopolarimeter = object{ narrow scale 0.5 translate < .13, 0.0,0.05>} #declare instruments = object{ union { object{axis1} object{infrared rotate y*90} object{narrow rotate y*90} object {photopolarimeter rotate y*90} rotate z*(-90) translate z*1.71 translate y*0.46 } } //assemble whole instrument arm # declare instrument_arm = object{union { object {arm} object {instruments}} } // //--------------------- //magnetometer #declare magnetometer = object {union { #declare arm_element1 = object {cylinder { <-.05, 0.,0.> < .05, 0.,0.> , rs } pigment {White}} #declare Count=0; #while (Count < 55) object{arm_element1 translate z*0.07*Count } #declare Count=Count+1; #end #declare arm_element2 = object {cylinder { < .05, 0.,0.> < 0., 0.0707,0.> , rs } pigment {White}} #declare Count=0; #while (Count < 55) object{arm_element2 translate z*0.07*Count } #declare Count=Count+1; #end #declare arm_element3 = object {cylinder { <-.05, 0.,0.> < 0., 0.0707,0.> , rs } pigment {White}} #declare Count=0; #while (Count < 55) object{arm_element3 translate z*0.07*Count } #declare Count=Count+1; #end object {cylinder { <-.05, 0, 0.> < -0.05,0., 3.85> , rs } pigment {White}} object {cylinder { < .05, 0, 0.> < 0.05,0., 3.85> , rs } pigment {White}} object {cylinder { < 0, 0.0707,0.> < 0., 0.0707,3.85> , rs } pigment {White}} object {cylinder { <-.05, 0, 3.85> < 0, 0.0353, 3.95> , rs } pigment {White}} object {cylinder { < .05, 0, 3.85> < 0, 0.0353, 3.95> , rs } pigment {White}} object {cylinder { < 0, 0, 0 > < 0, 0.0353, 3.95> , rs } pigment {White}} object {cylinder { < 0, 0.0353, 0> < 0, 0.0353, 0.2> , 0.06 } pigment {White}} object {cylinder { < 0, 0.0353,0.04>< 0, 0.0353, 0.06> , 0.07 } pigment {White}} object {cylinder { < 0, 0.0353,0.16>< 0, 0.0353, 0.18> , 0.07 } pigment {White}} } rotate x*(-30) translate <0.,0.,.5> rotate y*(144) } //radio astronomy antenna, re-used instrument arm #declare raa = object {magnetometer translate <.55,0,-.65> rotate y*90 scale .4} //parts finished, assemble spacecraft------------------------- #declare voyager = union { object {antenna} object {inner_antenna} object {ring} object {bus texture {Tinny_Brass} } object {instrument_arm} object {magnetometer} object {raa} object {power texture {Brushed_Aluminum}} }