return v / Length(v);
}
+template<class Scalar>
+constexpr Vector<Scalar> MirrorX(Vector<Scalar> v) {
+ return Vector<Scalar>(v.x, -v.y);
+}
+template<class Scalar>
+constexpr Vector<Scalar> MirrorY(Vector<Scalar> v) {
+ return Vector<Scalar>(-v.x, v.y);
+}
+
template<class Scalar>
constexpr Vector<Scalar> Rotate90(Vector<Scalar> v) {
return Vector<Scalar>(-v.y, v.x);
constexpr Vector<Scalar> Rotate270(Vector<Scalar> v) {
return Vector<Scalar>(v.y, -v.x);
}
+// angle given in radians
template<class Scalar, class Float>
inline Vector<Scalar> Rotate(Vector<Scalar> v, Float by) {
Float sine(std::sin(by));