10 #ifndef INCLUDED_IMATHVEC_H
11 #define INCLUDED_IMATHVEC_H
14 # if __has_include(<version>)
31 #if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
33 # pragma warning(push)
34 # pragma warning(disable : 4290)
37 IMATH_INTERNAL_NAMESPACE_HEADER_ENTER
39 template <
class T>
class Vec2;
40 template <
class T>
class Vec3;
41 template <
class T>
class Vec4;
102 operator= (const
Vec2&
v) IMATH_NOEXCEPT;
105 ~
Vec2 () IMATH_NOEXCEPT = default;
109 #if IMATH_FOREIGN_VECTOR_INTEROP
138 operator= (
const V& v) IMATH_NOEXCEPT
188 operator== (const
Vec2<
S>& v) const IMATH_NOEXCEPT;
193 operator!= (const
Vec2<
S>& v) const IMATH_NOEXCEPT;
227 operator+= (const
Vec2& v) IMATH_NOEXCEPT;
231 operator+ (const
Vec2& v) const IMATH_NOEXCEPT;
235 operator-= (const
Vec2& v) IMATH_NOEXCEPT;
239 operator- (const
Vec2& v) const IMATH_NOEXCEPT;
249 operator*= (const
Vec2& v) IMATH_NOEXCEPT;
253 operator*= (
T a) IMATH_NOEXCEPT;
257 operator* (const
Vec2& v) const IMATH_NOEXCEPT;
264 operator/= (const
Vec2& v) IMATH_NOEXCEPT;
268 operator/= (
T a) IMATH_NOEXCEPT;
272 operator/ (const
Vec2& v) const IMATH_NOEXCEPT;
293 const
Vec2& normalizeExc ();
305 Vec2<
T> normalizedExc () const;
321 return std::numeric_limits<T>::lowest ();
339 return std::numeric_limits<T>::epsilon ();
423 operator= (const Vec3& v) IMATH_NOEXCEPT;
426 ~Vec3 () IMATH_NOEXCEPT = default;
430 #if IMATH_FOREIGN_VECTOR_INTEROP
448 :
Vec3 (
T (v.x),
T (v.y),
T (v.z))
456 : Vec3 (
T (v[0]),
T (v[1]),
T (v[2]))
517 operator== (const Vec3<
S>& v) const IMATH_NOEXCEPT;
522 operator!= (const Vec3<
S>& v) const IMATH_NOEXCEPT;
551 operator%= (const Vec3& v) IMATH_NOEXCEPT;
555 operator% (const Vec3& v) const IMATH_NOEXCEPT;
559 operator+= (const Vec3& v) IMATH_NOEXCEPT;
563 operator+ (const Vec3& v) const IMATH_NOEXCEPT;
567 operator-= (const Vec3& v) IMATH_NOEXCEPT;
571 operator- (const Vec3& v) const IMATH_NOEXCEPT;
581 operator*= (const Vec3& v) IMATH_NOEXCEPT;
585 operator*= (
T a) IMATH_NOEXCEPT;
589 operator* (const Vec3& v) const IMATH_NOEXCEPT;
596 operator/= (const Vec3& v) IMATH_NOEXCEPT;
600 operator/= (
T a) IMATH_NOEXCEPT;
604 operator/ (const Vec3& v) const IMATH_NOEXCEPT;
625 const Vec3& normalizeExc ();
638 Vec3<
T> normalizedExc () const;
654 return std::numeric_limits<T>::lowest ();
672 return std::numeric_limits<T>::epsilon ();
748 operator= (const Vec4& v) IMATH_NOEXCEPT;
751 ~Vec4 () IMATH_NOEXCEPT = default;
755 #if IMATH_FOREIGN_VECTOR_INTEROP
773 :
Vec4 (
T (v.x),
T (v.y),
T (v.z),
T (v.w))
781 : Vec4 (
T (v[0]),
T (v[1]),
T (v[2]),
T (v[3]))
786 operator= (
const V& v) IMATH_NOEXCEPT
842 operator== (const Vec4<
S>& v) const IMATH_NOEXCEPT;
847 operator!= (const Vec4<
S>& v) const IMATH_NOEXCEPT;
873 operator+= (const Vec4& v) IMATH_NOEXCEPT;
877 operator+ (const Vec4& v) const IMATH_NOEXCEPT;
881 operator-= (const Vec4& v) IMATH_NOEXCEPT;
885 operator- (const Vec4& v) const IMATH_NOEXCEPT;
895 operator*= (const Vec4& v) IMATH_NOEXCEPT;
899 operator*= (
T a) IMATH_NOEXCEPT;
903 operator* (const Vec4& v) const IMATH_NOEXCEPT;
910 operator/= (const Vec4& v) IMATH_NOEXCEPT;
914 operator/= (
T a) IMATH_NOEXCEPT;
918 operator/ (const Vec4& v) const IMATH_NOEXCEPT;
939 const Vec4& normalizeExc ();
952 Vec4<
T> normalizedExc () const;
968 return std::numeric_limits<T>::lowest ();
986 return std::numeric_limits<T>::epsilon ();
1006 template <
class T> std::ostream& operator<< (std::ostream&
s, const
Vec2<
T>& v);
1009 template <
class T> std::ostream& operator<< (std::ostream& s, const Vec3<
T>& v);
1012 template <
class T> std::ostream& operator<< (std::ostream& s, const Vec4<
T>& v);
1017 operator* (
T a, const
Vec2<
T>& v) IMATH_NOEXCEPT;
1022 operator* (
T a, const Vec3<
T>& v) IMATH_NOEXCEPT;
1027 operator* (
T a, const Vec4<
T>& v) IMATH_NOEXCEPT;
1101 template <> const
Vec2<
short>&
Vec2<
short>::normalizeExc () = delete;
1104 Vec2<
short>::normalizeNonNull () IMATH_NOEXCEPT = delete;
1108 template <>
Vec2<
short>
Vec2<
short>::normalizedExc () const = delete;
1111 Vec2<
short>::normalizedNonNull () const IMATH_NOEXCEPT = delete;
1119 template <> const
Vec2<
int>&
Vec2<
int>::normalizeExc () = delete;
1122 Vec2<
int>::normalizeNonNull () IMATH_NOEXCEPT = delete;
1126 template <>
Vec2<
int>
Vec2<
int>::normalizedExc () const = delete;
1129 Vec2<
int>::normalizedNonNull () const IMATH_NOEXCEPT = delete;
1137 template <> const
Vec2<int64_t>&
Vec2<int64_t>::normalizeExc () = delete;
1140 Vec2<int64_t>::normalizeNonNull () IMATH_NOEXCEPT = delete;
1144 template <>
Vec2<int64_t>
Vec2<int64_t>::normalizedExc () const = delete;
1147 Vec2<int64_t>::normalizedNonNull () const IMATH_NOEXCEPT = delete;
1154 Vec3<
short>::
normalize () IMATH_NOEXCEPT = delete;
1155 template <> const Vec3<
short>& Vec3<
short>::normalizeExc () = delete;
1158 Vec3<
short>::normalizeNonNull () IMATH_NOEXCEPT = delete;
1161 Vec3<
short>::
normalized () const IMATH_NOEXCEPT = delete;
1162 template <> Vec3<
short> Vec3<
short>::normalizedExc () const = delete;
1165 Vec3<
short>::normalizedNonNull () const IMATH_NOEXCEPT = delete;
1172 Vec3<
int>::
normalize () IMATH_NOEXCEPT = delete;
1173 template <> const Vec3<
int>& Vec3<
int>::normalizeExc () = delete;
1176 Vec3<
int>::normalizeNonNull () IMATH_NOEXCEPT = delete;
1179 Vec3<
int>::
normalized () const IMATH_NOEXCEPT = delete;
1180 template <> Vec3<
int> Vec3<
int>::normalizedExc () const = delete;
1183 Vec3<
int>::normalizedNonNull () const IMATH_NOEXCEPT = delete;
1190 Vec3<int64_t>::
normalize () IMATH_NOEXCEPT = delete;
1191 template <> const Vec3<int64_t>& Vec3<int64_t>::normalizeExc () = delete;
1194 Vec3<int64_t>::normalizeNonNull () IMATH_NOEXCEPT = delete;
1197 Vec3<int64_t>::
normalized () const IMATH_NOEXCEPT = delete;
1198 template <> Vec3<int64_t> Vec3<int64_t>::normalizedExc () const = delete;
1201 Vec3<int64_t>::normalizedNonNull () const IMATH_NOEXCEPT = delete;
1208 Vec4<
short>::
normalize () IMATH_NOEXCEPT = delete;
1209 template <> const Vec4<
short>& Vec4<
short>::normalizeExc () = delete;
1212 Vec4<
short>::normalizeNonNull () IMATH_NOEXCEPT = delete;
1215 Vec4<
short>::
normalized () const IMATH_NOEXCEPT = delete;
1216 template <> Vec4<
short> Vec4<
short>::normalizedExc () const = delete;
1219 Vec4<
short>::normalizedNonNull () const IMATH_NOEXCEPT = delete;
1226 Vec4<
int>::
normalize () IMATH_NOEXCEPT = delete;
1227 template <> const Vec4<
int>& Vec4<
int>::normalizeExc () = delete;
1230 Vec4<
int>::normalizeNonNull () IMATH_NOEXCEPT = delete;
1233 Vec4<
int>::
normalized () const IMATH_NOEXCEPT = delete;
1234 template <> Vec4<
int> Vec4<
int>::normalizedExc () const = delete;
1237 Vec4<
int>::normalizedNonNull () const IMATH_NOEXCEPT = delete;
1244 Vec4<int64_t>::
normalize () IMATH_NOEXCEPT = delete;
1245 template <> const Vec4<int64_t>& Vec4<int64_t>::normalizeExc () = delete;
1248 Vec4<int64_t>::normalizeNonNull () IMATH_NOEXCEPT = delete;
1251 Vec4<int64_t>::
normalized () const IMATH_NOEXCEPT = delete;
1252 template <> Vec4<int64_t> Vec4<int64_t>::normalizedExc () const = delete;
1255 Vec4<int64_t>::normalizedNonNull () const IMATH_NOEXCEPT = delete;
1265 Vec2<
T>::operator[] (
int i) IMATH_NOEXCEPT
1267 return reinterpret_cast<T*
> (
this)[i];
1274 #ifdef __cpp_if_consteval
1277 return (i == 0) ? x :
y;
1281 return reinterpret_cast<const T*
> (
this)[i];
1284 return reinterpret_cast<const T*
> (
this)[i];
1313 IMATH_NOEXCEPT :
x (
T (v.x)),
1366 return reinterpret_cast<T*
> (
this);
1373 return reinterpret_cast<const T*
> (
this);
1381 return x == v.x && y == v.y;
1389 return x != v.x || y != v.y;
1420 return x * v.x + y * v.y;
1434 return x * v.y - y * v.x;
1441 return x * v.y - y * v.x;
1457 return Vec2 (x + v.x, y + v.y);
1473 return Vec2 (x - v.x, y - v.y);
1480 return Vec2 (-x, -y);
1514 return Vec2 (x * v.x, y * v.y);
1521 return Vec2 (x * a, y * a);
1546 return Vec2 (x / v.x, y / v.y);
1553 return Vec2 (x / a, y / a);
1565 if (max < absY) max = absY;
1578 return max *
std::sqrt (absX * absX + absY * absY);
1585 T length2 =
dot (*
this);
1588 return lengthTiny ();
1628 throw std::domain_error (
"Cannot normalize null vector.");
1653 return Vec2 (x / l, y / l);
1663 throw std::domain_error (
"Cannot normalize null vector.");
1665 return Vec2 (x / l, y / l);
1673 return Vec2 (x / l, y / l);
1684 return reinterpret_cast<T*
> (
this)[i];
1691 #ifdef __cpp_if_consteval
1694 return (i == 0) ? x : ((i == 1) ? y : z);
1698 return reinterpret_cast<const T*
> (
this)[i];
1701 return reinterpret_cast<const T*
> (
this)[i];
1733 IMATH_NOEXCEPT :
x (
T (v.x)),
1751 IMATH_NOEXCEPT :
x (
T (v.x / v.w)),
1766 T absW = (vw >=
T (0)) ? vw : -vw;
1770 T m = baseTypeMax () * absW;
1772 if (vx <= -m || vx >= m || vy <= -m || vy >= m || vz <= -m || vz >= m)
1773 throw std::domain_error (
"Cannot normalize point at infinity.");
1825 return reinterpret_cast<T*
> (
this);
1832 return reinterpret_cast<const T*
> (
this);
1840 return x == v.x && y == v.y && z == v.z;
1848 return x != v.x || y != v.y || z != v.z;
1855 for (
int i = 0; i < 3; i++)
1866 for (
int i = 0; i < 3; i++)
1877 return x * v.x + y * v.y + z * v.z;
1891 return Vec3 (y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x);
1898 T a = y * v.z - z * v.y;
1899 T b = z * v.x - x * v.z;
1900 T c = x * v.y - y * v.x;
1911 return Vec3 (y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x);
1928 return Vec3 (x + v.x, y + v.y, z + v.z);
1945 return Vec3 (x - v.x, y - v.y, z - v.z);
1952 return Vec3 (-x, -y, -z);
1989 return Vec3 (x * v.x, y * v.y, z * v.z);
1996 return Vec3 (x * a, y * a, z * a);
2023 return Vec3 (x / v.x, y / v.y, z / v.z);
2030 return Vec3 (x / a, y / a, z / a);
2037 T absX = (x >=
T (0)) ? x : -x;
2038 T absY = (y >=
T (0)) ? y : -y;
2039 T absZ = (z >=
T (0)) ? z : -z;
2043 if (max < absY) max = absY;
2045 if (max < absZ) max = absZ;
2059 return max *
std::sqrt (absX * absX + absY * absY + absZ * absZ);
2066 T length2 =
dot (*
this);
2069 return lengthTiny ();
2110 throw std::domain_error (
"Cannot normalize null vector.");
2137 return Vec3 (x / l, y / l, z / l);
2147 throw std::domain_error (
"Cannot normalize null vector.");
2149 return Vec3 (x / l, y / l, z / l);
2157 return Vec3 (x / l, y / l, z / l);
2168 return reinterpret_cast<T*
> (
this)[i];
2175 #ifdef __cpp_if_consteval
2178 return (i == 0) ? x : ((i == 1) ? y : ((i == 2) ? z :
w));
2182 return reinterpret_cast<const T*
> (
this)[i];
2185 return reinterpret_cast<const T*
> (
this)[i];
2203 IMATH_NOEXCEPT :
x (a),
2220 IMATH_NOEXCEPT :
x (
T (v.x)),
2240 IMATH_NOEXCEPT :
x (
T (v.x)),
2294 return reinterpret_cast<T*
> (
this);
2301 return reinterpret_cast<const T*
> (
this);
2309 return x == v.x && y == v.y && z == v.z && w == v.w;
2317 return x != v.x || y != v.y || z != v.z || w != v.w;
2324 for (
int i = 0; i < 4; i++)
2335 for (
int i = 0; i < 4; i++)
2346 return x * v.x + y * v.y + z * v.z + w * v.w;
2371 return Vec4 (x + v.x, y + v.y, z + v.z, w + v.w);
2389 return Vec4 (x - v.x, y - v.y, z - v.z, w - v.w);
2396 return Vec4 (-x, -y, -z, -w);
2436 return Vec4 (x * v.x, y * v.y, z * v.z, w * v.w);
2443 return Vec4 (x * a, y * a, z * a, w * a);
2472 return Vec4 (x / v.x, y / v.y, z / v.z, w / v.w);
2479 return Vec4 (x / a, y / a, z / a, w / a);
2486 T absX = (x >=
T (0)) ? x : -x;
2487 T absY = (y >=
T (0)) ? y : -y;
2488 T absZ = (z >=
T (0)) ? z : -z;
2489 T absW = (w >=
T (0)) ? w : -w;
2493 if (max < absY) max = absY;
2495 if (max < absZ) max = absZ;
2497 if (max < absW) max = absW;
2513 std::sqrt (absX * absX + absY * absY + absZ * absZ + absW * absW);
2520 T length2 =
dot (*
this);
2523 return lengthTiny ();
2565 throw std::domain_error (
"Cannot normalize null vector.");
2594 return Vec4 (x / l, y / l, z / l, w / l);
2604 throw std::domain_error (
"Cannot normalize null vector.");
2606 return Vec4 (x / l, y / l, z / l, w / l);
2614 return Vec4 (x / l, y / l, z / l, w / l);
2623 operator<< (std::ostream& s, const Vec2<T>&
v)
2625 return s <<
'(' << v.x <<
' ' << v.y <<
')';
2630 operator<< (std::ostream& s, const Vec3<T>&
v)
2632 return s <<
'(' << v.x <<
' ' << v.y <<
' ' << v.z <<
')';
2637 operator<< (std::ostream& s, const Vec4<T>&
v)
2639 return s <<
'(' << v.x <<
' ' << v.y <<
' ' << v.z <<
' ' << v.w <<
')';
2650 return Vec2<T> (a * v.x, a * v.y);
2657 return Vec3<T> (a * v.x, a * v.y, a * v.z);
2664 return Vec4<T> (a * v.x, a * v.y, a * v.z, a * v.w);
2667 #if (defined _WIN32 || defined _WIN64) && defined _MSC_VER
2668 # pragma warning(pop)
2671 IMATH_INTERNAL_NAMESPACE_HEADER_EXIT
2673 #endif // INCLUDED_IMATHVEC_H
IMATH_HOSTDEVICE static constexpr T baseTypeMax() IMATH_NOEXCEPT
Largest possible positive value.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool equalWithAbsError(T x1, T x2, T e) IMATH_NOEXCEPT
IMATH_HOSTDEVICE Vec4(const V &v)
IMATH_HOSTDEVICE T * getValue() IMATH_NOEXCEPT
Return a raw pointer to the array of values.
IMATH_HOSTDEVICE Vec4< T > normalized() const IMATH_NOEXCEPT
Return a normalized vector. Does not modify *this.
IMATH_HOSTDEVICE constexpr T length2() const IMATH_NOEXCEPT
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4 & negate() IMATH_NOEXCEPT
Component-wise multiplication by -1.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2 & operator+=(const Vec2 &v) IMATH_NOEXCEPT
Component-wise addition.
IMATH_HOSTDEVICE static constexpr T baseTypeSmallest() IMATH_NOEXCEPT
Smallest possible positive value.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2 & operator*=(const Vec2 &v) IMATH_NOEXCEPT
Component-wise multiplication.
Vec4< T > normalizedExc() const
IMATH_HOSTDEVICE constexpr bool operator==(const Vec4< S > &v) const IMATH_NOEXCEPT
Equality.
IMATH_HOSTDEVICE const Vec4 & normalizeNonNull() IMATH_NOEXCEPT
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool equalWithRelError(const Vec3< T > &v, T e) const IMATH_NOEXCEPT
*get result *(waiting if necessary)*A common idiom is to fire a bunch of sub tasks at the and then *wait for them to all complete We provide a helper class
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2 & operator-=(const Vec2 &v) IMATH_NOEXCEPT
Component-wise subtraction.
imath_half_bits_t half
if we're in a C-only context, alias the half bits type to half
IMATH_HOSTDEVICE T length() const IMATH_NOEXCEPT
Return the Euclidean norm.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool equalWithRelError(T x1, T x2, T e) IMATH_NOEXCEPT
GLsizei const GLfloat * value
IMATH_HOSTDEVICE const Vec3 & normalizeNonNull() IMATH_NOEXCEPT
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4 & operator+=(const Vec4 &v) IMATH_NOEXCEPT
Component-wise addition.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2 & negate() IMATH_NOEXCEPT
Component-wise multiplication by -1.
IMATH_HOSTDEVICE constexpr T dot(const Vec4 &v) const IMATH_NOEXCEPT
Dot product.
vfloat4 sqrt(const vfloat4 &a)
GLdouble GLdouble GLdouble z
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3 & operator*=(const Vec3 &v) IMATH_NOEXCEPT
Component-wise multiplication.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4 & operator*=(const Vec4 &v) IMATH_NOEXCEPT
Component-wise multiplication.
IMATH_HOSTDEVICE constexpr T operator^(const Vec4 &v) const IMATH_NOEXCEPT
Dot product.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool equalWithRelError(const Vec4< T > &v, T e) const IMATH_NOEXCEPT
GLboolean GLboolean GLboolean GLboolean a
IMATH_HOSTDEVICE Vec3< T > normalized() const IMATH_NOEXCEPT
Return a normalized vector. Does not modify *this.
has_subscript<T>::value is true if T has a subscript operator.
GLuint GLsizei GLsizei * length
IMATH_HOSTDEVICE constexpr T dot(const Vec3 &v) const IMATH_NOEXCEPT
Dot product.
IMATH_HOSTDEVICE constexpr T length2() const IMATH_NOEXCEPT
ImageBuf OIIO_API min(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3 & operator+=(const Vec3 &v) IMATH_NOEXCEPT
Component-wise addition.
IMATH_HOSTDEVICE constexpr Vec2 operator-() const IMATH_NOEXCEPT
Component-wise multiplication by -1.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4 & operator=(const Vec4 &v) IMATH_NOEXCEPT
Assignment.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2 & operator=(const Vec2 &v) IMATH_NOEXCEPT
Assignment.
IMATH_HOSTDEVICE Vec2< T > normalizedNonNull() const IMATH_NOEXCEPT
IMATH_HOSTDEVICE static constexpr T baseTypeEpsilon() IMATH_NOEXCEPT
Smallest possible e for which 1+e != 1.
IMATH_HOSTDEVICE Vec3(const V &v)
IMATH_HOSTDEVICE constexpr Vec2< T > operator*(T a, const Vec2< T > &v) IMATH_NOEXCEPT
Reverse multiplication: S * Vec2<T>
IMATH_HOSTDEVICE Vec2(const V &v)
__hostdev__ float getValue(uint32_t i) const
IMATH_HOSTDEVICE static constexpr T baseTypeSmallest() IMATH_NOEXCEPT
Smallest possible positive value.
Vec3< T > normalizedExc() const
IMATH_HOSTDEVICE Vec2< T > normalized() const IMATH_NOEXCEPT
Return a normalized vector. Does not modify *this.
IMATH_HOSTDEVICE Vec2() IMATH_NOEXCEPT
Uninitialized by default.
IMATH_HOSTDEVICE constexpr bool operator!=(const Vec4< S > &v) const IMATH_NOEXCEPT
Inequality.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool equalWithAbsError(const Vec4< T > &v, T e) const IMATH_NOEXCEPT
IMATH_HOSTDEVICE constexpr Vec4 operator-() const IMATH_NOEXCEPT
Component-wise multiplication by -1.
IMATH_HOSTDEVICE constexpr Vec3 operator-() const IMATH_NOEXCEPT
Component-wise multiplication by -1.
IMATH_HOSTDEVICE static constexpr unsigned int dimensions() IMATH_NOEXCEPT
Return the number of dimensions, i.e. 4.
IMATH_HOSTDEVICE T length() const IMATH_NOEXCEPT
Return the Euclidean norm.
IMATH_HOSTDEVICE constexpr T dot(const Vec2 &v) const IMATH_NOEXCEPT
Dot product.
const Vec4 & normalizeExc()
Normalize in place. If length()==0, throw an exception.
IMATH_HOSTDEVICE void setValue(S a, S b, S c) IMATH_NOEXCEPT
Set the value.
fpreal64 dot(const CE_VectorT< T > &a, const CE_VectorT< T > &b)
const Vec3 & normalizeExc()
Normalize in place. If length()==0, throw an exception.
IMATH_HOSTDEVICE constexpr bool operator==(const Vec3< S > &v) const IMATH_NOEXCEPT
Equality.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T & operator[](int i) IMATH_NOEXCEPT
IMATH_HOSTDEVICE constexpr Vec3 operator+(const Vec3 &v) const IMATH_NOEXCEPT
Component-wise addition.
#define IMATH_EXPORT_ENUM
IMATH_HOSTDEVICE constexpr Vec4 operator*(const Vec4 &v) const IMATH_NOEXCEPT
Component-wise multiplication.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3 & negate() IMATH_NOEXCEPT
Component-wise multiplication by -1.
IMATH_HOSTDEVICE constexpr T length2() const IMATH_NOEXCEPT
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2 & operator/=(const Vec2 &v) IMATH_NOEXCEPT
Component-wise division.
IMATH_HOSTDEVICE Vec3< T > normalizedNonNull() const IMATH_NOEXCEPT
IMATH_HOSTDEVICE constexpr T operator^(const Vec3 &v) const IMATH_NOEXCEPT
Dot product.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3 & operator%=(const Vec3 &v) IMATH_NOEXCEPT
Right-handed cross product.
GLint GLenum GLboolean normalized
GLboolean GLboolean GLboolean b
#define IMATH_ENABLE_IF(...)
IMATH_HOSTDEVICE static constexpr unsigned int dimensions() IMATH_NOEXCEPT
Return the number of dimensions, i.e. 2.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4 & operator-=(const Vec4 &v) IMATH_NOEXCEPT
Component-wise subtraction.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool equalWithRelError(const Vec2< T > &v, T e) const IMATH_NOEXCEPT
IMATH_HOSTDEVICE static constexpr T baseTypeMax() IMATH_NOEXCEPT
Largest possible positive value.
IMATH_HOSTDEVICE static constexpr unsigned int dimensions() IMATH_NOEXCEPT
Return the number of dimensions, i.e. 3.
IMATH_HOSTDEVICE static constexpr T baseTypeMax() IMATH_NOEXCEPT
Largest possible positive value.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3 & operator-=(const Vec3 &v) IMATH_NOEXCEPT
Component-wise subtraction.
IMATH_HOSTDEVICE constexpr Vec4 operator+(const Vec4 &v) const IMATH_NOEXCEPT
Component-wise addition.
IMATH_HOSTDEVICE Vec4< T > normalizedNonNull() const IMATH_NOEXCEPT
IMATH_HOSTDEVICE constexpr bool operator!=(const Vec2< S > &v) const IMATH_NOEXCEPT
Inequality.
IMATH_HOSTDEVICE constexpr bool operator==(const Vec2< S > &v) const IMATH_NOEXCEPT
Equality.
IMATH_HOSTDEVICE constexpr Vec2 operator*(const Vec2 &v) const IMATH_NOEXCEPT
Component-wise multiplication.
IMATH_HOSTDEVICE static constexpr T baseTypeEpsilon() IMATH_NOEXCEPT
Smallest possible e for which 1+e != 1.
IMATH_HOSTDEVICE T * getValue() IMATH_NOEXCEPT
Return a raw pointer to the array of values.
IMATH_HOSTDEVICE constexpr Vec2 operator/(const Vec2 &v) const IMATH_NOEXCEPT
Component-wise division.
#define IMATH_UNLIKELY(x)
IMATH_HOSTDEVICE constexpr bool operator!=(const Vec3< S > &v) const IMATH_NOEXCEPT
Inequality.
LeafData & operator=(const LeafData &)=delete
IMATH_HOSTDEVICE static constexpr T baseTypeEpsilon() IMATH_NOEXCEPT
Smallest possible e for which 1+e != 1.
#define IMATH_EXPORT_TEMPLATE_TYPE
IMATH_HOSTDEVICE const Vec2 & normalizeNonNull() IMATH_NOEXCEPT
ImageBuf OIIO_API max(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
IMATH_HOSTDEVICE void setValue(S a, S b, S c, S d) IMATH_NOEXCEPT
Set the value.
IMATH_HOSTDEVICE constexpr Vec4 operator/(const Vec4 &v) const IMATH_NOEXCEPT
Component-wise division.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4 & operator/=(const Vec4 &v) IMATH_NOEXCEPT
Component-wise division.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool equalWithAbsError(const Vec3< T > &v, T e) const IMATH_NOEXCEPT
IMATH_HOSTDEVICE constexpr Vec2 operator+(const Vec2 &v) const IMATH_NOEXCEPT
Component-wise addition.
IMATH_HOSTDEVICE constexpr T cross(const Vec2 &v) const IMATH_NOEXCEPT
GLubyte GLubyte GLubyte GLubyte w
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T & operator[](int i) IMATH_NOEXCEPT
IMATH_INTERNAL_NAMESPACE_HEADER_ENTER IMATH_HOSTDEVICE constexpr T abs(T a) IMATH_NOEXCEPT
const Vec2 & normalizeExc()
Normalize in place. If length()==0, throw an exception.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool equalWithAbsError(const Vec2< T > &v, T e) const IMATH_NOEXCEPT
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3 & operator=(const Vec3 &v) IMATH_NOEXCEPT
Assignment.
IMATH_HOSTDEVICE Vec4() IMATH_NOEXCEPT
Uninitialized by default.
IMATH_HOSTDEVICE constexpr T operator%(const Vec2 &v) const IMATH_NOEXCEPT
IMATH_HOSTDEVICE constexpr T operator^(const Vec2 &v) const IMATH_NOEXCEPT
Dot product.
enum IMATH_EXPORT_ENUM InfException
Enum for the Vec4 to Vec3 conversion constructor.
IMATH_HOSTDEVICE constexpr Vec3 operator%(const Vec3 &v) const IMATH_NOEXCEPT
Right-handed cross product.
IMATH_HOSTDEVICE static constexpr T baseTypeSmallest() IMATH_NOEXCEPT
Smallest possible positive value.
IMATH_HOSTDEVICE constexpr Vec3 cross(const Vec3 &v) const IMATH_NOEXCEPT
Right-handed cross product.
IMATH_HOSTDEVICE const Vec3 & normalize() IMATH_NOEXCEPT
Normalize in place. If length()==0, return a null vector.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3 & operator/=(const Vec3 &v) IMATH_NOEXCEPT
Component-wise division.
SIM_DerVector3 cross(const SIM_DerVector3 &lhs, const SIM_DerVector3 &rhs)
Vec2< T > normalizedExc() const
IMATH_HOSTDEVICE void setValue(S a, S b) IMATH_NOEXCEPT
Set the value.
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T & operator[](int i) IMATH_NOEXCEPT
IMATH_HOSTDEVICE T * getValue() IMATH_NOEXCEPT
Return a raw pointer to the array of values.
IMATH_HOSTDEVICE T length() const IMATH_NOEXCEPT
Return the Euclidean norm.
IMATH_HOSTDEVICE constexpr Vec3 operator*(const Vec3 &v) const IMATH_NOEXCEPT
Component-wise multiplication.
IMATH_HOSTDEVICE const Vec2 & normalize() IMATH_NOEXCEPT
Normalize in place. If length()==0, return a null vector.
IMATH_HOSTDEVICE Vec3() IMATH_NOEXCEPT
Uninitialized by default.
IMATH_HOSTDEVICE const Vec4 & normalize() IMATH_NOEXCEPT
Normalize in place. If length()==0, return a null vector.
IMATH_HOSTDEVICE constexpr Vec3 operator/(const Vec3 &v) const IMATH_NOEXCEPT
Component-wise division.