home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 3 / RISC_DISC_3.iso / resources / etexts / gems / gemsv / ch7_7 / gg4d / example.c next >
Encoding:
C/C++ Source or Header  |  1995-04-04  |  2.1 KB  |  120 lines

  1. /* example.c
  2.  *
  3.  * Steve Hill, Computing Laboratory, University of Kent, UK.
  4.  *
  5.  * Email: S.A.Hill@ukc.ac.uk
  6.  *
  7.  * This file contains a short example of using the 4D vector
  8.  * library.  It concentrates on the matrix functions since these
  9.  * are the main extension not present in the original Graphics Gems
  10.  * libraries.
  11.  */
  12.  
  13.  
  14. #include <stdio.h>
  15. #include <math.h>
  16. #include "GGems.h"
  17. #include "GGems4d.h"
  18.  
  19. #ifndef M_PI
  20. #define M_PI    3.14159265358979323846
  21. #endif
  22.  
  23. void
  24. Example1()
  25. {
  26.     Vector4    *a, *b, *c, r;
  27.     Vector3 *a1, *b1, r1;
  28.  
  29.     a = V4New(1.0, 0.0, 0.0, 0.0);
  30.     b = V4New(0.0, 1.0, 0.0, 0.0);
  31.     c = V4New(0.0, 0.0, 1.0, 0.0);
  32.  
  33.     a1 = V3New(1.0, 0.0, 0.0);
  34.     b1 = V3New(0.0, 1.0, 0.0);
  35.  
  36.     V3Cross(a1, b1, &r1);
  37.     V4Cross(a, b, c, &r);
  38.  
  39.     printf("(%lf, %lf, %lf)\n", r1.x, r1.y, r1.z);
  40.     printf("(%lf, %lf, %lf, %lf)\n", r.x, r.y, r.z, r.w);
  41. }
  42.  
  43. /* Example2
  44.  *
  45.  * Constructing a compound transformation using matrix product.
  46.  * T(-1,-2,-3,-4) o Rxw(PI) o T(1, 2, 3, 4)
  47.  */
  48.  
  49. void
  50. Example2()
  51. {
  52.     Vector4    v = {-1.0, -2.0, -3.0, -4.0};
  53.     Matrix5    m1, m2;
  54.  
  55.     V4MatTranslation(&m1, &v);
  56.     V4MatRotationXW(&m2, M_PI);
  57.     V4MatMul2(&m1, &m2, &m1);
  58.     V4Negate(&v);
  59.     V4MatTranslation(&m2, &v);
  60.     V4MatMul2(&m1, &m2, &m1);
  61.  
  62.     V4MatPrint(stdout, &m1);
  63. }
  64.  
  65. /* Example3
  66.  *
  67.  * Constructing a compound transformation using affine operations
  68.  * T(-1,-2,-3,-4) o Rxw(PI) o T(1, 2, 3, 4)
  69.  */
  70.  
  71. void
  72. Example3()
  73. {
  74.     Vector4 v = {-1.0, -2.0, -3.0, -4.0};
  75.     Matrix5    m;
  76.  
  77.     V4MatIdentity(&m);
  78.     V4MatTranslate(&m, v);
  79.     V4MatRotateXW(&m, M_PI);
  80.     V4Negate(&v);
  81.     V4MatTranslate(&m, v);
  82.     
  83.     V4MatPrint(stdout, &m);
  84. }
  85.  
  86. /* Example4
  87.  *
  88.  * All transformation functions return a pointer to their
  89.  * result, it is possible therefore to use the result directly in
  90.  * subsequent function call.
  91.  * Here is Example3 recoded in this style.
  92.  * NB
  93.  * Some care has to be exercised since the order of argument evaluation
  94.  * is not defined.
  95.  */
  96.  
  97. void
  98. Example4()
  99. {
  100.     Matrix5    m;
  101.     Vector4    v = {-1.0, -2.0, -3.0, -4.0};
  102.  
  103.     V4MatRotateXW(V4MatTranslate(V4MatIdentity(&m), &v), M_PI);
  104.     V4MatTranslate(&m, V4Negate(&v));
  105.  
  106.     V4MatPrint(stdout, &m);
  107. }
  108.  
  109. void
  110. main()
  111. {
  112.     Example1();
  113.     putchar('\n');
  114.     Example2();
  115.     putchar('\n');
  116.     Example3();
  117.     putchar('\n');
  118.     Example4();
  119. }
  120.