rot_prince.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:8k
源码类别:

GIS编程

开发平台:

Visual C++

  1. #include <math.h>
  2. #include "rot.h"
  3. #include "port.h"
  4. /* ========================================================== */
  5. /* 
  6.  * The routines below generate and return more traditional rotation
  7.  * matrices -- matrices for rotations about principal axes.
  8.  */
  9. /* ========================================================== */
  10. #ifdef __GUTIL_DOUBLE
  11. void urotx_sc_d (double m[4][4],  /* returned */
  12.                  double cosine, /* input */
  13.                  double sine)  /* input */
  14. #else
  15. void urotx_sc_f (float m[4][4],  /* returned */
  16.                  float cosine, /* input */
  17.                  float sine)  /* input */
  18. #endif
  19. {
  20.    /* create matrix that represents rotation about the x-axis */
  21.    ROTX_CS (m, cosine, sine);
  22. }
  23. /* ========================================================== */
  24. #if 0
  25. #ifdef __GUTIL_DOUBLE
  26. void rotx_cs_d (double cosine, /* input */
  27.                 double sine)  /* input */
  28. {
  29.    /* create and load matrix that represents rotation about the x-axis */
  30.    double m[4][4];
  31.    (void) urotx_cs_d (m, cosine, sine);
  32.    MULTMATRIX_D (m);
  33. }
  34. #else 
  35. void rotx_cs_f (float cosine, /* input */
  36.                 float sine)  /* input */
  37. {
  38.    /* create and load matrix that represents rotation about the x-axis */
  39.    float m[4][4];
  40.    (void) urotx_cs_f (m, cosine, sine);
  41.    MULTMATRIX_F (m);
  42. }
  43. #endif
  44. #endif
  45. /* ========================================================== */
  46. #ifdef __GUTIL_DOUBLE
  47. void uroty_sc_d (double m[4][4],  /* returned */
  48.                  double cosine, /* input */
  49.                  double sine)  /* input */
  50. #else
  51. void uroty_sc_f (float m[4][4],  /* returned */
  52.                  float cosine, /* input */
  53.                  float sine)  /* input */
  54. #endif
  55. {
  56.    /* create matriy that represents rotation about the y-ayis */
  57.    ROTX_CS (m, cosine, sine);
  58. }
  59. /* ========================================================== */
  60. #if 0
  61. #ifdef __GUTIL_DOUBLE
  62. void roty_cs_d (double cosine, /* input */
  63.                 double sine)  /* input */
  64. {
  65.    /* create and load matriy that represents rotation about the y-ayis */
  66.    double m[4][4];
  67.    (void) uroty_cs_d (m, cosine, sine);
  68.    MULTMATRIX_D (m);
  69. }
  70. #else 
  71. void roty_cs_f (float cosine, /* input */
  72.                 float sine)  /* input */
  73. {
  74.    /* create and load matriy that represents rotation about the y-ayis */
  75.    float m[4][4];
  76.    (void) uroty_cs_f (m, cosine, sine);
  77.    MULTMATRIX_F (m);
  78. }
  79. #endif
  80. #endif
  81. /* ========================================================== */
  82. #ifdef __GUTIL_DOUBLE
  83. void urotz_sc_d (double m[4][4],  /* returned */
  84.                  double cosine, /* input */
  85.                  double sine)  /* input */
  86. #else
  87. void urotz_sc_f (float m[4][4],  /* returned */
  88.                  float cosine, /* input */
  89.                  float sine)  /* input */
  90. #endif
  91. {
  92.    /* create matriz that represents rotation about the z-azis */
  93.    ROTX_CS (m, cosine, sine);
  94. }
  95. /* ========================================================== */
  96. #if 0
  97. #ifdef __GUTIL_DOUBLE
  98. void rotz_cs_d (double cosine, /* input */
  99.                 double sine)  /* input */
  100. {
  101.    /* create and load matriz that represents rotation about the z-azis */
  102.    double m[4][4];
  103.    (void) urotz_cs_d (m, cosine, sine);
  104.    MULTMATRIX_D (m);
  105. }
  106. #else 
  107. void rotz_cs_f (float cosine, /* input */
  108.                 float sine)  /* input */
  109. {
  110.    /* create and load matriz that represents rotation about the z-azis */
  111.    float m[4][4];
  112.    (void) urotz_cs_f (m, cosine, sine);
  113.    MULTMATRIX_F (m);
  114. }
  115. #endif
  116. #endif
  117. /* ========================================================== */
  118. #if 0
  119. #ifdef __GUTIL_DOUBLE
  120. void urot_cs_d (double m[4][4], /* returned */
  121.                 double cosine, /* input */
  122.                 double sine, /* input */
  123.                 char axis)  /* input */
  124. {
  125.    /* create matrix that represents rotation about a principle axis */
  126.    switch (axis) {
  127.       case 'x':
  128.       case 'X':
  129.          urotx_cs_d (m, cosine, sine);
  130.          break;
  131.       case 'y':
  132.       case 'Y':
  133.          uroty_cs_d (m, cosine, sine);
  134.          break;
  135.       case 'z':
  136.       case 'Z':
  137.          urotz_cs_d (m, cosine, sine);
  138.          break;
  139.       default:
  140.          break;
  141.    }
  142. }
  143. #else
  144. void urot_cs_f (float m[4][4], /* returned */
  145.                 float cosine, /* input */
  146.                 float sine, /* input */
  147.                 char axis)  /* input */
  148. {
  149.    /* create matrix that represents rotation about a principle axis */
  150.    switch (axis) {
  151.       case 'x':
  152.       case 'X':
  153.          urotx_cs_f (m, cosine, sine);
  154.          break;
  155.       case 'y':
  156.       case 'Y':
  157.          uroty_cs_f (m, cosine, sine);
  158.          break;
  159.       case 'z':
  160.       case 'Z':
  161.          urotz_cs_f (m, cosine, sine);
  162.          break;
  163.       default:
  164.          break;
  165.    }
  166. }
  167. #endif 
  168. #endif
  169. /* ========================================================== */
  170. #if 0
  171. #ifdef __GUTIL_DOUBLE
  172. void rot_cs_d (double cosine, /* input */
  173.                double sine, /* input */
  174.                char axis)   /* input */
  175. {
  176.    /* create and load matrix that represents rotation about the z-axis */
  177.    double m[4][4];
  178.    (void) urot_cs_d (m, cosine, sine, axis);
  179.    MULTMATRIX_D (m);
  180. }
  181. #else
  182. void rot_cs_f (float cosine, /* input */
  183.                float sine, /* input */
  184.                char axis)   /* input */
  185. {
  186.    /* create and load matrix that represents rotation about the z-axis */
  187.    float m[4][4];
  188.    (void) urot_cs_f (m, cosine, sine, axis);
  189.    MULTMATRIX_F (m);
  190. }
  191. #endif
  192. #endif
  193. /* ========================================================== */
  194. #if 0
  195. #ifdef __GUTIL_DOUBLE
  196. void urot_prince_d (double m[4][4], /* returned */
  197.                     double theta, /* input */
  198.                     char axis)  /* input */
  199. {
  200.    /* 
  201.     * generate rotation matrix for rotation around principal axis;
  202.     * note that angle is measured in radians (divide by 180, multiply by
  203.     * PI to convert from degrees).
  204.     */
  205.    (void) urot_cs_d (m, 
  206.                    cos (theta),
  207.                    sin (theta),
  208.                    axis);
  209. }
  210. #else 
  211. void urot_prince_f (float m[4][4], /* returned */
  212.                     float theta, /* input */
  213.                     char axis)  /* input */
  214. {
  215.    /* 
  216.     * generate rotation matrix for rotation around principal axis;
  217.     * note that angle is measured in radians (divide by 180, multiply by
  218.     * PI to convert from degrees).
  219.     */
  220.    (void) urot_cs_f (m, 
  221.                    (float) cos ((double) theta),
  222.                    (float) sin ((double) theta),
  223.                    axis);
  224. }
  225. #endif
  226. #endif
  227. /* ========================================================== */
  228. #if 0
  229. #ifdef __GUTIL_DOUBLE
  230. void rot_prince_d (double theta, /* input */
  231.                    char axis)  /* input */
  232. {
  233.    double m[4][4];
  234.    /* 
  235.     * generate rotation matrix for rotation around principal axis;
  236.     * note that angle is measured in radians (divide by 180, multiply by
  237.     * PI to convert from degrees).
  238.     */
  239.    (void) urot_prince_d (m, theta, axis);
  240.    MULTMATRIX_D (m);
  241. }
  242. #else
  243. void rot_prince_f (float theta, /* input */
  244.                    char axis)  /* input */
  245. {
  246.    float m[4][4];
  247.    /* 
  248.     * generate rotation matrix for rotation around principal axis;
  249.     * note that angle is measured in radians (divide by 180, multiply by
  250.     * PI to convert from degrees).
  251.     */
  252.    (void) urot_prince_f (m, theta, axis);
  253.    MULTMATRIX_F (m);
  254. }
  255. #endif
  256. #endif
  257. /* ========================================================== */