3d_math.cpp 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //------------------------------------------------------------------------------------------------
  2. // 0.0.1
  3. //------------------------------------------------------------------------------------------------
  4. #include <math.h>
  5. //------------------------------------------------------------------------------------------------
  6. // Make normal 3D vector (axe Y is static)
  7. //------------------------------------------------------------------------------------------------
  8. void Normal_Vector(float *Vector, float *vResult)
  9. {
  10. vResult[0] = -1 * Vector[2];
  11. vResult[1] = Vector[1];
  12. vResult[2] = Vector[0];
  13. }
  14. //------------------------------------------------------------------------------------------------
  15. // Calculate inverse vector
  16. //------------------------------------------------------------------------------------------------
  17. void Inverse_Vector(float *Vector, float *vResult, unsigned int uiDimension)
  18. {
  19. unsigned int i;
  20. for (i = 0; i < uiDimension; i++)
  21. vResult[i] = Vector[i] * -1;
  22. }
  23. //------------------------------------------------------------------------------------------------
  24. // Calculate length of 3D vector
  25. //------------------------------------------------------------------------------------------------
  26. float Vector_Length(float *Vector)
  27. {
  28. return (float) sqrt(Vector[0] * Vector[0] + Vector[1] * Vector[1] +
  29. Vector[2] * Vector[2]);
  30. }
  31. //------------------------------------------------------------------------------------------------
  32. // Normalize 3D vector
  33. //------------------------------------------------------------------------------------------------
  34. float Normalize_Vector(float *Vector)
  35. {
  36. float size = Vector_Length(Vector);
  37. if (size == 0)
  38. return 0.0f;
  39. Vector[0] /= size;
  40. Vector[1] /= size;
  41. Vector[2] /= size;
  42. return size;
  43. }
  44. //------------------------------------------------------------------------------------------------
  45. // Add two 3D vectors
  46. //------------------------------------------------------------------------------------------------
  47. void Add_Vector(float *Vector1, float *Vector2, float *vResult)
  48. {
  49. vResult[0] = Vector1[0] + Vector2[0];
  50. vResult[1] = Vector1[1] + Vector2[1];
  51. vResult[2] = Vector1[2] + Vector2[2];
  52. }
  53. //------------------------------------------------------------------------------------------------
  54. // Sub two 3D vectors
  55. //------------------------------------------------------------------------------------------------
  56. void Sub_Vector(float *Vector1, float *Vector2, float *vResult)
  57. {
  58. vResult[0] = Vector1[0] - Vector2[0];
  59. vResult[1] = Vector1[1] - Vector2[1];
  60. vResult[2] = Vector1[2] - Vector2[2];
  61. }
  62. //------------------------------------------------------------------------------------------------
  63. // Multiple 3D vector with constant
  64. //------------------------------------------------------------------------------------------------
  65. void Multiple_Vector(float *Vector, float Const)
  66. {
  67. Vector[0] *= Const;
  68. Vector[1] *= Const;
  69. Vector[2] *= Const;
  70. }
  71. //------------------------------------------------------------------------------------------------
  72. // Make 3D vector
  73. //------------------------------------------------------------------------------------------------
  74. void Make_Vector(float *Point1, float *Point2, float *vResult)
  75. {
  76. vResult[0] = Point2[0] - Point1[0];
  77. vResult[1] = Point2[1] - Point1[1];
  78. vResult[2] = Point2[2] - Point1[2];
  79. }