1 #ifndef SPACE_VECTOR_H_
2 #define SPACE_VECTOR_H_
13 constexpr Vector() : x(0), y(0) { }
14 constexpr Vector(Scalar x, Scalar y) : x(x), y(y) { }
17 constexpr Vector(Vector<Other> other) : x(other.x), y(other.y) { }
20 Vector<Scalar> &operator +=(Vector<Scalar> other) {
25 Vector<Scalar> &operator -=(Vector<Scalar> other) {
38 template<class Scalar>
39 constexpr Vector<Scalar> operator -(Vector<Scalar> v) {
40 return Vector<Scalar>(-v.x, -v.y);
44 template<class Scalar>
45 constexpr Vector<Scalar> operator +(Vector<Scalar> lhs, Vector<Scalar> rhs) {
46 return Vector<Scalar>(lhs.x + rhs.x, lhs.y + rhs.y);
49 template<class Scalar>
50 constexpr Vector<Scalar> operator -(Vector<Scalar> lhs, Vector<Scalar> rhs) {
51 return Vector<Scalar>(lhs.x - rhs.x, lhs.y - rhs.y);
55 template<class Scalar>
56 constexpr Vector<Scalar> operator *(Vector<Scalar> lhs, Scalar rhs) {
57 return Vector<Scalar>(lhs.x * rhs, lhs.y * rhs);
60 template<class Scalar>
61 constexpr Vector<Scalar> operator *(Scalar lhs, Vector<Scalar> rhs) {
64 template<class Scalar>
65 constexpr Vector<Scalar> operator *(Vector<Scalar> lhs, Vector<Scalar> rhs) {
66 return Vector<Scalar>(lhs.x * rhs.x, lhs.y * rhs.y);
74 template<class Scalar>
75 constexpr space::Vector<Scalar> min(
76 space::Vector<Scalar> lhs,
77 space::Vector<Scalar> rhs
79 return space::Vector<Scalar>(
85 template<class Scalar>
86 constexpr space::Vector<Scalar> max(
87 space::Vector<Scalar> lhs,
88 space::Vector<Scalar> rhs
90 return space::Vector<Scalar>(