PyPO User Manual
Utils< T > Class Template Reference

#include <Utils.h>

Public Member Functions

void dot (const std::array< T, 3 > &v1, const std::array< T, 3 > &v2, T &out)
 
void dot (const std::array< std::complex< T >, 3 > &cv1, const std::array< std::complex< T >, 3 > &cv2, std::complex< T > &out)
 
void dot (const std::array< std::complex< T >, 3 > &cv1, const std::array< T, 3 > &v2, std::complex< T > &out)
 
void dot (const std::array< T, 3 > &v1, const std::array< std::complex< T >, 3 > &cv2, std::complex< T > &out)
 
void ext (const std::array< T, 3 > &v1, const std::array< T, 3 > &v2, std::array< T, 3 > &out)
 
void ext (const std::array< std::complex< T >, 3 > &cv1, const std::array< std::complex< T >, 3 > &cv2, std::array< std::complex< T >, 3 > &out)
 
void ext (const std::array< std::complex< T >, 3 > &cv1, const std::array< T, 3 > &v2, std::array< std::complex< T >, 3 > &out)
 
void ext (const std::array< T, 3 > &v1, const std::array< std::complex< T >, 3 > &cv2, std::array< std::complex< T >, 3 > &out)
 
void abs (const std::array< T, 3 > &v, T &out)
 
void diff (const std::array< T, 3 > &v1, const std::array< T, 3 > &v2, std::array< T, 3 > &out)
 
void diff (const std::array< std::complex< T >, 3 > &cv1, const std::array< std::complex< T >, 3 > &cv2, std::array< std::complex< T >, 3 > &out)
 
void normalize (const std::array< T, 3 > &v, std::array< T, 3 > &out)
 
void add (const std::array< T, 3 > &v1, const std::array< T, 3 > &v2, std::array< T, 3 > &out)
 
void s_mult (const std::array< T, 3 > &v, const T &s, std::array< T, 3 > &out)
 
void s_mult (const std::array< std::complex< T >, 3 > &cv, const std::complex< T > &cs, std::array< std::complex< T >, 3 > &out)
 
void s_mult (const std::array< T, 3 > &v, const std::complex< T > &cs, std::array< std::complex< T >, 3 > &out)
 
void s_mult (const std::array< std::complex< T >, 3 > &cv, const T &s, std::array< std::complex< T >, 3 > &out)
 
void conj (const std::array< std::complex< T >, 3 > &cv, std::array< std::complex< T >, 3 > &out)
 
void snell (const std::array< T, 3 > &vin, const std::array< T, 3 > &normal, std::array< T, 3 > &out)
 
void snell_t (const std::array< T, 3 > &vin, const std::array< T, 3 > &normal, T mu, std::array< T, 3 > &out)
 
void dyad (const std::array< T, 3 > &v1, const std::array< T, 3 > &v2, std::array< std::array< T, 3 >, 3 > &out)
 
void matDiff (const std::array< std::array< T, 3 >, 3 > &m1, const std::array< std::array< T, 3 >, 3 > &m2, std::array< std::array< T, 3 >, 3 > &out)
 
void matVec (const std::array< std::array< T, 3 >, 3 > &m1, const std::array< T, 3 > &v1, std::array< T, 3 > &out)
 
void matVec (const std::array< std::array< T, 3 >, 3 > &m1, const std::array< std::complex< T >, 3 > &cv1, std::array< std::complex< T >, 3 > &out)
 
void matVec4 (const T *m1, const std::array< T, 3 > &v1, std::array< T, 3 > &out, bool vec=false)
 
void invmatVec4 (const T *m1, const std::array< T, 3 > &v1, std::array< T, 3 > &out, bool vec=false)
 
void matRot (const std::array< T, 3 > &rot, const std::array< T, 3 > &v1, const std::array< T, 3 > &cRot, std::array< T, 3 > &out)
 

Detailed Description

template<typename T>
class Utils< T >

Class for basic 3D linear algebra functions.

Note that no function returns. All values are stored inside a variable which is passed by reference to the function.

