]> git.mxchange.org Git - simgear.git/commitdiff
Modified Files:
authorfrohlich <frohlich>
Tue, 21 Nov 2006 18:39:57 +0000 (18:39 +0000)
committerfrohlich <frohlich>
Tue, 21 Nov 2006 18:39:57 +0000 (18:39 +0000)
SGVec2.hxx SGVec3.hxx SGVec4.hxx: Implement min/max for vectors

simgear/math/SGVec2.hxx
simgear/math/SGVec3.hxx
simgear/math/SGVec4.hxx

index 2b539b848c356e60c332b980e02cbaca9b1a0179..6205e12618c3a564500d9dae815a01104a75c2f2 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
index ee75415c022083f79976fe984bd808539aa90b9a..df742744373d7fb472527403d3c4ee95b9df00b2 100644 (file)
@@ -259,6 +259,64 @@ SGVec3<T>
 operator*(const SGVec3<T>& v, S s)
 { return SGVec3<T>(s*v(0), s*v(1), s*v(2)); }
 
+/// component wise min
+template<typename T>
+inline
+SGVec3<T>
+min(const SGVec3<T>& v1, const SGVec3<T>& v2)
+{
+  return SGVec3<T>(SGMisc<T>::min(v1(0), v2(0)),
+                   SGMisc<T>::min(v1(1), v2(1)),
+                   SGMisc<T>::min(v1(2), v2(2)));
+}
+template<typename S, typename T>
+inline
+SGVec3<T>
+min(const SGVec3<T>& v, S s)
+{
+  return SGVec3<T>(SGMisc<T>::min(s, v(0)),
+                   SGMisc<T>::min(s, v(1)),
+                   SGMisc<T>::min(s, v(2)));
+}
+template<typename S, typename T>
+inline
+SGVec3<T>
+min(S s, const SGVec3<T>& v)
+{
+  return SGVec3<T>(SGMisc<T>::min(s, v(0)),
+                   SGMisc<T>::min(s, v(1)),
+                   SGMisc<T>::min(s, v(2)));
+}
+
+/// component wise max
+template<typename T>
+inline
+SGVec3<T>
+max(const SGVec3<T>& v1, const SGVec3<T>& v2)
+{
+  return SGVec3<T>(SGMisc<T>::max(v1(0), v2(0)),
+                   SGMisc<T>::max(v1(1), v2(1)),
+                   SGMisc<T>::max(v1(2), v2(2)));
+}
+template<typename S, typename T>
+inline
+SGVec3<T>
+max(const SGVec3<T>& v, S s)
+{
+  return SGVec3<T>(SGMisc<T>::max(s, v(0)),
+                   SGMisc<T>::max(s, v(1)),
+                   SGMisc<T>::max(s, v(2)));
+}
+template<typename S, typename T>
+inline
+SGVec3<T>
+max(S s, const SGVec3<T>& v)
+{
+  return SGVec3<T>(SGMisc<T>::max(s, v(0)),
+                   SGMisc<T>::max(s, v(1)),
+                   SGMisc<T>::max(s, v(2)));
+}
+
 /// Scalar dot product
 template<typename T>
 inline
index 50b138c9eb0e5c0668f81dee9c2aed6e479951e5..b8223a7a02759b367f468902fb2eb26a3b00ca60 100644 (file)
@@ -221,6 +221,70 @@ SGVec4<T>
 operator*(const SGVec4<T>& v, S s)
 { return SGVec4<T>(s*v(0), s*v(1), s*v(2), s*v(3)); }
 
+/// component wise min
+template<typename T>
+inline
+SGVec4<T>
+min(const SGVec4<T>& v1, const SGVec4<T>& v2)
+{
+  return SGVec4<T>(SGMisc<T>::min(v1(0), v2(0)),
+                   SGMisc<T>::min(v1(1), v2(1)),
+                   SGMisc<T>::min(v1(2), v2(2)),
+                   SGMisc<T>::min(v1(3), v2(3)));
+}
+template<typename S, typename T>
+inline
+SGVec4<T>
+min(const SGVec4<T>& v, S s)
+{
+  return SGVec4<T>(SGMisc<T>::min(s, v(0)),
+                   SGMisc<T>::min(s, v(1)),
+                   SGMisc<T>::min(s, v(2)),
+                   SGMisc<T>::min(s, v(3)));
+}
+template<typename S, typename T>
+inline
+SGVec4<T>
+min(S s, const SGVec4<T>& v)
+{
+  return SGVec4<T>(SGMisc<T>::min(s, v(0)),
+                   SGMisc<T>::min(s, v(1)),
+                   SGMisc<T>::min(s, v(2)),
+                   SGMisc<T>::min(s, v(3)));
+}
+
+/// component wise max
+template<typename T>
+inline
+SGVec4<T>
+max(const SGVec4<T>& v1, const SGVec4<T>& v2)
+{
+  return SGVec4<T>(SGMisc<T>::max(v1(0), v2(0)),
+                   SGMisc<T>::max(v1(1), v2(1)),
+                   SGMisc<T>::max(v1(2), v2(2)),
+                   SGMisc<T>::max(v1(3), v2(3)));
+}
+template<typename S, typename T>
+inline
+SGVec4<T>
+max(const SGVec4<T>& v, S s)
+{
+  return SGVec4<T>(SGMisc<T>::max(s, v(0)),
+                   SGMisc<T>::max(s, v(1)),
+                   SGMisc<T>::max(s, v(2)),
+                   SGMisc<T>::max(s, v(3)));
+}
+template<typename S, typename T>
+inline
+SGVec4<T>
+max(S s, const SGVec4<T>& v)
+{
+  return SGVec4<T>(SGMisc<T>::max(s, v(0)),
+                   SGMisc<T>::max(s, v(1)),
+                   SGMisc<T>::max(s, v(2)),
+                   SGMisc<T>::max(s, v(3)));
+}
+
 /// Scalar dot product
 template<typename T>
 inline