vector.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * 3D Engine
  3. * vector.c:
  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. #include <vector.h>
  10. #include <math.h>
  11. /* ---------------------------------------------- 2D Vectors operations --------------------------------------------- */
  12. double vec2Getlength(vec2_t v)
  13. {
  14. return sqrt(v.x * v.x + v.y * v.y);
  15. }
  16. /* ---------------------------------------------- 3D Vectors operations --------------------------------------------- */
  17. double vec3Getlength(vec3_t v)
  18. {
  19. return sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
  20. }
  21. vec3_t vec3RotateX(vec3_t original, double angle)
  22. {
  23. vec3_t ret = {
  24. .x = original.x,
  25. .y = original.y * cos(angle) - original.z * sin(angle),
  26. .z = original.y * sin(angle) + original.z * cos(angle)
  27. };
  28. return ret;
  29. }
  30. vec3_t vec3RotateY(vec3_t original, double angle)
  31. {
  32. vec3_t ret = {
  33. .x = original.x * cos(angle) - original.z * sin(angle),
  34. .y = original.y,
  35. .z = original.x * sin(angle) + original.z * cos(angle)
  36. };
  37. return ret;
  38. }
  39. vec3_t vec3RotateZ(vec3_t original, double angle)
  40. {
  41. vec3_t ret = {
  42. .x = original.x * cos(angle) - original.y * sin(angle),
  43. .y = original.x * sin(angle) + original.y * cos(angle),
  44. .z = original.z,
  45. };
  46. return ret;
  47. }