home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / gfx / 3d / irit / scripts / platonic.irt < prev    next >
Encoding:
Text File  |  1993-12-30  |  4.1 KB  |  160 lines

  1. #
  2. # Constructs the five Platonic Solids.
  3. #
  4. #                    Gershon Elber Dec. 1991.
  5. #
  6.  
  7. g = (sqrt( 5 ) + 1) / 2; # The golden ratio
  8. q = g - 1;
  9.  
  10. #
  11. # Tetrahedron
  12. #
  13.  
  14. v1 = vector(  1,  1,  1 );
  15. v2 = vector(  1, -1, -1 );
  16. v3 = vector( -1,  1, -1 );
  17. v4 = vector( -1, -1,  1 );
  18.  
  19. pl1 = poly( list( v1, v3, v2 ), false );
  20. pl2 = poly( list( v1, v4, v3 ), false );
  21. pl3 = poly( list( v1, v2, v4 ), false );
  22. pl4 = poly( list( v2, v3, v4 ), false );
  23.  
  24. tetra = mergepoly( list( pl1, pl2, pl3, pl4 ) );
  25.  
  26. interact( tetra );
  27.  
  28. save( "tetrahdr", tetra );
  29.  
  30. #
  31. # Cube
  32. #
  33.  
  34. v1 = vector( -1, -1, -1 );
  35. v2 = vector( -1, -1,  1 );
  36. v3 = vector( -1,  1,  1 );
  37. v4 = vector( -1,  1, -1 );
  38. v5 = vector(  1, -1, -1 );
  39. v6 = vector(  1, -1,  1 );
  40. v7 = vector(  1,  1,  1 );
  41. v8 = vector(  1,  1, -1 );
  42.  
  43. pl1 = poly( list( v4, v3, v2, v1 ), false );
  44. pl2 = poly( list( v5, v6, v7, v8 ), false );
  45. pl3 = poly( list( v1, v2, v6, v5 ), false );
  46. pl4 = poly( list( v2, v3, v7, v6 ), false );
  47. pl5 = poly( list( v3, v4, v8, v7 ), false );
  48. pl6 = poly( list( v4, v1, v5, v8 ), false );
  49.  
  50. cube = mergepoly( list( pl1, pl2, pl3, pl4, pl5, pl6 ) );
  51.  
  52. interact( cube );
  53.  
  54. #
  55. # Octahedron
  56. #
  57.  
  58. v1 = vector(  0,  0,  1 );
  59. v2 = vector(  1,  0,  0 );
  60. v3 = vector(  0,  1,  0 );
  61. v4 = vector( -1,  0,  0 );
  62. v5 = vector(  0, -1,  0 );
  63. v6 = vector(  0,  0, -1 );
  64.  
  65. pl1 = poly( list( v1, v3, v2 ), false );
  66. pl2 = poly( list( v1, v4, v3 ), false );
  67. pl3 = poly( list( v1, v5, v4 ), false );
  68. pl4 = poly( list( v1, v2, v5 ), false );
  69. pl5 = poly( list( v6, v2, v3 ), false );
  70. pl6 = poly( list( v6, v3, v4 ), false );
  71. pl7 = poly( list( v6, v4, v5 ), false );
  72. pl8 = poly( list( v6, v5, v2 ), false );
  73.  
  74. octa = mergepoly( list( pl1, pl2, pl3, pl4, pl5, pl6, pl7, pl8 ) );
  75.  
  76. interact( octa );
  77.  
  78. save( "octahdr", octa );
  79.  
  80. #
  81. # Dodecahedron
  82. #
  83.  
  84. v1  = vector(  0,  q,  g );
  85. v2  = vector(  0, -q,  g );
  86. v3  = vector(  1,  1,  1 );
  87. v4  = vector(  1, -1,  1 );
  88. v5  = vector( -1, -1,  1 );
  89. v6  = vector( -1,  1,  1 );
  90. v7  = vector( -g,  0,  q );
  91. v8  = vector(  g,  0,  q );
  92. v9  = vector(  q,  g,  0 );
  93. v10 = vector( -q,  g,  0 );
  94. v11 = vector( -q, -g,  0 );
  95. v12 = vector(  q, -g,  0 );
  96. v13 = vector( -g,  0, -q );
  97. v14 = vector(  g,  0, -q );
  98. v15 = vector(  1,  1, -1 );
  99. v16 = vector( -1,  1, -1 );
  100. v17 = vector( -1, -1, -1 );
  101. v18 = vector(  1, -1, -1 );
  102. v19 = vector(  0,  q, -g );
  103. v20 = vector(  0, -q, -g );
  104.  
  105. pl1  = poly( list( v2, v1, v3, v8, v4 ), false );
  106. pl2  = poly( list( v1, v2, v5, v7, v6 ), false );
  107. pl3  = poly( list( v1, v3, v9, v10, v6 ), false );
  108. pl3  = poly( list( v6, v10, v9, v3, v1 ), false );
  109. pl4  = poly( list( v2, v4, v12, v11, v5 ), false );
  110. pl5  = poly( list( v4, v8, v14, v18, v12 ), false );
  111. pl6  = poly( list( v5, v7, v13, v17, v11 ), false );
  112. pl6  = poly( list( v11, v17, v13, v7, v5 ), false );
  113. pl7  = poly( list( v13, v16, v10, v6, v7 ), false );
  114. pl8  = poly( list( v16, v19, v15, v9, v10 ), false );
  115. pl9  = poly( list( v3, v9, v15, v14, v8 ), false );
  116. pl10 = poly( list( v14, v15, v19, v20, v18 ), false );
  117. pl11 = poly( list( v12, v18, v20, v17, v11 ), false );
  118. pl12 = poly( list( v17, v13, v16, v19, v20 ), false );
  119. pl12 = poly( list( v20, v19, v16, v13, v17 ), false );
  120.  
  121. dodeca = mergepoly( list( pl1, pl2, pl3, pl4, pl5, pl6,
  122.               pl7, pl8, pl9, pl10, pl11, pl12 ) );
  123.  
  124. interact( dodeca );
  125.  
  126. save( "dodechdr", dodeca );
  127.  
  128. #
  129. # Icosahedron (Note we construct only its upper half and reflect it).
  130. #
  131.  
  132. v1  = vector(  1,  0,  g );
  133. v2  = vector( -1,  0,  g );
  134. v3  = vector(  0,  g,  1 );
  135. v4  = vector(  0, -g,  1 );
  136. v5  = vector(  g,  1,  0 );
  137. v6  = vector( -g,  1,  0 );
  138. v7  = vector( -g, -1,  0 );
  139. v8  = vector(  g, -1,  0 );
  140. v9  = vector(  0,  g, -1 );
  141.  
  142. pl1  = poly( list( v2, v3, v1 ), false );
  143. pl2  = poly( list( v1, v4, v2 ), false );
  144. pl3  = poly( list( v2, v6, v3 ), false );
  145. pl4  = poly( list( v3, v5, v1 ), false );
  146. pl5  = poly( list( v3, v9, v5 ), false );
  147. pl6  = poly( list( v3, v6, v9 ), false );
  148. pl7  = poly( list( v2, v7, v6 ), false );
  149. pl8  = poly( list( v2, v4, v7 ), false );
  150. pl9  = poly( list( v1, v8, v4 ), false );
  151. pl10 = poly( list( v1, v5, v8 ), false );
  152.  
  153. icosa1 = mergepoly( list( pl1, pl2, pl3, pl4, pl5, pl6, pl7, pl8, pl9, pl10 ) );
  154. icosa2 = icosa1 * rotx( 180 );
  155. icosa = mergepoly( list( icosa1, icosa2 ) );
  156.  
  157. interact( icosa );
  158.  
  159. save( "icosahdr", icosa );
  160.