Vector2.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*
  2. * Author: Patrick-Christopher Mattulat
  3. * Company: Lynar Studios
  4. * E-Mail: webmaster@lynarstudios.com
  5. * Created: 2022-08-05
  6. * Changed: 2023-06-02
  7. *
  8. * */
  9. #include <cmath>
  10. #include <limits>
  11. #include <ls-math/vector/Vector2.hpp>
  12. using ls::math::core::type::vector2_component;
  13. using ls::math::core::type::vector2_components;
  14. using ls::math::core::type::vector_scalar;
  15. using ls::math::vector::Vector2;
  16. Vector2::Vector2(const vector2_component &_x, const vector2_component &_y)
  17. {
  18. this->components[0] = _x;
  19. this->components[1] = _y;
  20. }
  21. Vector2 Vector2::operator+(const Vector2 &_vector) const
  22. {
  23. return Vector2::_add(*this, _vector);
  24. }
  25. Vector2 Vector2::operator-(const Vector2 &_vector) const
  26. {
  27. return Vector2::_subtract(*this, _vector);
  28. }
  29. vector_scalar Vector2::operator*(const Vector2 &_vector) const
  30. {
  31. return Vector2::_dot(*this, _vector);
  32. }
  33. Vector2 Vector2::operator*(double _value)
  34. {
  35. return Vector2{components[0] * _value, components[1] * _value};
  36. }
  37. Vector2 Vector2::operator/(double _divisor)
  38. {
  39. return Vector2::_operatorDivision(this->components[0], this->components[1], _divisor);
  40. }
  41. bool Vector2::operator==(const Vector2 &_vector)
  42. {
  43. return this->components[0] == _vector.components[0] && this->components[1] == _vector.components[1];
  44. }
  45. bool Vector2::operator!=(const Vector2 &_vector)
  46. {
  47. return this->components[0] != _vector.components[0] || this->components[1] != _vector.components[1];
  48. }
  49. Vector2 Vector2::add(const Vector2 &_leftAddend, const Vector2 &_rightAddend)
  50. {
  51. return Vector2::_add(_leftAddend, _rightAddend);
  52. }
  53. vector_scalar Vector2::dot(const Vector2 &_leftAddend, const Vector2 &_rightAddend)
  54. {
  55. return Vector2::_dot(_leftAddend, _rightAddend);
  56. }
  57. vector2_components Vector2::getComponents() const
  58. {
  59. return this->components;
  60. }
  61. double Vector2::getLength()
  62. {
  63. return Vector2::_getLength(this->components[0], this->components[1]);
  64. }
  65. vector2_component Vector2::getX()
  66. {
  67. return this->components[0];
  68. }
  69. vector2_component Vector2::getY()
  70. {
  71. return this->components[1];
  72. }
  73. Vector2 Vector2::normalize()
  74. {
  75. double length = Vector2::_getLength(this->components[0], this->components[1]) + std::numeric_limits<double>::min();
  76. return Vector2::_operatorDivision(this->components[0], this->components[1], length);
  77. }
  78. void Vector2::setX(const vector2_component &_value)
  79. {
  80. this->components[0] = _value;
  81. }
  82. void Vector2::setY(const vector2_component &_value)
  83. {
  84. this->components[1] = _value;
  85. }
  86. Vector2 Vector2::subtract(const Vector2 &_leftAddend, const Vector2 &_rightAddend)
  87. {
  88. return Vector2::_subtract(_leftAddend, _rightAddend);
  89. }
  90. Vector2 Vector2::_add(const Vector2 &_leftAddend, const Vector2 &_rightAddend)
  91. {
  92. return Vector2{_leftAddend.components[0] + _rightAddend.components[0], _leftAddend.components[1] + _rightAddend.components[1]};
  93. }
  94. vector_scalar Vector2::_dot(const Vector2 &_leftAddend, const Vector2 &_rightAddend)
  95. {
  96. return _leftAddend.components[0] * _rightAddend.components[0] + _leftAddend.components[1] * _rightAddend.components[1];
  97. }
  98. Vector2 Vector2::_subtract(const Vector2 &_leftAddend, const Vector2 &_rightAddend)
  99. {
  100. return Vector2{_leftAddend.components[0] - _rightAddend.components[0], _leftAddend.components[1] - _rightAddend.components[1]};
  101. }
  102. double Vector2::_getLength(const vector2_component &_x, const vector2_component &_y)
  103. {
  104. return sqrt(_x * _x + _y * _y);
  105. }
  106. Vector2 Vector2::_operatorDivision(const vector2_component &_x, const vector2_component &_y, double _divisor)
  107. {
  108. return Vector2{_x / _divisor, _y / _divisor};
  109. }