SLProject 4.0.000
SLVec3< T > Class Template Reference

3D vector template class for standard 3D vector algebra. More...

#include <SLVec3.h>

Public Member Functions

 SLVec3 ()
 
 SLVec3 (const T V)
 
 SLVec3 (const T X, const T Y, const T Z=0)
 
 SLVec3 (const T v[3])
 
 SLVec3 (const SLVec2< T > &v)
 
 SLVec3 (const SLVec3< T > &v)
 
 SLVec3 (const SLstring &threeFloatsWithDelimiter)
 
void set (const T X, const T Y, const T Z)
 
void set (const T X, const T Y)
 
void set (const T v[3])
 
void set (const SLVec2< T > &v)
 
void set (const SLVec3< T > &v)
 
SLbool operator== (const SLVec3 &v) const
 
SLbool operator!= (const SLVec3 &v) const
 
SLbool operator<= (const SLVec3 &v) const
 
SLbool operator>= (const SLVec3 &v) const
 
SLbool operator< (const SLVec3 &v) const
 
SLbool operator> (const SLVec3 &v) const
 
SLbool operator<= (const T v) const
 
SLbool operator>= (const T v) const
 
SLbool operator< (const T v) const
 
SLbool operator> (const T v) const
 
SLVec3 operator- () const
 
SLVec3 operator+ (const SLVec3 &v) const
 
SLVec3 operator- (const SLVec3 &v) const
 
operator* (const SLVec3 &v) const
 
SLVec3 operator^ (const SLVec3 &v) const
 
SLVec3 operator* (const T s) const
 
SLVec3 operator/ (const T s) const
 
SLVec3 operator& (const SLVec3 &v) const
 
SLVec3operator= (const SLVec2< T > &v)
 
SLVec3operator= (const SLVec3 &v)
 
SLVec3operator+= (const SLVec3 &v)
 
SLVec3operator-= (const SLVec3 &v)
 
SLVec3operator+= (const T s)
 
SLVec3operator-= (const T s)
 
SLVec3operator*= (const T s)
 
SLVec3operator/= (const T s)
 
SLVec3operator&= (const SLVec3 &v)
 
void add (const SLVec3 &a, const SLVec3 &b)
 
void add (const SLVec3 &a)
 
void sub (const SLVec3 &a, const SLVec3 &b)
 
void sub (const SLVec3 &a)
 
void scale (const T s)
 
dot (const SLVec3 &v) const
 
void cross (const SLVec3 &a, const SLVec3 &b)
 
length () const
 
lengthSqr () const
 
SLVec3normalize ()
 
SLVec3 normalized () const
 
void clampMinMax (const T min, const T max)
 
diff (const SLVec3 &v)
 
void mix (const SLVec3 &a, const SLVec3 &b, const T factor_b)
 
void setMin (const SLVec3 &v)
 
void setMax (const SLVec3 &v)
 
maxXYZ ()
 
minXYZ ()
 
maxXYZ (SLint &comp)
 
minXYZ (SLint &comp)
 
SLint maxComp ()
 
SLbool isZero ()
 
distance (const SLVec3 &p) const
 Calculate the distance to point p. More...
 
distSquared (const SLVec3 &q)
 Calculate the squared distance from the vector to point q. More...
 
void toSpherical (T &r, T &theta, T &phi)
 Calculates the spherical coords into r, theta & phi in radians. More...
 
void fromSpherical (T r, T theta, T phi)
 Calculates the vector from spherical coords r, theta & phi in radians. More...
 
void gammaCorrect (T oneOverGamma)
 Gamma correction. More...
 
void print (const SLchar *str=nullptr)
 Prints the vector to std out. More...
 
SLstring toString (SLstring delimiter=", ", int decimals=2)
 Conversion to string. More...
 
void fromString (const SLstring &threeFloatsWithDelimiter, SLchar delimiter=',')
 Conversion from string. More...
 
