]> git.mxchange.org Git - simgear.git/blobdiff - simgear/math/SGVec2.hxx
Modified Files:
[simgear.git] / simgear / math / SGVec2.hxx
index 2b539b848c356e60c332b980e02cbaca9b1a0179..3153875857238cc5ce1062259c30ef93da131a42 100644 (file)
@@ -204,6 +204,40 @@ SGVec2<T>
 operator*(const SGVec2<T>& v, S s)
 { return SGVec2<T>(s*v(0), s*v(1)); }
 
+/// component wise min
+template<typename T>
+inline
+SGVec2<T>
+min(const SGVec2<T>& v1, const SGVec2<T>& v2)
+{return SGVec2<T>(SGMisc<T>::min(v1(0), v2(0)), SGMisc<T>::min(v1(1), v2(1)));}
+template<typename S, typename T>
+inline
+SGVec2<T>
+min(const SGVec2<T>& v, S s)
+{ return SGVec2<T>(SGMisc<T>::min(s, v(0)), SGMisc<T>::min(s, v(1))); }
+template<typename S, typename T>
+inline
+SGVec2<T>
+min(S s, const SGVec2<T>& v)
+{ return SGVec2<T>(SGMisc<T>::min(s, v(0)), SGMisc<T>::min(s, v(1))); }
+
+/// component wise max
+template<typename T>
+inline
+SGVec2<T>
+max(const SGVec2<T>& v1, const SGVec2<T>& v2)
+{return SGVec2<T>(SGMisc<T>::max(v1(0), v2(0)), SGMisc<T>::max(v1(1), v2(1)));}
+template<typename S, typename T>
+inline
+SGVec2<T>
+max(const SGVec2<T>& v, S s)
+{ return SGVec2<T>(SGMisc<T>::max(s, v(0)), SGMisc<T>::max(s, v(1))); }
+template<typename S, typename T>
+inline
+SGVec2<T>
+max(S s, const SGVec2<T>& v)
+{ return SGVec2<T>(SGMisc<T>::max(s, v(0)), SGMisc<T>::max(s, v(1))); }
+
 /// Scalar dot product
 template<typename T>
 inline
@@ -233,6 +267,13 @@ T
 norm1(const SGVec2<T>& v)
 { return fabs(v(0)) + fabs(v(1)); }
 
+/// The inf-norm of the vector
+template<typename T>
+inline
+T
+normI(const SGVec2<T>& v)
+{ return SGMisc<T>::max(fabs(v(0)), fabs(v(1))); }
+
 /// The euclidean norm of the vector, that is what most people call length
 template<typename T>
 inline