Member Function Documentation

◆ abs()

template<typename T >
void Utils< T >::abs ( const std::array< T, 3 > &  v,
T &  out 
)
inline

Absolute value.

Calculate absolute value of real valued vector of size 3.

Parameters
vArray of 3 double/float.
outScalar double/float.

◆ add()

template<typename T >
void Utils< T >::add ( const std::array< T, 3 > &  v1,
const std::array< T, 3 > &  v2,
std::array< T, 3 > &  out 
)
inline

Vector addition.

Add two real valued vectors of size 3 element-wise.

Parameters
v1Array of 3 double/float.
v2Array of 3 double/float.
outArray of 3 complex double/float.

◆ conj()

template<typename T >
void Utils< T >::conj ( const std::array< std::complex< T >, 3 > &  cv,
std::array< std::complex< T >, 3 > &  out 
)
inline

Conjugate.

Conjugate complex valued vector of size 3.

Parameters
cvArray of 3 complex double/float.
outArray of 3 complex double/float.

◆ diff() [1/2]

template<typename T >
void Utils< T >::diff ( const std::array< std::complex< T >, 3 > &  cv1,
const std::array< std::complex< T >, 3 > &  cv2,
std::array< std::complex< T >, 3 > &  out 
)
inline

Component-wise vector difference.

Subtract two complex valued vectors of size 3, element-wise.

Parameters
cv1Array of 3 complex double/float.
cv2Array of 3 complex double/float.
outArray of 3 complex double/float.

◆ diff() [2/2]

template<typename T >
void Utils< T >::diff ( const std::array< T, 3 > &  v1,
const std::array< T, 3 > &  v2,
std::array< T, 3 > &  out 
)
inline

Component-wise vector difference.

Subtract two real valued vectors of size 3, element-wise.

Parameters
v1Array of 3 double/float.
v2Array of 3 double/float.
outArray of 3 double/float.

◆ dot() [1/4]

template<typename T >
void Utils< T >::dot ( const std::array< std::complex< T >, 3 > &  cv1,
const std::array< std::complex< T >, 3 > &  cv2,
std::complex< T > &  out 
)
inline

Dot product.

Take the dot (inner) product of two complex valued double/float arrays of size 3.

Parameters
cv1Array of 3 complex double/float.
cv2Array of 3 complex double/float.
outScalar complex double/float.

◆ dot() [2/4]

template<typename T >
void Utils< T >::dot ( const std::array< std::complex< T >, 3 > &  cv1,
const std::array< T, 3 > &  v2,
std::complex< T > &  out 
)
inline

Dot product.

Take the dot (inner) product of one complex valued and one real valued double/float array of size 3.

Parameters
cv1Array of 3 complex double/float.
v2Array of 3 double/float.
outScalar complex double/float.

◆ dot() [3/4]

template<typename T >
void Utils< T >::dot ( const std::array< T, 3 > &  v1,
const std::array< std::complex< T >, 3 > &  cv2,
std::complex< T > &  out 
)
inline

Dot product.

Take the dot (inner) product of one real valued and one complex valued double/float array of size 3.

Parameters
v1Array of 3 double/float.
cv2Array of 3 complex double/float.
outScalar complex double/float.

◆ dot() [4/4]

template<typename T >
void Utils< T >::dot ( const std::array< T, 3 > &  v1,
const std::array< T, 3 > &  v2,
T &  out 
)
inline

Dot product.

Take the dot (inner) product of two real valued arrays of size 3.

Parameters
v1Array of 3 double/float.
v2Array of 3 double/float.
outScalar double/float.

◆ dyad()

template<typename T >
void Utils< T >::dyad ( const std::array< T, 3 > &  v1,
const std::array< T, 3 > &  v2,
std::array< std::array< T, 3 >, 3 > &  out 
)
inline

Dyadic product.

Calculate dyadic product between two real valued double/float vectors of size 3.

Parameters
v1Array of 3 double/float.
v2Array of 3 double/float.
outArray of 3 double/float, nested inside array of size 3.

◆ ext() [1/4]

