home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / gfx / 3d / irit / scripts / trivars.irt < prev    next >
Encoding:
Text File  |  1995-02-01  |  5.2 KB  |  214 lines

  1. #
  2. # Some simple tests of trivariate functions.
  3. #
  4. #                Gershon Elber, December 1994.
  5. #
  6.  
  7. iritstate( "dumplevel", 9 );
  8.  
  9. #
  10. # A 2 by 2 by 2 trilinear trivariate:
  11. #
  12. tv1 = tbezier( list( list( list( ctlpt( E3, 0.1, 0.0, 0.8 ),
  13.                  ctlpt( E3, 0.2, 0.1, 2.4 ) ),
  14.                list( ctlpt( E3, 0.3, 2.2, 0.2 ),
  15.                  ctlpt( E3, 0.4, 2.3, 2.0 ) ) ),
  16.              list( list( ctlpt( E3, 2.4, 0.8, 0.1 ),
  17.                  ctlpt( E3, 2.2, 0.7, 2.3 ) ),
  18.                list( ctlpt( E3, 2.3, 2.6, 0.5 ),
  19.                  ctlpt( E3, 2.1, 2.5, 2.7) ) ) ) );
  20. color( tv1, yellow );
  21. view_mat = view_mat * sc( 0.2 );
  22. viewobj( list( view_mat ) );
  23. interact( tv1 );
  24.  
  25. #
  26. # A 3 by 3 by 3 triquadratic trivariate:
  27. #
  28. tv2 = tbspline( 3, 3, 2,
  29.         list( list( list( ctlpt( E3, 0.1, 0.1, 0.0 ),
  30.                   ctlpt( E3, 0.2, 0.5, 1.1 ),
  31.                   ctlpt( E3, 0.3, 0.1, 2.2 ) ),
  32.                 list( ctlpt( E3, 0.4, 1.3, 0.5 ),
  33.                   ctlpt( E3, 0.5, 1.7, 1.7 ),
  34.                   ctlpt( E3, 0.6, 1.3, 2.9 ) ),
  35.                 list( ctlpt( E3, 0.7, 2.4, 0.5 ),
  36.                   ctlpt( E3, 0.8, 2.6, 1.4 ),
  37.                   ctlpt( E3, 0.9, 2.8, 2.3 ) ) ),
  38.               list( list( ctlpt( E3, 1.1, 0.1, 0.5 ),
  39.                   ctlpt( E3, 1.3, 0.2, 1.7 ),
  40.                   ctlpt( E3, 1.5, 0.3, 2.9 ) ),
  41.                 list( ctlpt( E3, 1.7, 1.2, 0.0 ),
  42.                   ctlpt( E3, 1.9, 1.4, 1.2 ),
  43.                   ctlpt( E3, 1.2, 1.6, 2.4 ) ),
  44.                 list( ctlpt( E3, 1.4, 2.3, 0.9 ),
  45.                   ctlpt( E3, 1.6, 2.5, 1.7 ),
  46.                   ctlpt( E3, 1.8, 2.7, 2.5 ) ) ),
  47.               list( list( ctlpt( E3, 2.8, 0.1, 0.4 ),
  48.                   ctlpt( E3, 2.6, 0.7, 1.3 ),
  49.                   ctlpt( E3, 2.4, 0.2, 2.2 ) ),
  50.                 list( ctlpt( E3, 2.2, 1.1, 0.4 ),
  51.                   ctlpt( E3, 2.9, 1.2, 1.5 ),
  52.                   ctlpt( E3, 2.7, 1.3, 2.6 ) ),
  53.                 list( ctlpt( E3, 2.5, 2.9, 0.7 ),
  54.                   ctlpt( E3, 2.3, 2.8, 1.7 ),
  55.                   ctlpt( E3, 2.1, 2.7, 2.7 ) ) ) ),
  56.         list( list( KV_OPEN ),
  57.               list( KV_OPEN ),
  58.               list( KV_OPEN ) ) );
  59. color( tv2, yellow );
  60. interact( tv2 );
  61.  
  62. tv1t = tv1 * rotx( 50 ) * trans( vector( 1.5, -1.5, 2 ) );
  63. color( tv1t, red );
  64. tv2t = tv2 * sc( 0.75 ) * trans( vector( -1.5, 1.5, -2 ) );
  65. color( tv2t, green );
  66.  
  67. interact( list( tv1, tv1t ) );
  68. interact( list( tv2, tv2t ) );
  69.  
  70. pdomain( tv1 );
  71. pdomain( tv2t );
  72.  
  73. #
  74. # Interpolation.
  75. #
  76.  
  77. tv1i = tinterp( tv1 ); # Identical for trilinears.
  78. tv1i;
  79. interact( tv1i );
  80. tv2i = tinterp( tv2 );
  81. tv2i;
  82. interact( tv2i );
  83. free( tv1i );
  84. free( tv2i );
  85.  
  86. #
  87. # Evaluation and bivariate surface extraction from a trivariate.
  88. #
  89. teval( tv1, 0.77, 0.375, 0.31 );
  90. tv1s1 = strivar( tv1, col, 0.77 );
  91. color( tv1s1, red );
  92. seval( tv1s1, 0.375, 0.31 );
  93. tv1s2 = strivar( tv1, row, 0.375 );
  94. color( tv1s2, green );
  95. seval( tv1s2, 0.77, 0.31 );
  96. tv1s3 = strivar( tv1, depth, 0.31 );
  97. color( tv1s3, cyan );
  98. seval( tv1s3, 0.77, 0.375 );
  99.  
  100. teval( tv2, 0.4, 0.5, 0.6 );
  101. tv2s1 = strivar( tv2, col, 0.4 );
  102. color( tv2s1, red );
  103. seval( tv2s1, 0.5, 0.6 );
  104. tv2s2 = strivar( tv2, row, 0.5 );
  105. color( tv2s2, green );
  106. seval( tv2s2, 0.4, 0.6 );
  107. tv2s3 = strivar( tv2, depth, 0.6 );
  108. color( tv2s3, cyan );
  109. seval( tv2s3, 0.4, 0.5 );
  110.  
  111. save_res = resolution;
  112. resolution = 2;
  113. tv2poly = gpolyline( tv2, false );
  114. resolution = save_res;
  115. interact( list( tv2poly, tv2s1, tv2s2, tv2s3 ) );
  116.  
  117. #
  118. # Subdivision
  119. #
  120. tvdiv = tdivide( tv2, row, 0.3 );
  121. tv2a = nth( tvdiv, 1 ) * ty( -1.7 );
  122. color( tv2a, red );
  123. tv2b = nth( tvdiv, 2 ) * ty( 2.3 );
  124. color( tv2b, green );
  125. interact( list( tv2, tv2a, tv2b ) );
  126.  
  127. tvdiv = tdivide( tv2, col, 0.7 );
  128. tv2a = nth( tvdiv, 1 ) * tz( -2.2 );
  129. color( tv2a, red );
  130. tv2b = nth( tvdiv, 2 ) * tz( 1.8 );
  131. color( tv2b, green );
  132. interact( list( tv2, tv2a, tv2b ) );
  133.  
  134. tvdiv = tdivide( tv2, depth, 0.7 );
  135. tv2a = nth( tvdiv, 1 ) * tx( -2.2 );
  136. color( tv2a, red );
  137. tv2b = nth( tvdiv, 2 ) * tx( 2.0 );
  138. color( tv2b, green );
  139. interact( list( tv2, tv2a, tv2b ) );
  140.  
  141. #
  142. # Refinement
  143. #
  144. tv1ref = trefine( tv1, row, false, list( 0.3, 0.6 ) );
  145. color( tv1ref, red );
  146. interact( list( tv1, tv1ref * ty( -3.0 ) ) );
  147.  
  148. tv2ref = trefine( tv2, row, false, list( 0.3, 0.6 ) );
  149. color( tv2ref, red );
  150. interact( list( tv2, tv2ref * ty( -3.0 ) ) );
  151.  
  152. tv2ref = trefine( tv2, col, false, list( 0.2, 0.4, 0.6, 0.6, 0.8 ) );
  153. color( tv2ref, red );
  154. interact( list( tv2, tv2ref * tz( -3.0 ) ) );
  155.  
  156. tv2ref = trefine( tv2, depth, false, list( 0.3, 0.6 ) );
  157. color( tv2ref, red );
  158. interact( list( tv2, tv2ref * tx( 3.0 ) ) );
  159.  
  160. tv2ref = trefine( tv2, row, true, list( 1, 2, 3, 4, 5, 6 ) );
  161. color( tv2ref, red );
  162. interact( list( tv2, tv2ref * tx( 3.0 ) ) );
  163.  
  164. #
  165. # Region extraction.
  166. #
  167.  
  168. tv1poly = gpolyline( tv1, false );
  169. color( tv1poly, white );
  170.  
  171. tv1r1 = tregion( tv1, row, 0.5, 0.7 );
  172. color ( tv1r1, red );
  173. tv1r2 = tregion( tv1, col, 0.4, 0.6 );
  174. color ( tv1r2, green );
  175. tv1r3 = tregion( tv1, depth, 0.2, 0.4 );
  176. color ( tv1r3, blue );
  177. interact( list( tv1poly, tv1r1, tv1r2, tv1r3 ) );
  178.  
  179. tv2poly = gpolyline( tv2, false );
  180. color( tv2poly, cyan );
  181.  
  182. interact( list( tv2poly,
  183.         tregion( tv2, row, 0.2, 0.3 ),
  184.         tregion( tv2, row, 0.4, 0.5 ),
  185.         tregion( tv2, row, 0.6, 0.7 ),
  186.         tregion( tv2, row, 0.8, 0.9 ) ) );
  187. interact( list( tv2poly,
  188.         tregion( tv2, col, 0.0, 0.3 ),
  189.         tregion( tv2, col, 0.4, 0.5 ),
  190.         tregion( tv2, col, 0.6, 0.9 ) ) );
  191. interact( list( tv2poly,
  192.         tregion( tv2, depth, 0.0, 0.3 ),
  193.         tregion( tv2, depth, 0.6, 1.0 ),
  194.         tregion( tv2, depth, 1.2, 1.9 ) ) );
  195.  
  196. #
  197. # Differentiation
  198. #
  199. tv2d = tderive( tv2, col );
  200. interact( tv2d );
  201. tv2d = tderive( tv2, row );
  202. interact( tv2d );
  203. tv2d = tderive( tv2, depth );
  204. interact( tv2d );
  205.  
  206. #
  207. # IO
  208. #
  209. save( "trivar", list( tv1, tv2 ) );
  210. l = load( "trivar" );
  211. l;
  212.  
  213. iritstate( "dumplevel", 1 );
  214.