]> git.localhorst.tv Git - orbi.git/blobdiff - src/graphics/Vector.h
orientation for entities
[orbi.git] / src / graphics / Vector.h
index 0fd5bfe49f84d878a688df600b919b29f8cc367e..50ae8c8de067b184e7d49888c7c31c457fd724ef 100644 (file)
@@ -164,6 +164,14 @@ constexpr Vector<Scalar> abs(Vector<Scalar> v) {
        return Vector<Scalar>(std::abs(v.x), std::abs(v.y));
 }
 template<class Scalar>
+inline Vector<Scalar> round(Vector<Scalar> v) {
+       return Vector<Scalar>(std::round(v.x), std::round(v.y));
+}
+template<>
+inline Vector<float> round(Vector<float> v) {
+       return Vector<float>(std::roundf(v.x), std::roundf(v.y));
+}
+template<class Scalar>
 constexpr Vector<Scalar> min(Vector<Scalar> lhs, Vector<Scalar> rhs) {
        return Vector<Scalar>(std::min(lhs.x, rhs.x), std::min(lhs.y, rhs.y));
 }
@@ -190,6 +198,15 @@ constexpr Vector<Scalar> Norm(Vector<Scalar> v) {
        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);
@@ -202,6 +219,7 @@ template<class Scalar>
 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));