template<typename T >
void Utils< T >::ext ( const std::array< std::complex< T >, 3 > &  cv1,
const std::array< std::complex< T >, 3 > &  cv2,
std::array< std::complex< T >, 3 > &  out 
)
inline

Cross product.

Take the cross (outer) product of two complex valued double/float arrays of size 3.

Parameters
cv1Array of 3 complex double/float.
cv2Array of 3 complex double/float.
outArray of 3 complex double/float.

◆ ext() [2/4]

template<typename T >
void Utils< T >::ext ( const std::array< std::complex< T >, 3 > &  cv1,
const std::array< T, 3 > &  v2,
std::array< std::complex< T >, 3 > &  out 
)
inline

Cross product.

Take the cross (outer) product of one complex valued and one real valued double/float array of size 3.

Parameters
cv1Array of 3 complex double/float.
v2Array of 3 double/float.
outArray of 3 complex double/float.

◆ ext() [3/4]

template<typename T >
void Utils< T >::ext ( const std::array< T, 3 > &  v1,
const std::array< std::complex< T >, 3 > &  cv2,
std::array< std::complex< T >, 3 > &  out 
)
inline

Cross product.

Take the cross (outer) product of one real valued and one complex valued double/float array of size 3.

Parameters
v1Array of 3 double/float.
cv2Array of 3 complex double/float.
outArray of 3 complex double/float.

◆ ext() [4/4]

template<typename T >
void Utils< T >::ext ( const std::array< T, 3 > &  v1,
const std::array< T, 3 > &  v2,
std::array< T, 3 > &  out 
)
inline

Cross product.

Take the cross (outer) product of two real valued double/float arrays of size 3.

Parameters
v1Array of 3 double/float.
v2Array of 3 double/float.
outArray of 3 double/float.

◆ invmatVec4()

template<typename T >
void Utils< T >::invmatVec4 ( const T *  m1,
const std::array< T, 3 > &  v1,
std::array< T, 3 > &  out,
bool  vec = false 
)
inline

Inverse matrix-vector product.

Multiply the inverse of a real valued 4x4 matrix by a real valued size 3 vector to generate a new size 3 vector. This function is only used for multiplying 3D vectors by a 4D transformation matrix.

Parameters
m1Array of 4 double/float, nested inside array of size 4.
v1Array of 3 double/float.
outArray of 3 double/float.
vecWhether or not to transform v1 as a point or a vector.

◆ matDiff()

template<typename T >
void Utils< T >::matDiff ( const std::array< std::array< T, 3 >, 3 > &  m1,
const std::array< std::array< T, 3 >, 3 > &  m2,
std::array< std::array< T, 3 >, 3 > &  out 
)
inline

Matrix difference, element wise.

Subtract two 3x3 matrices, element wise.

Parameters
m1Array of 3 double/float, nested inside array of size 3.
m2Array of 3 double/float, nested inside array of size 3.
outArray of 3 double/float, nested inside array of size 3.

◆ matRot()

template<typename T >
void Utils< T >::matRot ( const std::array< T, 3 > &  rot,
const std::array< T, 3 > &  v1,
const std::array< T, 3 > &  cRot,
std::array< T, 3 > &  out 
)
inline

Manual vector rotation.

Rotate a real valued size 3 vector without defining a transformation matrix.

Parameters
rotArray of 3 double/float, containing rotation angles.
v1Array of 3 double/float.
cRotArray of 3, center of rotation.
outArray of 3 double/float.

◆ matVec() [1/2]

template<typename T >
void Utils< T >::matVec ( const std::array< std::array< T, 3 >, 3 > &  m1,
const std::array< std::complex< T >, 3 > &  cv1,
std::array< std::complex< T >, 3 > &  out 
)
inline

Matrix-vector product.

Multiply a real valued 3x3 matrix and a complex valued size 3 vector to generate a new complex valued size 3 vector.

Parameters
m1Array of 3 double/float, nested inside array of size 3.
cv1Array of 3 complex double/float.
outArray of 3 complex double/float.

