home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DRWIN101.ZIP / LINUTIL.H < prev    next >
C/C++ Source or Header  |  1991-01-04  |  3KB  |  84 lines

  1. #ifndef __LINUTIL_H
  2. #define __LINUTIL_H
  3.  
  4.  
  5. #include <math.h>
  6. #include <mem.h>
  7.  
  8.  
  9. #ifndef PI
  10.   #define PI 3.1415926535898
  11. #endif
  12.  
  13.  
  14. typedef double vec3[3];                /*3d vector*/
  15. typedef vec3   bas3[3];                /*3d normalized basis*/
  16.  
  17. #define EQU(a,b)       memcpy((a),(b),sizeof(a))   /*c won't do vec3s*/
  18. #define VSET(u,a,b,c)  { u[0]=a; u[1]=b; u[2]=c; } /*set value of vector*/
  19. #define DOT(u,v) (u[0]*v[0]+u[1]*v[1]+u[2]*v[2])   /*dot product of 2 vecs*/
  20. #define NORM(u)  sqrt(DOT(u,u))
  21. #define VADD(u,v,w)                    /*add two vectors*/ \
  22.   {                 \
  23.     w[0]=u[0]+v[0]; \
  24.     w[1]=u[1]+v[1]; \
  25.     w[2]=u[2]+v[2]; \
  26.   }
  27. #define VSUB(u,v,w)                    /*subtract two vectors*/ \
  28.   {                 \
  29.     w[0]=u[0]-v[0]; \
  30.     w[1]=u[1]-v[1]; \
  31.     w[2]=u[2]-v[2]; \
  32.   }
  33. #define VNEG(u,v)                      /*negate a vector*/ \
  34.   {               \
  35.     v[0]=-u[0];   \
  36.     v[1]=-u[1];   \
  37.     v[2]=-u[2];   \
  38.   }
  39. #define VMUL(a,u,v)                    /*multiply vector by scalar*/ \
  40.   {                 \
  41.     v[0]=a*u[0];    \
  42.     v[1]=a*u[1];    \
  43.     v[2]=a*u[2];    \
  44.   }
  45.  
  46.  
  47. #define VADD(u,v,w)                    /*add two vectors*/ \
  48.   {                 \
  49.     w[0]=u[0]+v[0]; \
  50.     w[1]=u[1]+v[1]; \
  51.     w[2]=u[2]+v[2]; \
  52.   }
  53. #define VSUB(u,v,w)                    /*subtract two vectors*/ \
  54.   {                 \
  55.     w[0]=u[0]-v[0]; \
  56.     w[1]=u[1]-v[1]; \
  57.     w[2]=u[2]-v[2]; \
  58.   }
  59. #define VNEG(u,v)                      /*negate a vector*/ \
  60.   {               \
  61.     v[0]=-u[0];   \
  62.     v[1]=-u[1];   \
  63.     v[2]=-u[2];   \
  64.   }
  65.  
  66.  
  67. double *vset(vec3 u,double a,double b,double c);/*sets vector's components*/
  68. double dot(vec3 u,vec3 v);             /*returns scalar dot product*/
  69. double *vadd(vec3 u,vec3 v,vec3 w);    /*add two vectors*/
  70. double *vsub(vec3 u,vec3 v,vec3 w);    /*subtract two vectors*/
  71. double *vneg(vec3 u,vec3 v);           /*negate vector*/
  72. double *vmul(double a,vec3 u,vec3 v);  /*multiply vector by scalar*/
  73. vec3 *rotb(double deg,int axis,bas3 b);/*rotates basis around axis*/
  74. double *vdotb(vec3 v,bas3 b,vec3 d);   /*dots v against each vector in b*/
  75. int  vangles(vec3 r,double *a1,double *a2,bas3 b);  /*angles of x to y,z*/
  76. void vcross(vec3 u,vec3 v,vec3 w);     /*cross u and v into w*/
  77. void vnormalize(vec3 v);               /*normalizes to |v|=1*/
  78. void vlookback(vec3 p,vec3 z,bas3 b);  /*sets up basis to look on v, up=z*/
  79.  
  80. extern bas3 eucl3;                     /*euclidean 3-d basis*/
  81. extern vec3 zero3;                     /*zero vector*/
  82.  
  83. #endif                                 /*if file not already included*/
  84.