/* Science building harvard Unit 1 = 1m Origin: corner to Memorial hall z-direction: main entrance face side x-direction: cooling tower side Oliver Knill, Jul 2000-Jun 2001 Harvard University All the measurements are rough estimates from photos From above: v0 v1 v2 v3 v4 v5 v6 v7 v8=a2 U9 U10 P37 P38 b19=2b+b14 u7=b19 +--------+ +-----------+ / Spp8*\ P34 P33 u6 U7 / +---+-----------+ 2b u5 +-----+U8 U11 |U12 | | * Sp8 * | | x | * Sp7 Spp7 | | V4 | * Sp6 * | | u4 U5+------+U6 x Spp6 |P35 |P36 / V3 * Sp5 +-----------+ b18=2b-b15 / xV1 Spp5 | | / V2 * Sp4 * | | u3 U4+ * x * Sp3 | | | Sp1 * | | | Sp2 Spp4 | P41 P42| b17 | * | ========= | | | P39 P40| b16 u2 U3+ Spp1 | | \ * Spp3 | | u1 +U2 * | | | Spp2 | | | * | | P4 | S1 S2 S3 S4 S5 P12=U0 u0=b +--+----------------------------------------------+ P3 b | U1| | | | | | | | | | | | | | DD b13 | | | | | | | | | a13 |-----------| | | | | | | | | |P10 | P8 | | | P7 P31 P32| b12 +---------+---------------------------+ ========= | b11 b2 | T1 T2 T3 T4 T5 P45 | P29 P30| | | Glass | a9 a10| |+--+ |------------------+ | | b3 || | |------------------+ | P27 P28| b10 |+--+ |------------------+ b20 | ========= | b9 | a3 | P43 P44 | P25 P26| | | a14 | | | | |-----------| | | | | | | | | | | | | |-----------| | | | | b1 | P5 +---------------------------+ P6 | | +--+ | b8 P24 P23 |-----------| | b4 +--+ | b7 ======== |P15 | P16 b5 | a4 | P21 P22 | O O | |P1 | P9 a7 a8 |P13 | P14 b0 0 +---------+-------------------------------P19=P20-+ P2 0 a1 a2 a5 a6 a P11 P17 P18 */ #include "greenhouse.inc" #declare h1 = 30; // height of library block #declare h2 = 20; // height of administration block #declare h3 = 40; // height of first stair block #declare h4 = 70; // height of large back block #declare h5 = 50; // height of second stair block #declare h6 = 60; // height of third stair block #declare h7 = 70; // height of fourth stair block #declare h8 = 80; // height of fifth stair block #declare h9 = 100; // height of sixth stair block #declare h10 = 30; // height of big block near cooling tower #declare h11 = 30; // height of big block at other end #declare a = 250; // width of building #declare b = 250; // length of building #declare a1 = 80; // width of library block #declare a2 = 190; // start of large bock in back #declare a5 = a2+10; // beginning of column for large block #declare a6 = a2+40; // end of column for large block #declare b0 = 6; // offset of large block #declare b1 = 50; // length of administr block #declare b2 = 180; // start of stair block #declare st = 25; // step width #declare c3 = 20; // bigger prism length #declare d3 = 15; // bigger prism width #declare c4 = 7; // smaller prism length #declare d4 = 12; // smaller prism width #declare e3 = 30; // height bigger prism #declare e4 = 20; // height smaller prism #declare a3 = 30; // location of air roof (bigger prism) #declare b3 = 100; // location of air roof (bigger prism) #declare a4 = a1-c4; // location of air roof (smaller prism) #declare b4 = b1/2; // location of air roof (smaller prism) #declare a7 = (a1+a2)/2; // left point of first white chimney #declare a8 = a7+30; // right point of first white chimney #declare b7 = b1/2; // position of first white chimney #declare b8 = b1/2+5; // position of first white chimney #declare e5 = 20; // height of first white chimney #declare a9 = a2+10; // left point of two big white chimneys #declare a10 = a2+50; // right point of two big white chimneys #declare b9 = 80; // location of second white chimney y begin #declare b10 = 88; // location of second white chimney y end #declare b11 = 150; // location of third white chimney y begin #declare b12 = 158; // location of third white chimney y end #declare e6 = 30; // height of second white chimney #declare e7 = 30; // height of third white chimney #declare s1 = st; // start of first stair #declare s2 = 2*st; // start of second stair #declare s3 = 3*st; // start of third stair #declare s4 = 4*st; // start of fourth stair #declare s5 = 5*st; // start of fifth stair #declare s6 = 6*st; // start of sixth stair #declare a13 = s6+5; // x-center of first telescope #declare b13a = b-25; // y-center of first telescope #declare b13b = b-40; // y-center of first telescope #declare r13 = 15; // radius of first telescope #declare r14 = 10; // radius of second telescope #declare a14 = a1+70; // determines lenght of greenhouse #declare b5 = 20; // width of big box with hyperbolidic coolers #declare b15 = 30; // width of big box on end of building #declare b14 = 10; // hanging over of big box at end of building #declare b16 = (2*b-b15+b)/2; // location of fourth white chimney #declare b17 = b16+8; // end of fourth white chimney #declare b18 =2*b-b15; #declare b19 =2*b+b14; #declare b20 = b2-40; // start of greenhouse #declare P1 = <0,0,0>; // Edge near memorial hall #declare P2 = ; // Edge near cooling hyperboloids #declare P3 = ; // Edge near highest point #declare P4 = <0,0,b>; // Edge at lower stair #declare P5 = ; // Inner court corner #declare P6 = ; // Inner court corner #declare P7 = ; // Inner court corner #declare P8 = ; // Inner court corner #declare P9 = ; // Library-Administration corner #declare P10= < 0,0,b2>; // Stairs corner #declare P11= ; // Large block corner #declare P12= ; // Large block corner #declare P13= ; #declare P14= ; #declare P15= ; // Corners on big box #declare P16= ; // Corners of big box #declare P35= ; // Corners of other big box #declare P36= ; #declare P37= ; #declare P38= ; #declare P17= ; // Corner of Column for big box #declare P18= ; // dito #declare P19= ; // dito #declare P20= ; // dito #declare P21= ; // Corner of first white chimney #declare P22= ; // Corner of first white chimney #declare P23= ; // Corner of first white chimney #declare P24= ; // Corner of first white chimney #declare P25= ; // Corner of second white chimney #declare P26= ; // Corner of second white chimney #declare P28= ; // Corner of second white chimney #declare P27= ; // Corner of second white chimney #declare P29= ; // Corner of third white chimney #declare P30= ; // Corner of third white chimney #declare P32= ; // Corner of third white chimney #declare P31= ; // Corner of third white chimney #declare P39= ; // Corner of fourth white chimney #declare P40= ; // Corner of fourth white chimney #declare P41= ; // Corner of fourth white chimney #declare P42= ; // Corner of fourth white chimney #declare P43= ; // One corner of greenhouse P43,P44,P45,P8 #declare P44= ; // Second corner of greenhouse P43,P44,P45,P8 #declare P45= ; // Third corner of greenhouse P43,P44,P45,P8 #declare P33 = ; // Corner at other end #declare P34 = ; // Inner court corner #declare S1 = ; // Corners of stairs #declare S2 = ; #declare S3 = ; #declare S4 = ; #declare S5 = ; #declare S6 = ; #declare T1 = ; // Corners of stairs #declare T2 = ; #declare T3 = ; #declare T4 = ; #declare T5 = ; #declare T6 = ; #declare Pr1 = ; // Bigger Prism #declare Pr2 = ; // Bigger Prism #declare Pr3 = ; // Bigger Prism #declare Pr4 = ; // Bigger Prism #declare Qr1 = ; // Smaller Prism #declare Qr2 = ; // Smaller Prism #declare Qr3 = ; // Smaller Prism #declare Qr4 = ; // Smaller Prism #declare DD1 = ; // First telescope Dome center #declare DD2 = ; // Second telescope Dome center // -------------------The Spider ----------------------------------------------------- #declare v0=0; // divisions of the interval 0,a2 #declare v1=7; #declare v2=30; #declare v3=70; #declare v4=100; #declare v5=120; #declare v6=160; #declare v7=170; #declare v8=a2; // a2=190 #declare u0=b; // divisions of the interval [b=250,b19=510] #declare u1=b+20; #declare u2=b+50; #declare u3=b+90; #declare u4=b+130; #declare u5=b+190; #declare u6=b+210; #declare u7=b+230; // 250+260 #declare h12=30; // height of the lecture hall building #declare U0 = P12; // points on floor #declare U1 = ; // Start describing wall #declare U2 = ; #declare U3 = ; #declare U4 = ; #declare U5 = ; #declare U8 = ; #declare U6 = U5+(U8-U5)/3; #declare U7 = U5+2*(U8-U5)/3; #declare U9 = ; #declare U10 = ; #declare U11 = ; #declare U12 = ; #declare UU0 = U0+<0,h12,0>; // points on roof #declare UU1 = U1+<0,h12,0>; #declare UU2 = U2+<0,h12,0>; #declare UU3 = U3+<0,h12,0>; #declare UU4 = U4+<0,h12,0>; #declare UU5 = U5+<0,h12,0>; #declare UU6 = U6+<0,h12,0>; #declare UU7 = U7+<0,h12,0>; #declare UU8 = U8+<0,h12,0>; #declare UU9 = U9+<0,h12,0>; #declare UU10 = U10+<0,h12,0>; #declare UU11 = U11+<0,h12,0>; #declare UU12 = U12+<0,h12,0>; #declare Cc = U6; // center of the cube #declare wc = 20; // radius of cube #declare hc = 45; // height of the cube #declare V1 = <-wc,0,-wc>; #declare V2 = <+wc,0,-wc>; #declare V3 = <+wc,0,wc>; #declare V4 = <-wc,0,wc>; #declare h13 = 18; // height of legs #declare r_spider1 = 40; // inner radius for spider legs #declare r_spider2 = 130; // outer radius for spider legs #declare phi_spider1 = -100*2*pi/360; // angle for first leg #declare phi_spider2 = 50*2*pi/360; // angle for 9'th leg #declare leg_thickness=2; // thickness of the leg // -----------------Textures ----------------------------------------------------- #declare stone_texture= texture { pigment{ colour rgb <0.9,0.9,0.9> } // normal{ granite 0.6 scale 0.24 } finish{ phong 0.8 phong_size 200 } } #declare white_stone_texture= texture { pigment{ colour rgb <0.95,0.95,0.95> } // normal{ granite 0.6 scale 0.24 } finish{ phong 0.8 phong_size 200 } } #declare roof_texture= texture { pigment{ colour rgb <0.5,0.2,0.2> } finish{ phong 0.8 phong_size 200 } } #declare iron_texture= texture { pigment{ colour rgb <0.9,0.2,0.2> } finish{ phong 0.9 phong_size 200 } } // ----------------- Geometric Objects --------------------------------------------- #macro Make_Cube(A1,A2,A3,A4,h) #declare B1=A1+<0,h,0>; #declare B2=A2+<0,h,0>; #declare B3=A3+<0,h,0>; #declare B4=A4+<0,h,0>; union{ union { polygon { 5, A1,B1,B2,A2,A1 texture { stone_texture } } polygon { 5, A2,B2,B3,A3,A2 texture { stone_texture } } polygon { 5, A3,B3,B4,A4,A3 texture { stone_texture } } polygon { 5, A4,B4,B1,A1,A4 texture { stone_texture } } } polygon { 5, B1,B2,B3,B4,B1 texture { roof_texture } } } #end #macro Make_Cube1(A1,A2,A3,A4,h1,h2) // all roof texture #declare B1=A1+<0,h2,0>; #declare B2=A2+<0,h2,0>; #declare B3=A3+<0,h2,0>; #declare B4=A4+<0,h2,0>; #declare A1=A1+<0,h1,0>; #declare A2=A2+<0,h1,0>; #declare A3=A3+<0,h1,0>; #declare A4=A4+<0,h1,0>; union{ union { polygon { 5, A1,B1,B2,A2,A1 texture { roof_texture } } polygon { 5, A2,B2,B3,A3,A2 texture { roof_texture } } polygon { 5, A3,B3,B4,A4,A3 texture { roof_texture } } polygon { 5, A4,B4,B1,A1,A4 texture { roof_texture } } } polygon { 5, B1,B2,B3,B4,B1 texture { roof_texture } } } #end #macro Make_Cube2(A1,A2,A3,A4,h) // all concrete #declare B1=A1+<0,h,0>; #declare B2=A2+<0,h,0>; #declare B3=A3+<0,h,0>; #declare B4=A4+<0,h,0>; union{ union { polygon { 5, A1,B1,B2,A2,A1 texture { stone_texture } } polygon { 5, A2,B2,B3,A3,A2 texture { stone_texture } } polygon { 5, A3,B3,B4,A4,A3 texture { stone_texture } } polygon { 5, A4,B4,B1,A1,A4 texture { stone_texture } } } polygon { 5, B1,B2,B3,B4,B1 texture { stone_texture } } } #end #macro Make_Prism(A1,A2,A3,A4,h) // A1, A4 are high, Prism on roof #declare B1=A1+<0,h,0>; #declare B2=A2+<0,1,0>; #declare B3=A3+<0,1,0>; #declare B4=A4+<0,h,0>; union{ union { polygon { 5, A1,B1,B2,A2,A1 texture { stone_texture } } polygon { 5, A2,B2,B3,A3,A2 texture { stone_texture } } polygon { 5, A3,B3,B4,A4,A3 texture { stone_texture } } polygon { 5, A4,B4,B1,A1,A4 texture { stone_texture } } } polygon { 5, B1,B2,B3,B4,B1 texture { stone_texture } } translate <0,h1,0> } #end #macro Make_Chimney(A1,A2,A3,A4,h) // for the white chimneys on the roof #declare B1=A1+<0,h,0>; #declare B2=A2+<0,h,0>; #declare B3=A3+<0,h,0>; #declare B4=A4+<0,h,0>; #declare r=(A1-A4).z; union{ box {A1,B3 texture { white_stone_texture }} cylinder {(A1+A4)/2,(B1+B4)/2,r/2 texture{ white_stone_texture} } cylinder {(A2+A3)/2,(B2+B3)/2,r/2 texture{ white_stone_texture} } } #end #macro Make_Dome(XX,r1) // Dome of telecope difference { sphere {XX,r1 } box { XX+<-2*r1,-2*r1,-2*r1>, XX+<2*r1,0,2*r1> } texture{ white_stone_texture} } #end #macro Spider_Leg(P1,P2,h) union { cylinder { P1,(P1+P2)/2+<0,h,0>,leg_thickness } sphere { (P1+P2)/2+<0,h,0>, leg_thickness } cylinder { (P1+P2)/2+<0,h,0>, P2,leg_thickness} texture{ iron_texture } } #end #macro Spider_Legs(rr1,rr2,hh,number_legs,phi1,phi2) union { #declare leg_count=0; #while (leg_count hh) #declare leg_count=leg_count+1; #end translate Cc translate <0,h12,0> } #end #declare Lecture_Hall = union { polygon { 5, U1,U2,UU2,UU1,U1 texture { stone_texture } } polygon { 5, U2,U3,UU3,UU2,U2 texture { stone_texture } } polygon { 5, U3,U4,UU4,UU3,U3 texture { stone_texture } } polygon { 5, U4,U5,UU5,UU4,U4 texture { stone_texture } } polygon { 5, U5,U6,UU6,UU5,U5 texture { stone_texture } } polygon { 5, U6,U7,UU7,UU6,U6 texture { stone_texture } } polygon { 5, U7,U8,UU8,UU7,U7 texture { stone_texture } } polygon { 5, U8,U9,UU9,UU8,U8 texture { stone_texture } } polygon { 5, U9,U10,UU10,UU9,U9 texture { stone_texture } } polygon { 5, U10,U11,UU11,UU10,U10 texture { stone_texture } } polygon { 5, U11,U12,UU12,UU11,U11 texture { stone_texture } } polygon {14, U1,U0,U12,U11,U10,U9,U8,U7, U6,U5,U4,U3,U2,U1 texture {stone_texture} } polygon {14, UU1,UU0,UU12,UU11,UU10,UU9,UU8,UU7, UU6,UU5,UU4,UU3,UU2,UU1 texture {stone_texture} } } #declare Spider_Head = object { Make_Cube2(V1,V2,V3,V4,hc) rotate y*45 translate Cc } #declare Green_House = #declare science_building = union { Make_Cube(P1,P9,P8,P10,h1) // Main library Make_Cube(P9,P11,P6,P5,h2) // Administration Make_Cube(P4,P10,P7,P12,h3) // First block of stairs Make_Cube(P13,P14,P3,P12,h4) // Main block in the back Make_Cube(P34,P12,P3,P33,h4) // Large appendix Make_Cube(T1,P7,P12,S1,h5) // Second block of stairs Make_Cube(T2,P7,P12,S2,h6) // Third block of stairs Make_Cube(T3,P7,P12,S3,h7) // Forth block of stairs Make_Cube(T4,P7,P12,S4,h8) // Fifth block of stairs Make_Cube(T5,P7,P12,S5,h9) // Sixth block of stairs Make_Cube1(P11,P2,P16,P15,h4,h4+h10) // big cube with hyperbolic coolers Make_Cube1(P17,P18,P19,P20,0,h4) // column for big cube Make_Cube1(P35,P36,P38,P37,h4,h4+h11) // big cube on end Make_Prism(Pr1,Pr2,Pr3,Pr4,e3) // Bigger Prism Make_Prism(Qr1,Qr2,Qr3,Qr4,e4) // Smaller Prism Make_Chimney(P21,P22,P23,P24,e5) // First white chimney Make_Chimney(P25,P26,P28,P27,e6) // Second white chimney Make_Chimney(P29,P30,P32,P31,e7) // Third white chimney Make_Chimney(P39,P40,P42,P41,e7) // Fourth white chimney Make_Dome(DD1,r13) // First Telescope dome Make_Dome(DD2,r14) // Second Telescope dome green_house(P43,P44,P44+<0,19,0>,P43+<0,19,0>, P8,P45,P45+<0,40,0>,P8+<0,40,0>, 20,2,5,0.2) object{ Lecture_Hall} object{ Spider_Head} Spider_Legs(r_spider1,r_spider2,h13,9,phi_spider1,phi_spider2) }