phys math.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #ifdef PRECOMPILEDHEADERS
  2. #include "TileEngine All.h"
  3. #else
  4. #include "phys math.h"
  5. #include <memory.h>
  6. #endif
  7. vector_3 VSetEqual( vector_3 *a )
  8. {
  9. vector_3 c;
  10. // c.x = a->x;
  11. // c.y = a->y;
  12. // c.z = a->z;
  13. memcpy( &c, a, sizeof( vector_3 ) );
  14. return( c );
  15. }
  16. vector_3 VSubtract( vector_3 *a, vector_3 *b )
  17. {
  18. vector_3 c;
  19. c.x = a->x - b->x;
  20. c.y = a->y - b->y;
  21. c.z = a->z - b->z;
  22. return( c );
  23. }
  24. vector_3 VAdd( vector_3 *a, vector_3 *b )
  25. {
  26. vector_3 c;
  27. c.x = a->x + b->x;
  28. c.y = a->y + b->y;
  29. c.z = a->z + b->z;
  30. return( c );
  31. }
  32. vector_3 VMultScalar( vector_3 *a, real b )
  33. {
  34. vector_3 c;
  35. c.x = a->x * b;
  36. c.y = a->y * b;
  37. c.z = a->z * b;
  38. return( c );
  39. }
  40. vector_3 VDivScalar( vector_3 *a, real b )
  41. {
  42. vector_3 c;
  43. c.x = a->x / b;
  44. c.y = a->y / b;
  45. c.z = a->z / b;
  46. return( c );
  47. }
  48. real VDotProduct( vector_3 *a, vector_3 *b )
  49. {
  50. return ( ( a->x * b->x ) + ( a->y * b->y ) + ( a->z * b->z ) );
  51. }
  52. real VPerpDotProduct( vector_3 *a, vector_3 *b )
  53. {
  54. return ( ( a->x * b->x ) - ( a->y * b->y ) - ( a->z * b->z ) );
  55. }
  56. vector_3 VCrossProduct( vector_3 *a, vector_3 *b )
  57. {
  58. vector_3 c;
  59. c.x = ( a->y * b->z ) - ( a->z * b->y );
  60. c.y = ( a->x * b->z ) - ( a->z * b->x );
  61. c.z = ( a->x * b->y ) - ( a->y * b->x );
  62. return( c );
  63. }
  64. vector_3 VGetPerpendicular( vector_3 *a )
  65. {
  66. vector_3 c;
  67. c.x = -a->y;
  68. c.y = a->x;
  69. c.z = a->z;
  70. return( c );
  71. }
  72. real VGetLength( vector_3 *a )
  73. {
  74. return( (real) sqrt( ( a->x * a->x ) + ( a->y * a->y ) + ( a->z * a->z ) ) );
  75. }
  76. vector_3 VGetNormal( vector_3 *a )
  77. {
  78. vector_3 c;
  79. real OneOverLength, Length;
  80. Length = VGetLength( a );
  81. if ( Length == 0 )
  82. {
  83. c.x = 0;
  84. c.y = 0;
  85. c.z = 0;
  86. }
  87. else
  88. {
  89. OneOverLength = 1/Length;
  90. c.x = OneOverLength * a->x;
  91. c.y = OneOverLength * a->y;
  92. c.z = OneOverLength * a->z;
  93. }
  94. return ( c );
  95. }