home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / VOGLE.ZIP / SRC / SUNPAS / PATCHES.C < prev    next >
C/C++ Source or Header  |  1994-04-27  |  3KB  |  131 lines

  1.  
  2. #include <stdio.h>
  3. #include <vogle.h>
  4.  
  5. /*
  6.  *    Draws patches of various bases
  7.  */
  8.  
  9. /*
  10.  * patch basis types
  11.  */
  12.  
  13. Matrix    bezier = {
  14.     {-1.0,    3.0,    -3.0,    1.0},
  15.     {3.0,    -6.0,    3.0,    0.0},
  16.     {-3.0,    3.0,    0.0,    0.0},
  17.     {1.0,    0.0,    0.0,    0.0} 
  18. };
  19.  
  20. Matrix    cardinal = { /* Or catmull-rom */
  21.     {-0.5,    1.5,    -1.5,    0.5},
  22.     {1.0,    -2.5,    2.0,    -0.5},
  23.     {-0.5,    0.0,    0.5,    0.0},
  24.     {0.0,    1.0,    0.0,    0.0}
  25. };
  26.  
  27. Matrix    bspline = {
  28.     {-1.0 / 6.0,    3.0 / 6.0,    -3.0 / 6.0,    1.0 / 6.0},
  29.     {3.0 / 6.0,    -6.0 / 6.0,    3.0 / 6.0,    0.0},
  30.     {-3.0 / 6.0,    0.0,        3.0 / 6.0,    0.0},
  31.     {1.0 / 6.0,    4.0 / 6.0,    1.0 / 6.0,    0.0}    
  32. };
  33.  
  34. Matrix    power = {
  35.     {1.0, 0.0, 0.0, 0.0},
  36.     {0.0, 1.0, 0.0, 0.0},
  37.     {0.0, 0.0, 1.0, 0.0},
  38.     {0.0, 0.0, 0.0, 1.0}
  39. };
  40.  
  41. float *basis[] = {    (float *)bezier,
  42.             (float *)cardinal,
  43.             (float *)bspline,
  44.             (float *)power
  45.         };
  46.  
  47. Matrix    x1 = {
  48.     {0.0,   0.2588,   0.5,   0.7071},
  49.     {0.0,   0.51764,  1.0,   1.4142},
  50.     {0.0,   0.51764,  1.0,   1.4142},
  51.     {0.0,   0.2588,   0.5,   0.7071}
  52. };
  53.  
  54. Matrix    y1 = {
  55.     {1.0,   0.966,   0.866,  0.7071},
  56.     {2.0,   1.9318,  1.732,  1.4142},
  57.     {2.0,   1.9318,  1.732,  1.4142},
  58.     {1.0,   0.966,   0.866,  0.7071}
  59. };
  60.  
  61. Matrix    z1 = {
  62.     {1.0,   1.0,     1.0,    1.0},
  63.     {1.0,   1.0,     1.0,    1.0},
  64.     {0.0,   0.0,     0.0,    0.0},
  65.     {0.0,   0.0,     0.0,    0.0}
  66. };
  67.  
  68. Matrix    x2 = {
  69.     {0.7071, 0.8660, 0.9660, 1.0},
  70.     {1.4142, 1.7320, 1.932,  2.0},
  71.     {1.4142, 1.7320, 1.932,  2.0},
  72.     {0.7071, 0.8660, 0.9660, 1.0}
  73. };
  74.  
  75. Matrix    y2 = {
  76.     {0.7071, 0.5,    0.2588, 0.0},
  77.     {1.4142, 1.0,    0.5176, 0.0},
  78.     {1.4142, 1.0,    0.5176, 0.0},
  79.     {0.7071, 0.5,    0.2588, 0.0}
  80. };
  81.  
  82. Matrix    z2 = {
  83.     {1.0,   1.0,     1.0,    1.0},
  84.     {1.0,   1.0,     1.0,    1.0},
  85.     {0.0,   0.0,     0.0,    0.0},
  86.     {0.0,   0.0,     0.0,    0.0}
  87. };
  88.  
  89. char *labels[] = {
  90.         "Bezier Patch(es)",
  91.         "Cardinal Patch(es)",
  92.         "B-Spline Patch(es)",
  93.         "'Power' Patch(es)"
  94.         };
  95.  
  96. /*
  97.  * demonstrate patches
  98.  */
  99.  
  100. main()
  101. {
  102.     int    i, j;
  103.  
  104.     printf("    procedure init;\n    begin\n");
  105.     for (j = 0; j < 4; j++)
  106.         for (i = 0; i < 4; i++)
  107.             printf("        x1[%d, %d] := %5.2f;\n", i + 1, j + 1, x1[i][j]);
  108.  
  109.     for (j = 0; j < 4; j++)
  110.         for (i = 0; i < 4; i++)
  111.             printf("        y1[%d, %d] := %5.2f;\n", i + 1, j + 1, y1[i][j]);
  112.  
  113.     for (j = 0; j < 4; j++)
  114.         for (i = 0; i < 4; i++)
  115.             printf("        z1[%d, %d] := %5.2f;\n", i + 1, j + 1, z1[i][j]);
  116.         
  117.     for (j = 0; j < 4; j++)
  118.         for (i = 0; i < 4; i++)
  119.             printf("        x2[%d, %d] := %5.2f;\n", i + 1, j + 1, x2[i][j]);
  120.  
  121.     for (j = 0; j < 4; j++)
  122.         for (i = 0; i < 4; i++)
  123.             printf("        y2[%d, %d] := %5.2f;\n", i + 1, j + 1, y2[i][j]);
  124.  
  125.     for (j = 0; j < 4; j++)
  126.         for (i = 0; i < 4; i++)
  127.             printf("        z2[%d, %d] := %5.2f;\n", i + 1, j + 1, z2[i][j]);
  128.         
  129.     printf("    end;\n");
  130. }
  131.