Panda3D
|
This is a 3-by-3 transform matrix. More...
#include "lmatrix.h"
Classes | |
class | CRow |
class | Row |
Public Types | |
typedef const float * | const_iterator |
typedef const float * | iterator |
Public Member Functions | |
LMatrix3f (const LMatrix3f &other) | |
LMatrix3f (float e00, float e01, float e02, float e10, float e11, float e12, float e20, float e21, float e22) | |
LMatrix3f (const EMatrix3 &m) | |
size_t | add_hash (size_t hash) const |
Adds the vector into the running hash. | |
size_t | add_hash (size_t hash, float threshold) const |
Adds the vector into the running hash. | |
bool | almost_equal (const LMatrix3f &other, float threshold) const |
Returns true if two matrices are memberwise equal within a specified tolerance. | |
bool | almost_equal (const LMatrix3f &other) const |
Returns true if two matrices are memberwise equal within a default tolerance based on the numeric type. | |
const_iterator | begin () const |
Returns an iterator that may be used to traverse the elements of the matrix, STL-style. | |
iterator | begin () |
Returns an iterator that may be used to traverse the elements of the matrix, STL-style. | |
int | compare_to (const LMatrix3f &other, float threshold) const |
Sorts matrices lexicographically, componentwise. | |
int | compare_to (const LMatrix3f &other) const |
This flavor of compare_to uses a default threshold value based on the numeric type. | |
float | determinant () const |
Returns the determinant of the matrix. | |
const_iterator | end () const |
Returns an iterator that may be used to traverse the elements of the matrix, STL-style. | |
iterator | end () |
Returns an iterator that may be used to traverse the elements of the matrix, STL-style. | |
void | fill (float fill_value) |
Sets each element of the matrix to the indicated fill_value. | |
void | generate_hash (ChecksumHashGenerator &hashgen) const |
Adds the vector to the indicated hash generator. | |
void | generate_hash (ChecksumHashGenerator &hashgen, float threshold) const |
Adds the vector to the indicated hash generator. | |
float | get_cell (int row, int col) const |
Returns a particular element of the matrix. | |
LVecBase3f | get_col (int col) const |
Returns the indicated column of the matrix as a three-component vector. | |
LVecBase2f | get_col2 (int col) const |
Returns the indicated column of the matrix as a two-component vector, ignoring the last row. | |
const float * | get_data () const |
Returns the address of the first of the nine data elements in the matrix. | |
size_t | get_hash () const |
Returns a suitable hash for phash_map. | |
size_t | get_hash (float threshold) const |
Returns a suitable hash for phash_map. | |
int | get_num_components () const |
Returns the number of elements in the matrix, nine. | |
void | get_row (LVecBase3f &result_vec, int row) const |
Stores the indicated row of the matrix as a three-component vector. | |
LVecBase3f | get_row (int row) const |
Returns the indicated row of the matrix as a three-component vector. | |
LVecBase2f | get_row2 (int row) const |
Returns the indicated row of the matrix as a two-component vector, ignoring the last column. | |
bool | invert_from (const LMatrix3f &other) |
Computes the inverse of the other matrix, and stores the result in this matrix. | |
bool | invert_in_place () |
Inverts the current matrix. | |
bool | invert_transpose_from (const LMatrix3f &other) |
Simultaneously computes the inverse of the indicated matrix, and then the transpose of that inverse. | |
bool | invert_transpose_from (const LMatrix4f &other) |
Simultaneously computes the inverse of the indicated matrix, and then the transpose of that inverse. | |
bool | is_nan () const |
Returns true if any component of the matrix is not-a-number, false otherwise. | |
MAKE_SEQ (get_col2s, size, get_col2) | |
MAKE_SEQ (get_row2s, size, get_row2) | |
MAKE_SEQ (get_rows, size, get_row) | |
MAKE_SEQ (get_cols, size, get_col) | |
void | multiply (const LMatrix3f &other1, const LMatrix3f &other2) |
bool | operator!= (const LMatrix3f &other) const |
float & | operator() (int row, int col) |
float | operator() (int row, int col) const |
LMatrix3f | operator* (const LMatrix3f &other) const |
LMatrix3f | operator* (float scalar) const |
LMatrix3f & | operator*= (const LMatrix3f &other) |
LMatrix3f & | operator*= (float scalar) |
Performs a memberwise scale. | |
LMatrix3f & | operator+= (const LMatrix3f &other) |
Performs a memberwise addition between two matrices. | |
LMatrix3f & | operator-= (const LMatrix3f &other) |
Performs a memberwise subtraction between two matrices. | |
LMatrix3f | operator/ (float scalar) const |
LMatrix3f & | operator/= (float scalar) |
Performs a memberwise scale. | |
bool | operator< (const LMatrix3f &other) const |
This performs a lexicographical comparison. | |
LMatrix3f & | operator= (float fill_value) |
LMatrix3f & | operator= (const LMatrix3f &other) |
bool | operator== (const LMatrix3f &other) const |
CRow | operator[] (int i) const |
Row | operator[] (int i) |
void | output (ostream &out) const |
void | read_datagram (DatagramIterator &source) |
Reads the matrix from the Datagram using get_stdfloat(). | |
void | read_datagram_fixed (DatagramIterator &scan) |
Reads the matrix from the Datagram using get_float32() or get_float64(). | |
void | set (float e00, float e01, float e02, float e10, float e11, float e12, float e20, float e21, float e22) |
void | set_cell (int row, int col, float value) |
Changes a particular element of the matrix. | |
void | set_col (int col, const LVecBase3f &v) |
Replaces the indicated column of the matrix from a three-component vector. | |
void | set_col (int col, const LVecBase2f &v) |
Replaces the indicated column of the matrix from a two-component vector, ignoring the last row. | |
void | set_rotate_mat (float angle) |
Fills mat with a matrix that rotates by the given angle in degrees counterclockwise. | |
void | set_rotate_mat (float angle, const LVecBase3f &axis, CoordinateSystem cs=CS_default) |
Fills mat with a matrix that rotates by the given angle in degrees counterclockwise about the indicated vector. | |
void | set_rotate_mat_normaxis (float angle, const LVecBase3f &axis, CoordinateSystem cs=CS_default) |
Fills mat with a matrix that rotates by the given angle in degrees counterclockwise about the indicated vector. | |
void | set_row (int row, const LVecBase2f &v) |
Replaces the indicated row of the matrix from a two-component vector, ignoring the last column. | |
void | set_row (int row, const LVecBase3f &v) |
Replaces the indicated row of the matrix from a three-component vector. | |
void | set_scale_mat (const LVecBase2f &scale) |
Fills mat with a matrix that applies the indicated scale in each of the two axes. | |
void | set_scale_mat (const LVecBase3f &scale) |
Fills mat with a matrix that applies the indicated scale in each of the three axes. | |
void | set_scale_shear_mat (const LVecBase3f &scale, const LVecBase3f &shear, CoordinateSystem cs=CS_default) |
Fills mat with a matrix that applies the indicated scale and shear. | |
void | set_shear_mat (const LVecBase3f &shear, CoordinateSystem cs=CS_default) |
Fills mat with a matrix that applies the indicated shear in each of the three planes. | |
void | set_translate_mat (const LVecBase2f &trans) |
Fills mat with a matrix that applies the indicated translation. | |
void | transpose_from (const LMatrix3f &other) |
void | transpose_in_place () |
typedef | UNALIGNED_LINMATH_MATRIX (float, 3, 3) EMatrix3 |
void | write (ostream &out, int indent_level=0) const |
void | write_datagram (Datagram &destination) const |
Writes the matrix to the Datagram using add_stdfloat(). | |
void | write_datagram_fixed (Datagram &destination) const |
Writes the matrix to the Datagram using add_float32() or add_float64(), depending on the type of floats in the matrix, regardless of the setting of Datagram::set_stdfloat_double(). | |
LVecBase3f | xform (const LVecBase3f &v) const |
3-component vector or point times matrix. | |
void | xform_in_place (LVecBase3f &v) const |
3-component vector or point times matrix. | |
LVecBase2f | xform_point (const LVecBase2f &v) const |
The matrix transforms a 2-component point (including translation component) and returns the result. | |
void | xform_point_in_place (LVecBase2f &v) const |
The matrix transforms a 2-component point (including translation component). | |
LVecBase3f | xform_vec (const LVecBase3f &v) const |
The matrix transforms a 3-component vector and returns the result. | |
LVecBase2f | xform_vec (const LVecBase2f &v) const |
The matrix transforms a 2-component vector (without translation component) and returns the result. | |
LVecBase3f | xform_vec_general (const LVecBase3f &v) const |
The matrix transforms a 3-component vector (without translation component) and returns the result, as a fully general operation. | |
void | xform_vec_general_in_place (LVecBase3f &v) const |
The matrix transforms a 3-component vector (without translation component), as a fully general operation. | |
void | xform_vec_in_place (LVecBase3f &v) const |
The matrix transforms a 3-component vector. | |
void | xform_vec_in_place (LVecBase2f &v) const |
The matrix transforms a 2-component vector (without translation component). | |
Static Public Member Functions | |
static const LMatrix3f & | convert_mat (CoordinateSystem from, CoordinateSystem to) |
Returns a matrix that transforms from the indicated coordinate system to the indicated coordinate system. | |
static TypeHandle | get_class_type () |
static const LMatrix3f & | ident_mat () |
Returns an identity matrix. | |
static void | init_type () |
static LMatrix3f | rotate_mat (float angle, const LVecBase3f &axis, CoordinateSystem cs=CS_default) |
Returns a matrix that rotates by the given angle in degrees counterclockwise about the indicated vector. | |
static LMatrix3f | rotate_mat (float angle) |
Returns a matrix that rotates by the given angle in degrees counterclockwise. | |
static LMatrix3f | rotate_mat_normaxis (float angle, const LVecBase3f &axis, CoordinateSystem cs=CS_default) |
Returns a matrix that rotates by the given angle in degrees counterclockwise about the indicated vector. | |
static LMatrix3f | scale_mat (const LVecBase3f &scale) |
Returns a matrix that applies the indicated scale in each of the three axes. | |
static LMatrix3f | scale_mat (float sx, float sy, float sz) |
Returns a matrix that applies the indicated scale in each of the three axes. | |
static LMatrix3f | scale_mat (const LVecBase2f &scale) |
Returns a matrix that applies the indicated scale in each of the two axes. | |
static LMatrix3f | scale_mat (float sx, float sy) |
Returns a matrix that applies the indicated scale in each of the two axes. | |
static LMatrix3f | scale_shear_mat (const LVecBase3f &scale, const LVecBase3f &shear, CoordinateSystem cs=CS_default) |
Returns a matrix that applies the indicated scale and shear. | |
static LMatrix3f | scale_shear_mat (float sx, float sy, float sz, float shxy, float shxz, float shyz, CoordinateSystem cs=CS_default) |
Returns a matrix that applies the indicated scale and shear. | |
static LMatrix3f | shear_mat (float shxy, float shxz, float shyz, CoordinateSystem cs=CS_default) |
Returns a matrix that applies the indicated shear in each of the three planes. | |
static LMatrix3f | shear_mat (const LVecBase3f &shear, CoordinateSystem cs=CS_default) |
Returns a matrix that applies the indicated shear in each of the three planes. | |
static int | size () |
Returns 3: the number of rows of a LMatrix3. | |
static LMatrix3f | translate_mat (const LVecBase2f &trans) |
Returns a matrix that applies the indicated translation. | |
static LMatrix3f | translate_mat (float tx, float ty) |
Returns a matrix that applies the indicated translation. | |
Public Attributes | |
EMatrix3 | _m |
This is a 3-by-3 transform matrix.
It typically will represent either a rotation-and-scale (no translation) matrix in 3-d, or a full affine matrix (rotation, scale, translation) in 2-d, e.g. for a texture matrix.
size_t LMatrix3f::add_hash | ( | size_t | hash | ) | const [inline] |
size_t LMatrix3f::add_hash | ( | size_t | hash, |
float | threshold | ||
) | const [inline] |
bool LMatrix3f::almost_equal | ( | const LMatrix3f & | other, |
float | threshold | ||
) | const |
Returns true if two matrices are memberwise equal within a specified tolerance.
Definition at line 413 of file lmatrix.cxx.
Referenced by FFTCompressor::write_hprs().
bool LMatrix3f::almost_equal | ( | const LMatrix3f & | other | ) | const [inline] |
LMatrix3f::iterator LMatrix3f::begin | ( | ) | [inline] |
LMatrix3f::const_iterator LMatrix3f::begin | ( | ) | const [inline] |
int LMatrix3f::compare_to | ( | const LMatrix3f & | other | ) | const [inline] |
This flavor of compare_to uses a default threshold value based on the numeric type.
int LMatrix3f::compare_to | ( | const LMatrix3f & | other, |
float | threshold | ||
) | const |
Sorts matrices lexicographically, componentwise.
Returns a number less than 0 if this matrix sorts before the other one, greater than zero if it sorts after, 0 if they are equivalent (within the indicated tolerance).
Definition at line 281 of file lmatrix.cxx.
const LMatrix3f & LMatrix3f::convert_mat | ( | CoordinateSystem | from, |
CoordinateSystem | to | ||
) | [static] |
Returns a matrix that transforms from the indicated coordinate system to the indicated coordinate system.
Definition at line 194 of file lmatrix.cxx.
float LMatrix3f::determinant | ( | ) | const [inline] |
LMatrix3f::iterator LMatrix3f::end | ( | ) | [inline] |
LMatrix3f::const_iterator LMatrix3f::end | ( | ) | const [inline] |
void LMatrix3f::fill | ( | float | fill_value | ) |
Sets each element of the matrix to the indicated fill_value.
This is of questionable value, but is sometimes useful when initializing to zero.
Definition at line 260 of file lmatrix.cxx.
void LMatrix3f::generate_hash | ( | ChecksumHashGenerator & | hashgen | ) | const [inline] |
void LMatrix3f::generate_hash | ( | ChecksumHashGenerator & | hashgen, |
float | threshold | ||
) | const |
Adds the vector to the indicated hash generator.
Definition at line 479 of file lmatrix.cxx.
float LMatrix3f::get_cell | ( | int | row, |
int | col | ||
) | const [inline] |
LVecBase3f LMatrix3f::get_col | ( | int | col | ) | const [inline] |
LVecBase2f LMatrix3f::get_col2 | ( | int | col | ) | const [inline] |
const float * LMatrix3f::get_data | ( | ) | const [inline] |
Returns the address of the first of the nine data elements in the matrix.
The remaining elements occupy the next eight positions in row-major order.
Definition at line 3077 of file lmatrix.h.
Referenced by PhysxManager::mat3_to_nxMat33().
size_t LMatrix3f::get_hash | ( | ) | const [inline] |
size_t LMatrix3f::get_hash | ( | float | threshold | ) | const [inline] |
int LMatrix3f::get_num_components | ( | ) | const [inline] |
void LMatrix3f::get_row | ( | LVecBase3f & | result_vec, |
int | row | ||
) | const [inline] |
LVecBase3f LMatrix3f::get_row | ( | int | row | ) | const [inline] |
LVecBase2f LMatrix3f::get_row2 | ( | int | row | ) | const [inline] |
const LMatrix3f & LMatrix3f::ident_mat | ( | ) | [inline, static] |
Returns an identity matrix.
This function definition must appear first, since some inline functions below take advantage of it.
Definition at line 2755 of file lmatrix.h.
Referenced by PhysxActor::get_c_mass_global_orientation(), PhysxActor::get_c_mass_local_orientation(), PhysxActor::get_global_inertia_tensor(), PhysxActor::get_global_inertia_tensor_inverse(), and TransformState::get_mat3().
bool LMatrix3f::invert_from | ( | const LMatrix3f & | other | ) | [inline] |
Computes the inverse of the other matrix, and stores the result in this matrix.
This is a fully general operation and makes no assumptions about the type of transform represented by the matrix.
The other matrix must be a different object than this matrix. However, if you need to invert a matrix in place, see invert_in_place.
The return value is true if the matrix was successfully inverted, false if there was a singularity.
bool LMatrix3f::invert_in_place | ( | ) | [inline] |
bool LMatrix3f::invert_transpose_from | ( | const LMatrix3f & | other | ) | [inline] |
bool LMatrix3f::invert_transpose_from | ( | const LMatrix4f & | other | ) | [inline] |
bool LMatrix3f::is_nan | ( | ) | const [inline] |
Returns true if any component of the matrix is not-a-number, false otherwise.
Definition at line 3039 of file lmatrix.h.
Referenced by PhysxBounds3::bounds_of_obb(), PhysxUtilLib::box_box_intersect(), PhysxUtilLib::point_obb_sqr_dist(), PhysxUtilLib::ray_obb_intersect(), PhysxUtilLib::segment_obb_intersect(), PhysxBox::set_rot(), and PhysxBounds3::transform().
LMatrix3f & LMatrix3f::operator*= | ( | float | scalar | ) | [inline] |
LMatrix3f & LMatrix3f::operator/= | ( | float | scalar | ) | [inline] |
bool LMatrix3f::operator< | ( | const LMatrix3f & | other | ) | const [inline] |
This performs a lexicographical comparison.
It's of questionable mathematical meaning, but sometimes has a practical purpose for sorting unique vectors, especially in an STL container. Also see compare_to().
void LMatrix3f::read_datagram | ( | DatagramIterator & | source | ) |
Reads the matrix from the Datagram using get_stdfloat().
Definition at line 554 of file lmatrix.cxx.
void LMatrix3f::read_datagram_fixed | ( | DatagramIterator & | scan | ) |
Reads the matrix from the Datagram using get_float32() or get_float64().
Definition at line 519 of file lmatrix.cxx.
LMatrix3f LMatrix3f::rotate_mat | ( | float | angle | ) | [inline, static] |
Returns a matrix that rotates by the given angle in degrees counterclockwise.
Definition at line 3937 of file lmatrix.h.
Referenced by PSphereLens::do_extrude().
LMatrix3f LMatrix3f::rotate_mat | ( | float | angle, |
const LVecBase3f & | axis, | ||
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
LMatrix3f LMatrix3f::rotate_mat_normaxis | ( | float | angle, |
const LVecBase3f & | axis, | ||
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
LMatrix3f LMatrix3f::scale_mat | ( | const LVecBase2f & | scale | ) | [inline, static] |
LMatrix3f LMatrix3f::scale_mat | ( | const LVecBase3f & | scale | ) | [inline, static] |
LMatrix3f LMatrix3f::scale_mat | ( | float | sx, |
float | sy, | ||
float | sz | ||
) | [inline, static] |
LMatrix3f LMatrix3f::scale_mat | ( | float | sx, |
float | sy | ||
) | [inline, static] |
LMatrix3f LMatrix3f::scale_shear_mat | ( | const LVecBase3f & | scale, |
const LVecBase3f & | shear, | ||
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
LMatrix3f LMatrix3f::scale_shear_mat | ( | float | sx, |
float | sy, | ||
float | sz, | ||
float | shxy, | ||
float | shxz, | ||
float | shyz, | ||
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
void LMatrix3f::set_cell | ( | int | row, |
int | col, | ||
float | value | ||
) | [inline] |
void LMatrix3f::set_col | ( | int | col, |
const LVecBase2f & | v | ||
) | [inline] |
void LMatrix3f::set_col | ( | int | col, |
const LVecBase3f & | v | ||
) | [inline] |
void LMatrix3f::set_rotate_mat | ( | float | angle | ) | [inline] |
void LMatrix3f::set_rotate_mat | ( | float | angle, |
const LVecBase3f & | axis, | ||
CoordinateSystem | cs = CS_default |
||
) |
Fills mat with a matrix that rotates by the given angle in degrees counterclockwise about the indicated vector.
Definition at line 301 of file lmatrix.cxx.
void LMatrix3f::set_rotate_mat_normaxis | ( | float | angle, |
const LVecBase3f & | axis, | ||
CoordinateSystem | cs = CS_default |
||
) |
Fills mat with a matrix that rotates by the given angle in degrees counterclockwise about the indicated vector.
Assumes axis has been normalized.
Definition at line 362 of file lmatrix.cxx.
void LMatrix3f::set_row | ( | int | row, |
const LVecBase3f & | v | ||
) | [inline] |
void LMatrix3f::set_row | ( | int | row, |
const LVecBase2f & | v | ||
) | [inline] |
void LMatrix3f::set_scale_mat | ( | const LVecBase2f & | scale | ) | [inline] |
void LMatrix3f::set_scale_mat | ( | const LVecBase3f & | scale | ) | [inline] |
void LMatrix3f::set_scale_shear_mat | ( | const LVecBase3f & | scale, |
const LVecBase3f & | shear, | ||
CoordinateSystem | cs = CS_default |
||
) |
Fills mat with a matrix that applies the indicated scale and shear.
Definition at line 115 of file lmatrix.cxx.
void LMatrix3f::set_shear_mat | ( | const LVecBase3f & | shear, |
CoordinateSystem | cs = CS_default |
||
) | [inline] |
void LMatrix3f::set_translate_mat | ( | const LVecBase2f & | trans | ) | [inline] |
LMatrix3f LMatrix3f::shear_mat | ( | float | shxy, |
float | shxz, | ||
float | shyz, | ||
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
LMatrix3f LMatrix3f::shear_mat | ( | const LVecBase3f & | shear, |
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
int LMatrix3f::size | ( | ) | [inline, static] |
LMatrix3f LMatrix3f::translate_mat | ( | float | tx, |
float | ty | ||
) | [inline, static] |
LMatrix3f LMatrix3f::translate_mat | ( | const LVecBase2f & | trans | ) | [inline, static] |
void LMatrix3f::write_datagram | ( | Datagram & | destination | ) | const |
Writes the matrix to the Datagram using add_stdfloat().
This is appropriate when you want to write the matrix using the standard width setting, especially when you are writing a bam file.
Definition at line 540 of file lmatrix.cxx.
void LMatrix3f::write_datagram_fixed | ( | Datagram & | destination | ) | const |
Writes the matrix to the Datagram using add_float32() or add_float64(), depending on the type of floats in the matrix, regardless of the setting of Datagram::set_stdfloat_double().
This is appropriate when you want to write a fixed-width value to the datagram, especially when you are not writing a bam file.
Definition at line 500 of file lmatrix.cxx.
LVecBase3f LMatrix3f::xform | ( | const LVecBase3f & | v | ) | const [inline] |
void LMatrix3f::xform_in_place | ( | LVecBase3f & | v | ) | const [inline] |
LVecBase2f LMatrix3f::xform_point | ( | const LVecBase2f & | v | ) | const [inline] |
void LMatrix3f::xform_point_in_place | ( | LVecBase2f & | v | ) | const [inline] |
LVecBase2f LMatrix3f::xform_vec | ( | const LVecBase2f & | v | ) | const [inline] |
LVecBase3f LMatrix3f::xform_vec | ( | const LVecBase3f & | v | ) | const [inline] |
LVecBase3f LMatrix3f::xform_vec_general | ( | const LVecBase3f & | v | ) | const [inline] |
void LMatrix3f::xform_vec_general_in_place | ( | LVecBase3f & | v | ) | const [inline] |
void LMatrix3f::xform_vec_in_place | ( | LVecBase2f & | v | ) | const [inline] |
void LMatrix3f::xform_vec_in_place | ( | LVecBase3f & | v | ) | const [inline] |