VECTOR1.H 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
  11. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
  12. */
  13. /* vector.h */
  14. /* Created 12/14/94 */
  15. /* John Schultz */
  16. #ifndef VECTOR_H
  17. #define VECTOR_H
  18. typedef struct {coord x,y;} vec2;
  19. typedef struct {coord x,y,z;} vec3;
  20. typedef struct {coord x,y,z,w;} vec4;
  21. typedef struct {vec3 x,y,z;} matrix33;
  22. typedef struct {matrix33 m; vec3 w;} matrix34;
  23. typedef struct {vec4 x,y,z,w;} matrix44;
  24. #define SETVEC(v,a,b,c) (v).x=a;(v).y=b;(v).z=c
  25. #define VZERO(a) (a).x=(a).y=(a).z=0
  26. #define NEGVEC(a) (a).x=-(a).x;(a).y=-(a).y;(a).z=-(a).z
  27. #define NEGVECN(a,b) (a).x=-(b).x;(a).y=-(b).y;(a).z=-(b).z
  28. #define ADDVEC(a,b,c) (a).x=(b).x+(c).x;(a).y=(b).y+(c).y;(a).z=(b).z+(c).z
  29. #define INCVEC(a,b) (a).x+=(b).x;(a).y+=(b).y;(a).z+=(b).z;
  30. #define SUBVEC(a,b,c) (a).x=(b).x-(c).x;(a).y=(b).y-(c).y;(a).z=(b).z-(c).z
  31. #define DECVEC(a,b) (a).x-=(b).x;(a).y-=(b).y;(a).z-=(b).z
  32. #define DOT2(a,b) (MUL((a).x,(b).x)+MUL((a).y,(b).y))
  33. #define DOT3(a,b) (MUL((a).x,(b).x)+MUL((a).y,(b).y)+MUL((a).z,(b).z))
  34. #define DOT4(a,b) (MUL((a).x,(b).x)+MUL((a).y,(b).y)+MUL((a).z,(b).z)+MUL((a).w,(b).w))
  35. coord normalize2(vec2 * v);
  36. coord normalize3(vec3 * v);
  37. //*** Matrix/matrix, matrix/vector routines ***
  38. void matrix33unitize(matrix33 * m);
  39. void rotate33(vec3 * out,matrix33 * m,vec3 * in);
  40. void rotate33rev(vec3 * out,matrix33 * m,vec3 * in);
  41. void rotate34(vec3 * out,matrix34 * m,vec3 * in);
  42. void rotate34rev(vec3 * out,matrix34 * m,vec3 * in);
  43. void matrixMul33(matrix33 * out,matrix33 * a,matrix33 * b);
  44. void matrixMul34(matrix34 * out,matrix34 * a,matrix34 * b);
  45. void rotate44(vec4 * out,matrix44 * m,vec4 * in);
  46. void matrixMul44(matrix44 * out,matrix44 * a,matrix44 * b);
  47. void matrix33Axis(matrix33 * m,vec3 * axis,coord angle);
  48. #endif
  49. /* vector.h */