vector.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #pragma once
  2. #include <m-core.h>
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. typedef struct {
  7. float x;
  8. float y;
  9. } Vector;
  10. #define VECTOR_ZERO ((Vector){0, 0})
  11. Vector vector_add(Vector a, Vector b);
  12. Vector vector_sub(Vector a, Vector b);
  13. Vector vector_mul(Vector a, Vector b);
  14. Vector vector_div(Vector a, Vector b);
  15. Vector vector_addf(Vector a, float b);
  16. Vector vector_subf(Vector a, float b);
  17. Vector vector_mulf(Vector a, float b);
  18. Vector vector_divf(Vector a, float b);
  19. float vector_length(Vector v);
  20. Vector vector_normalize(Vector v);
  21. float vector_dot(Vector a, Vector b);
  22. Vector vector_rand();
  23. #define VECTOR_SELECT(func1, func2, a, b) \
  24. _Generic( \
  25. (b), \
  26. float: func2, \
  27. const float: func2, \
  28. int: func2, \
  29. const int: func2, \
  30. Vector: func1, \
  31. const Vector: func1)(a, b)
  32. #define vector_add(a, b) VECTOR_SELECT(vector_add, vector_addf, a, b)
  33. #define vector_sub(a, b) VECTOR_SELECT(vector_sub, vector_subf, a, b)
  34. #define vector_mul(a, b) VECTOR_SELECT(vector_mul, vector_mulf, a, b)
  35. #define vector_div(a, b) VECTOR_SELECT(vector_div, vector_divf, a, b)
  36. #ifdef __cplusplus
  37. }
  38. #endif