vector.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * 3D Engine
  3. * vector.h:
  4. * Based on pikuma.com 3D software renderer in C
  5. * Copyright (c) 2021 986-Studio. All rights reserved.
  6. *
  7. * Created by Manoël Trapier on 02/03/2021.
  8. */
  9. #ifndef THREEDENGINE_SOURCE_INCLUDE_VECTOR_H
  10. #define THREEDENGINE_SOURCE_INCLUDE_VECTOR_H
  11. /***********************************************************************************************************************
  12. * Data types
  13. **********************************************************************************************************************/
  14. typedef struct vec2_t
  15. {
  16. double x, y;
  17. } vec2_t;
  18. typedef struct vec3_t
  19. {
  20. double x, y, z;
  21. } vec3_t;
  22. typedef struct vec4_t
  23. {
  24. double x, y, z, w;
  25. } vec4_t;
  26. /***********************************************************************************************************************
  27. * Prototypes
  28. **********************************************************************************************************************/
  29. /* ---------------------------------------------- 2D Vectors operations --------------------------------------------- */
  30. static inline vec2_t vec2(double x, double y)
  31. {
  32. vec2_t ret = { x, y };
  33. return ret;
  34. }
  35. double vec2Getlength(vec2_t v);
  36. vec2_t vec2AddVectors(vec2_t a, vec2_t b);
  37. vec2_t vec2SubVectors(vec2_t a, vec2_t b);
  38. vec2_t vec2ScalarMult(vec2_t a, double s);
  39. vec2_t vec2ScalarDiv(vec2_t a, double s);
  40. double vec2Dot(vec2_t a, vec2_t b);
  41. void vec2Normalize(vec2_t *a);
  42. vec2_t vec2FromVec4(vec4_t v);
  43. /* ---------------------------------------------- 3D Vectors operations --------------------------------------------- */
  44. static inline vec3_t vec3(double x, double y, double z)
  45. {
  46. vec3_t ret = { x, y, z };
  47. return ret;
  48. }
  49. double vec3Getlength(vec3_t v);
  50. vec3_t vec3AddVectors(vec3_t a, vec3_t b);
  51. vec3_t vec3SubVectors(vec3_t a, vec3_t b);
  52. vec3_t vec3ScalarMult(vec3_t a, double s);
  53. vec3_t vec3ScalarDiv(vec3_t a, double s);
  54. vec3_t vec3Cross(vec3_t a, vec3_t b);
  55. double vec3Dot(vec3_t a, vec3_t b);
  56. void vec3Normalize(vec3_t *a);
  57. vec3_t vec3FromVec4(vec4_t v);
  58. vec3_t vec3RotateX(vec3_t original, double angle);
  59. vec3_t vec3RotateY(vec3_t original, double angle);
  60. vec3_t vec3RotateZ(vec3_t original, double angle);
  61. /* ---------------------------------------------- 4D Vectors operations --------------------------------------------- */
  62. vec4_t vec4FromVec3(vec3_t v);
  63. #endif /* THREEDENGINE_SOURCE_VECTOR_H */