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) {
70 template<class Scalar>
71 constexpr space::Vector<Scalar> min(
72 space::Vector<Scalar> lhs,
73 space::Vector<Scalar> rhs
75 return space::Vector<Scalar>(
81 template<class Scalar>
82 constexpr space::Vector<Scalar> max(
83 space::Vector<Scalar> lhs,
84 space::Vector<Scalar> rhs
86 return space::Vector<Scalar>(