◆ matVec() [2/2]

template<typename T >
void Utils< T >::matVec ( const std::array< std::array< T, 3 >, 3 > &  m1,
const std::array< T, 3 > &  v1,
std::array< T, 3 > &  out 
)
inline

Matrix-vector product.

Multiply a real valued 3x3 matrix and a real valued size 3 vector to generate a new real valued size 3 vector.

Parameters
m1Array of 3 double/float, nested inside array of size 3.
v1Array of 3 double/float.
outArray of 3 double/float.

◆ matVec4()

template<typename T >
void Utils< T >::matVec4 ( const T *  m1,
const std::array< T, 3 > &  v1,
std::array< T, 3 > &  out,
bool  vec = false 
)
inline

Matrix-vector product.

Multiply a real valued 4x4 matrix and a real valued size 3 vector to generate a new real valued size 3 vector. This function is only used for multiplying 3D vectors by a 4D transformation matrix.

Parameters
m1Array of 4 double/float, nested inside array of size 4.
v1Array of 3 double/float.
outArray of 3 double/float.
vecWhether or not to transform v1 as a point or a vector.

◆ normalize()

template<typename T >
void Utils< T >::normalize ( const std::array< T, 3 > &  v,
std::array< T, 3 > &  out 
)
inline

Normalize vector.

Normalize real valued vector of size 3.

Parameters
vArray of 3 double/float.
outArray of 3 double/float.

◆ s_mult() [1/4]

template<typename T >
void Utils< T >::s_mult ( const std::array< std::complex< T >, 3 > &  cv,
const std::complex< T > &  cs,
std::array< std::complex< T >, 3 > &  out 
)
inline

Scalar multiplication.

Multiply complex valued vector of size 3 by complex scalar, element-wise.

Parameters
cvArray of 3 complex double/float.
csScalar complex double/float.
outArray of 3 complex double/float.

◆ s_mult() [2/4]

template<typename T >
void Utils< T >::s_mult ( const std::array< std::complex< T >, 3 > &  cv,
const T &  s,
std::array< std::complex< T >, 3 > &  out 
)
inline

Scalar multiplication.

Multiply complex valued vector of size 3 by real scalar, element-wise.

Parameters
cvArray of 3 complex double/float.
sScalar double/float.
outArray of 3 complex double/float.

◆ s_mult() [3/4]

template<typename T >
void Utils< T >::s_mult ( const std::array< T, 3 > &  v,
const std::complex< T > &  cs,
std::array< std::complex< T >, 3 > &  out 
)
inline

Scalar multiplication.

Multiply real valued vector of size 3 by complex scalar, element-wise.

Parameters
vArray of 3 double/float.
csScalar complex double/float.
outArray of 3 complex double/float.

◆ s_mult() [4/4]

template<typename T >
void Utils< T >::s_mult ( const std::array< T, 3 > &  v,
const T &  s,
std::array< T, 3 > &  out 
)
inline

Scalar multiplication.

Multiply real valued vector of size 3 by real scalar, element-wise.

Parameters
vArray of 3 double/float.
sScalar double/float.
outArray of 3 double/float.

◆ snell()

template<typename T >
void Utils< T >::snell ( const std::array< T, 3 > &  vin,
const std::array< T, 3 > &  normal,
std::array< T, 3 > &  out 
)
inline

Snell's law for reflection.

Calculate reflected direction vector from incoming direction and normal vector.

Parameters
vinArray of 3 double/float, incoming direction vector.
normalArray of 3 double/float, normal vector of surface.
outArray of 3 double/float.

◆ snell_t()

template<typename T >
void Utils< T >::snell_t ( const std::array< T, 3 > &  vin,
const std::array< T, 3 > &  normal,
mu,
std::array< T, 3 > &  out 
)
inline

Snell's law refraction.

Calculate refracted direction vector from incoming direction and normal vector.

Parameters
vinArray of 3 double/float, incoming direction vector.
normalArray of 3 double/float, normal vector of surface.
muRatio of n1 to n2.
outArray of 3 double/float.

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