void hsv2rgb (const SLVec3 &hsv)
 HSV (0-1) to RGB (0-1) color conversion (http://www.rapidtables.com/convert/color/hsv-to-rgb.htm) More...
 
void ecef2LatLonAlt (const SLVec3 &ecef)
 Earth Centered Earth Fixed (ecef) to Latitude Longitude Altitude (LatLonAlt) using the WGS84 model. More...
 
void latlonAlt2ecef (const SLVec3 &latDegLonDegAltM)
 Latitude Longitude Altitude (LatLonAlt) to Earth Centered Earth Fixed (ecef) using the WGS84 model. More...
 

Public Attributes

union {
   struct {
      T   x
 
      T   y
 
      T   z
 
   } 
 
   struct {
      T   r
 
      T   g
 
      T   b
 
   } 
 
   struct {
      T   lat
 
      T   lon
 
      T   alt
 
   } 
 
   struct {
      T   comp [3]
 
   } 
 
}; 
 

Static Public Attributes

static SLVec3 ZERO = SLVec3<T>(0.0f, 0.0f, 0.0f)
 
static SLVec3 BLACK = SLVec3<T>(0.0f, 0.0f, 0.0f)
 
static SLVec3 GRAY = SLVec3<T>(0.5f, 0.5f, 0.5f)
 
static SLVec3 WHITE = SLVec3<T>(1.0f, 1.0f, 1.0f)
 
static SLVec3 RED = SLVec3<T>(1.0f, 0.0f, 0.0f)
 
static SLVec3 GREEN = SLVec3<T>(0.0f, 1.0f, 0.0f)
 
static SLVec3 BLUE = SLVec3<T>(0.0f, 0.0f, 1.0f)
 
static SLVec3 CYAN = SLVec3<T>(0.0f, 1.0f, 1.0f)
 
static SLVec3 MAGENTA = SLVec3<T>(1.0f, 0.0f, 1.0f)
 
static SLVec3 YELLOW = SLVec3<T>(1.0f, 1.0f, 0.0f)
 
static SLVec3 ORANGE = SLVec3<T>(0.5f, 0.5f, 0.0f)
 
static SLVec3 COLBFH = SLVec3<T>(0.8f, 0.5f, 0.0f)
 
static SLVec3 AXISX = SLVec3<T>(1.0f, 0.0f, 0.0f)
 
static SLVec3 AXISY = SLVec3<T>(0.0f, 1.0f, 0.0f)
 
static SLVec3 AXISZ = SLVec3<T>(0.0f, 0.0f, 1.0f)
 

Friends

SLVec3 operator* (T s, const SLVec3 &v)
 
std::ostream & operator<< (std::ostream &output, const SLVec3 &v)
 

Detailed Description

template<class T>
class SLVec3< T >

3D vector template class for standard 3D vector algebra.

3D vector template class with type definitions for 3D vectors and colors:
Use SLVec3f for a specific float type vector
Use SLVec3d for a specific double type vector
Use SLVec3r for a precision independent real type.

Constructor & Destructor Documentation

◆ SLVec3() [1/7]

template<class T >
SLVec3< T >::SLVec3 ( )
inline

◆ SLVec3() [2/7]

template<class T >
SLVec3< T >::SLVec3 ( const T  V)
inlineexplicit

◆ SLVec3() [3/7]

template<class T >
SLVec3< T >::SLVec3 ( const T  X,
const T  Y,
const T  Z = 0 
)
inline

◆ SLVec3() [4/7]

template<class T >
SLVec3< T >::SLVec3 ( const T  v[3])
inlineexplicit

◆ SLVec3() [5/7]

template<class T >
SLVec3< T >::SLVec3 ( const SLVec2< T > &  v)
inlineexplicit

◆ SLVec3() [6/7]

template<class T >
SLVec3< T >::SLVec3 ( const SLVec3< T > &  v)
inline

◆ SLVec3() [7/7]

template<class T >
SLVec3< T >::SLVec3 ( const SLstring threeFloatsWithDelimiter)
inlineexplicit

Member Function Documentation

◆ add() [1/2]

template<class T >
void SLVec3< T >::add ( const SLVec3< T > &  a)
inline

◆ add() [2/2]

template<class T >
void SLVec3< T >::add ( const SLVec3< T > &  a,
const SLVec3< T > &  b 
)
inline

◆ clampMinMax()

template<class T >
void SLVec3< T >::clampMinMax ( const T  min,
const T  max 
)
inline

◆ cross()

template<class T >
void SLVec3< T >::cross ( const SLVec3< T > &  a,
const SLVec3< T > &  b 
)
inline

◆ diff()

template<class T >
T SLVec3< T >::diff ( const SLVec3< T > &  v)
inline

◆ distance()

template<class T >
T SLVec3< T >::distance ( const SLVec3< T > &  p) const
inline

Calculate the distance to point p.

◆ distSquared()

template<class T >
T SLVec3< T >::distSquared ( const SLVec3< T > &  q)
inline

Calculate the squared distance from the vector to point q.

◆ dot()

template<class T >
T SLVec3< T >::dot ( const SLVec3< T > &  v) const
inline

◆ ecef2LatLonAlt()

template<class T >
void SLVec3< T >::ecef2LatLonAlt ( const SLVec3< T > &  ecef)
inline

Earth Centered Earth Fixed (ecef) to Latitude Longitude Altitude (LatLonAlt) using the WGS84 model.

Longitude and latitude are in decimal degrees and altitude in meters. The Cartesian ecef coordinates are in meters. See for more details: https://microem.ru/files/2012/08/GPS.G1-X-00006.pdf

◆ fromSpherical()

template<class T >
void SLVec3< T >::fromSpherical ( r,
theta,
phi 
)
inline

Calculates the vector from spherical coords r, theta & phi in radians.

◆ fromString()

template<class T >
void SLVec3< T >::fromString ( const SLstring threeFloatsWithDelimiter,
SLchar  delimiter = ',' 
)
inline

Conversion from string.

◆ gammaCorrect()

template<class T >
void SLVec3< T >::gammaCorrect ( oneOverGamma)
inline

Gamma correction.

◆ hsv2rgb()

template<class T >
void SLVec3< T >::hsv2rgb ( const SLVec3< T > &  hsv)
inline

HSV (0-1) to RGB (0-1) color conversion (http://www.rapidtables.com/convert/color/hsv-to-rgb.htm)

◆ isZero()

template<class T >
SLbool SLVec3< T >::isZero ( )
inline

◆ latlonAlt2ecef()

template<class T >
void SLVec3< T >::latlonAlt2ecef ( const SLVec3< T > &  latDegLonDegAltM)
inline

Latitude Longitude Altitude (LatLonAlt) to Earth Centered Earth Fixed (ecef) using the WGS84 model.

Latitude and longitude are in decimal degrees and altitude in meters. The Cartesian ecef coordinates are in meters. See for more details: https://microem.ru/files/2012/08/GPS.G1-X-00006.pdf

◆ length()

template<class T >
T SLVec3< T >::length ( ) const
inline

◆ lengthSqr()

template<class T >
T SLVec3< T >::lengthSqr ( ) const
inline

◆ maxComp()

template<class T >
SLint SLVec3< T >::maxComp ( )
inline

◆ maxXYZ() [1/2]

template<class T >
T SLVec3< T >::maxXYZ ( )
inline

◆ maxXYZ() [2/2]

template<class T >
T SLVec3< T >::maxXYZ ( SLint comp)
inline

◆ minXYZ() [1/2]

template<class T >
T SLVec3< T >::minXYZ ( )
inline

◆ minXYZ() [2/2]

template<class T >
T SLVec3< T >::minXYZ ( SLint comp)
inline

◆ mix()

template<class T >
void SLVec3< T >::mix ( const SLVec3< T > &  a,
const SLVec3< T > &  b,
const T  factor_b 
)
inline

◆ normalize()

template<class T >
SLVec3 & SLVec3< T >::normalize ( )
inline

◆ normalized()

template<class T >
SLVec3 SLVec3< T >::normalized ( ) const
inline

◆ operator!=()

template<class T >
SLbool SLVec3< T >::operator!= ( const SLVec3< T > &  v) const
inline

◆ operator&()

template<class T >
SLVec3 SLVec3< T >::operator& ( const SLVec3< T > &  v) const
inline

◆ operator&=()

template<class T >
SLVec3 & SLVec3< T >::operator&= ( const SLVec3< T > &  v)
inline

◆ operator*() [1/2]

template<class T >
T SLVec3< T >::operator* ( const SLVec3< T > &  v) const
inline

◆ operator*() [2/2]

template<class T >
SLVec3 SLVec3< T >::operator* ( const T  s) const
inline

◆ operator*=()

template<class T >
SLVec3 & SLVec3< T >::operator*= ( const T  s)
inline

◆ operator+()

template<class T >
SLVec3 SLVec3< T >::operator+ ( const SLVec3< T > &  v) const
inline

◆ operator+=() [1/2]

template<class T >
SLVec3 & SLVec3< T >::operator+= ( const SLVec3< T > &  v)
inline

◆ operator+=() [2/2]

template<class T >
SLVec3 & SLVec3< T >::operator+= ( const T  s)
inline

◆ operator-() [1/2]

template<class T >
SLVec3 SLVec3< T >::operator- ( ) const
inline

◆ operator-() [2/2]

template<class T >
SLVec3 SLVec3< T >::operator- ( const SLVec3< T > &  v) const
inline

◆ operator-=() [1/2]

template<class T >
SLVec3 & SLVec3< T >::operator-= ( const SLVec3< T > &  v)
inline

◆ operator-=() [2/2]

template<class T >
SLVec3 & SLVec3< T >::operator-= ( const T  s)
inline

◆ operator/()

template<class T >
SLVec3 SLVec3< T >::operator/ ( const T  s) const
inline

◆ operator/=()

template<class T >
SLVec3 & SLVec3< T >::operator/= ( const T  s)
inline

◆ operator<() [1/2]

template<class T >
SLbool SLVec3< T >::operator< ( const SLVec3< T > &  v) const
inline

◆ operator<() [2/2]

template<class T >
SLbool SLVec3< T >::operator< ( const T  v) const
inline

◆ operator<=() [1/2]

template<class T >
SLbool SLVec3< T >::operator<= ( const SLVec3< T > &  v) const
inline

◆ operator<=() [2/2]

template<class T >
SLbool SLVec3< T >::operator<= ( const T  v) const
inline

◆ operator=() [1/2]

template<class T >
SLVec3 & SLVec3< T >::operator= ( const SLVec2< T > &  v)
inline

◆ operator=() [2/2]

template<class T >
SLVec3 & SLVec3< T >::operator= ( const SLVec3< T > &  v)
inline

◆ operator==()

template<class T >
SLbool SLVec3< T >::operator== ( const SLVec3< T > &  v) const
inline

◆ operator>() [1/2]

template<class T >
SLbool SLVec3< T >::operator> ( const SLVec3< T > &  v) const
inline

◆ operator>() [2/2]

template<class T >
SLbool SLVec3< T >::operator> ( const T  v) const
inline

◆ operator>=() [1/2]

template<class T >
SLbool SLVec3< T >::operator>= ( const SLVec3< T > &  v) const
inline

◆ operator>=() [2/2]

template<class T >
SLbool SLVec3< T >::operator>= ( const T  v) const
inline

◆ operator^()

template<class T >
SLVec3 SLVec3< T >::operator^ ( const SLVec3< T > &  v) const
inline

◆ print()

template<class T >
void SLVec3< T >::print ( const SLchar str = nullptr)
inline

Prints the vector to std out.

◆ scale()

template<class T >
void SLVec3< T >::scale ( const T  s)
inline

◆ set() [1/5]

template<class T >
void SLVec3< T >::set ( const SLVec2< T > &  v)
inline

◆ set() [2/5]

template<class T >
void SLVec3< T >::set ( const SLVec3< T > &  v)
inline

◆ set() [3/5]

template<class T >
void SLVec3< T >::set ( const T  v[3])
inline

◆ set() [4/5]

template<class T >
void SLVec3< T >::set ( const T  X,
const T  Y 
)
inline

◆ set() [5/5]

template<class T >
void SLVec3< T >::set ( const T  X,
const T  Y,
const T  Z 
)
inline

◆ setMax()

template<class T >
void SLVec3< T >::setMax ( const SLVec3< T > &  v)
inline

◆ setMin()

template<class T >
void SLVec3< T >::setMin ( const SLVec3< T > &  v)
inline

◆ sub() [1/2]

template<class T >
void SLVec3< T >::sub ( const SLVec3< T > &  a)
inline

◆ sub() [2/2]

template<class T >
void SLVec3< T >::sub ( const SLVec3< T > &  a,
const SLVec3< T > &  b 
)
inline

◆ toSpherical()

template<class T >
void SLVec3< T >::toSpherical ( T &  r,
T &  theta,
T &  phi 
)
inline

Calculates the spherical coords into r, theta & phi in radians.

◆ toString()

template<class T >
SLstring SLVec3< T >::toString ( SLstring  delimiter = ", ",
int  decimals = 2 
)
inline

Conversion to string.

Friends And Related Function Documentation

◆ operator*

template<class T >
SLVec3 operator* ( s,
const SLVec3< T > &  v 
)
friend

◆ operator<<

template<class T >
std::ostream & operator<< ( std::ostream &  output,
const SLVec3< T > &  v 
)
friend

Member Data Documentation

◆ 

union { ... } SLVec3< T >::@18

◆ alt

template<class T >
T SLVec3< T >::alt

◆ AXISX

template<class T >
SLVec3< T > SLVec3< T >::AXISX = SLVec3<T>(1.0f, 0.0f, 0.0f)
static

◆ AXISY

template<class T >
SLVec3< T > SLVec3< T >::AXISY = SLVec3<T>(0.0f, 1.0f, 0.0f)
static

◆ AXISZ

template<class T >
SLVec3< T > SLVec3< T >::AXISZ = SLVec3<T>(0.0f, 0.0f, 1.0f)
static

◆ b

template<class T >
T SLVec3< T >::b

◆ BLACK

template<class T >
SLVec3< T > SLVec3< T >::BLACK = SLVec3<T>(0.0f, 0.0f, 0.0f)
static

◆ BLUE

template<class T >
SLVec3< T > SLVec3< T >::BLUE = SLVec3<T>(0.0f, 0.0f, 1.0f)
static

◆ COLBFH

template<class T >
SLVec3< T > SLVec3< T >::COLBFH = SLVec3<T>(0.8f, 0.5f, 0.0f)
static

◆ comp

template<class T >
T SLVec3< T >::comp[3]

◆ CYAN

template<class T >
SLVec3< T > SLVec3< T >::CYAN = SLVec3<T>(0.0f, 1.0f, 1.0f)
static

◆ g

template<class T >
T SLVec3< T >::g

◆ GRAY

template<class T >
SLVec3< T > SLVec3< T >::GRAY = SLVec3<T>(0.5f, 0.5f, 0.5f)
static

◆ GREEN

template<class T >
SLVec3< T > SLVec3< T >::GREEN = SLVec3<T>(0.0f, 1.0f, 0.0f)
static

◆ lat

template<class T >
T SLVec3< T >::lat

◆ lon

template<class T >
T SLVec3< T >::lon

◆ MAGENTA

template<class T >
SLVec3< T > SLVec3< T >::MAGENTA = SLVec3<T>(1.0f, 0.0f, 1.0f)
static

◆ ORANGE

template<class T >
SLVec3< T > SLVec3< T >::ORANGE = SLVec3<T>(0.5f, 0.5f, 0.0f)
static

◆ r

template<class T >
T SLVec3< T >::r

◆ RED

template<class T >
SLVec3< T > SLVec3< T >::RED = SLVec3<T>(1.0f, 0.0f, 0.0f)
static

◆ WHITE

template<class T >
SLVec3< T > SLVec3< T >::WHITE = SLVec3<T>(1.0f, 1.0f, 1.0f)
static

◆ x

template<class T >
T SLVec3< T >::x

◆ y

template<class T >
T SLVec3< T >::y

◆ YELLOW

template<class T >
SLVec3< T > SLVec3< T >::YELLOW = SLVec3<T>(1.0f, 1.0f, 0.0f)
static

◆ z

template<class T >
T SLVec3< T >::z

◆ ZERO

template<class T >
SLVec3< T > SLVec3< T >::ZERO = SLVec3<T>(0.0f, 0.0f, 0.0f)
static

The documentation for this class was generated from the following file: