Panda3D
|
This is a 3-by-3 transform matrix. More...
#include "lmatrix.h"
Classes | |
class | CRow |
class | Row |
Public Types | |
typedef const double * | const_iterator |
typedef const double * | iterator |
Public Member Functions | |
LMatrix3d (const LMatrix3d &other) | |
LMatrix3d (double e00, double e01, double e02, double e10, double e11, double e12, double e20, double e21, double e22) | |
LMatrix3d (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, double threshold) const |
Adds the vector into the running hash. | |
bool | almost_equal (const LMatrix3d &other, double threshold) const |
Returns true if two matrices are memberwise equal within a specified tolerance. | |
bool | almost_equal (const LMatrix3d &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 LMatrix3d &other, double threshold) const |
Sorts matrices lexicographically, componentwise. | |
int | compare_to (const LMatrix3d &other) const |
This flavor of compare_to uses a default threshold value based on the numeric type. | |
double | 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 (double 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, double threshold) const |
Adds the vector to the indicated hash generator. | |
double | get_cell (int row, int col) const |
Returns a particular element of the matrix. | |
LVecBase3d | get_col (int col) const |
Returns the indicated column of the matrix as a three-component vector. | |
LVecBase2d | get_col2 (int col) const |
Returns the indicated column of the matrix as a two-component vector, ignoring the last row. | |
const double * | 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 (double 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 (LVecBase3d &result_vec, int row) const |
Stores the indicated row of the matrix as a three-component vector. | |
LVecBase3d | get_row (int row) const |
Returns the indicated row of the matrix as a three-component vector. | |
LVecBase2d | 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 LMatrix3d &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 LMatrix3d &other) |
Simultaneously computes the inverse of the indicated matrix, and then the transpose of that inverse. | |
bool | invert_transpose_from (const LMatrix4d &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 LMatrix3d &other1, const LMatrix3d &other2) |
bool | operator!= (const LMatrix3d &other) const |
double & | operator() (int row, int col) |
double | operator() (int row, int col) const |
LMatrix3d | operator* (const LMatrix3d &other) const |
LMatrix3d | operator* (double scalar) const |
LMatrix3d & | operator*= (const LMatrix3d &other) |
LMatrix3d & | operator*= (double scalar) |
Performs a memberwise scale. | |
LMatrix3d & | operator+= (const LMatrix3d &other) |
Performs a memberwise addition between two matrices. | |
LMatrix3d & | operator-= (const LMatrix3d &other) |
Performs a memberwise subtraction between two matrices. | |
LMatrix3d | operator/ (double scalar) const |
LMatrix3d & | operator/= (double scalar) |
Performs a memberwise scale. | |
bool | operator< (const LMatrix3d &other) const |
This performs a lexicographical comparison. | |
LMatrix3d & | operator= (double fill_value) |
LMatrix3d & | operator= (const LMatrix3d &other) |
bool | operator== (const LMatrix3d &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 (double e00, double e01, double e02, double e10, double e11, double e12, double e20, double e21, double e22) |
void | set_cell (int row, int col, double value) |
Changes a particular element of the matrix. | |
void | set_col (int col, const LVecBase3d &v) |
Replaces the indicated column of the matrix from a three-component vector. | |
void | set_col (int col, const LVecBase2d &v) |
Replaces the indicated column of the matrix from a two-component vector, ignoring the last row. | |
void | set_rotate_mat (double angle) |
Fills mat with a matrix that rotates by the given angle in degrees counterclockwise. | |
void | set_rotate_mat (double angle, const LVecBase3d &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 (double angle, const LVecBase3d &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 LVecBase2d &v) |
Replaces the indicated row of the matrix from a two-component vector, ignoring the last column. | |
void | set_row (int row, const LVecBase3d &v) |
Replaces the indicated row of the matrix from a three-component vector. | |
void | set_scale_mat (const LVecBase2d &scale) |
Fills mat with a matrix that applies the indicated scale in each of the two axes. | |
void | set_scale_mat (const LVecBase3d &scale) |
Fills mat with a matrix that applies the indicated scale in each of the three axes. | |
void | set_scale_shear_mat (const LVecBase3d &scale, const LVecBase3d &shear, CoordinateSystem cs=CS_default) |
Fills mat with a matrix that applies the indicated scale and shear. | |
void | set_shear_mat (const LVecBase3d &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 LVecBase2d &trans) |
Fills mat with a matrix that applies the indicated translation. | |
void | transpose_from (const LMatrix3d &other) |
void | transpose_in_place () |
typedef | UNALIGNED_LINMATH_MATRIX (double, 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(). | |
LVecBase3d | xform (const LVecBase3d &v) const |
3-component vector or point times matrix. | |
void | xform_in_place (LVecBase3d &v) const |
3-component vector or point times matrix. | |
LVecBase2d | xform_point (const LVecBase2d &v) const |
The matrix transforms a 2-component point (including translation component) and returns the result. | |
void | xform_point_in_place (LVecBase2d &v) const |
The matrix transforms a 2-component point (including translation component). | |
LVecBase3d | xform_vec (const LVecBase3d &v) const |
The matrix transforms a 3-component vector and returns the result. | |
LVecBase2d | xform_vec (const LVecBase2d &v) const |
The matrix transforms a 2-component vector (without translation component) and returns the result. | |
LVecBase3d | xform_vec_general (const LVecBase3d &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 (LVecBase3d &v) const |
The matrix transforms a 3-component vector (without translation component), as a fully general operation. | |
void | xform_vec_in_place (LVecBase3d &v) const |
The matrix transforms a 3-component vector. | |
void | xform_vec_in_place (LVecBase2d &v) const |
The matrix transforms a 2-component vector (without translation component). | |
Static Public Member Functions | |
static const LMatrix3d & | 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 LMatrix3d & | ident_mat () |
Returns an identity matrix. | |
static void | init_type () |
static LMatrix3d | rotate_mat (double angle, const LVecBase3d &axis, CoordinateSystem cs=CS_default) |
Returns a matrix that rotates by the given angle in degrees counterclockwise about the indicated vector. | |
static LMatrix3d | rotate_mat (double angle) |
Returns a matrix that rotates by the given angle in degrees counterclockwise. | |
static LMatrix3d | rotate_mat_normaxis (double angle, const LVecBase3d &axis, CoordinateSystem cs=CS_default) |
Returns a matrix that rotates by the given angle in degrees counterclockwise about the indicated vector. | |
static LMatrix3d | scale_mat (const LVecBase3d &scale) |
Returns a matrix that applies the indicated scale in each of the three axes. | |
static LMatrix3d | scale_mat (double sx, double sy, double sz) |
Returns a matrix that applies the indicated scale in each of the three axes. | |
static LMatrix3d | scale_mat (const LVecBase2d &scale) |
Returns a matrix that applies the indicated scale in each of the two axes. | |
static LMatrix3d | scale_mat (double sx, double sy) |
Returns a matrix that applies the indicated scale in each of the two axes. | |
static LMatrix3d | scale_shear_mat (const LVecBase3d &scale, const LVecBase3d &shear, CoordinateSystem cs=CS_default) |
Returns a matrix that applies the indicated scale and shear. | |
static LMatrix3d | scale_shear_mat (double sx, double sy, double sz, double shxy, double shxz, double shyz, CoordinateSystem cs=CS_default) |
Returns a matrix that applies the indicated scale and shear. | |
static LMatrix3d | shear_mat (double shxy, double shxz, double shyz, CoordinateSystem cs=CS_default) |
Returns a matrix that applies the indicated shear in each of the three planes. | |
static LMatrix3d | shear_mat (const LVecBase3d &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 LMatrix3d | translate_mat (const LVecBase2d &trans) |
Returns a matrix that applies the indicated translation. | |
static LMatrix3d | translate_mat (double tx, double 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 LMatrix3d::add_hash | ( | size_t | hash | ) | const [inline] |
size_t LMatrix3d::add_hash | ( | size_t | hash, |
double | threshold | ||
) | const [inline] |
bool LMatrix3d::almost_equal | ( | const LMatrix3d & | other, |
double | threshold | ||
) | const |
Returns true if two matrices are memberwise equal within a specified tolerance.
Definition at line 1585 of file lmatrix.cxx.
Referenced by TextureReference::is_equivalent().
bool LMatrix3d::almost_equal | ( | const LMatrix3d & | other | ) | const [inline] |
LMatrix3d::iterator LMatrix3d::begin | ( | ) | [inline] |
LMatrix3d::const_iterator LMatrix3d::begin | ( | ) | const [inline] |
int LMatrix3d::compare_to | ( | const LMatrix3d & | other | ) | const [inline] |
This flavor of compare_to uses a default threshold value based on the numeric type.
int LMatrix3d::compare_to | ( | const LMatrix3d & | other, |
double | 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 1453 of file lmatrix.cxx.
const LMatrix3d & LMatrix3d::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 1366 of file lmatrix.cxx.
double LMatrix3d::determinant | ( | ) | const [inline] |
LMatrix3d::iterator LMatrix3d::end | ( | ) | [inline] |
LMatrix3d::const_iterator LMatrix3d::end | ( | ) | const [inline] |
void LMatrix3d::fill | ( | double | 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 1432 of file lmatrix.cxx.
void LMatrix3d::generate_hash | ( | ChecksumHashGenerator & | hashgen | ) | const [inline] |
void LMatrix3d::generate_hash | ( | ChecksumHashGenerator & | hashgen, |
double | threshold | ||
) | const |
Adds the vector to the indicated hash generator.
Definition at line 1651 of file lmatrix.cxx.
double LMatrix3d::get_cell | ( | int | row, |
int | col | ||
) | const [inline] |
LVecBase3d LMatrix3d::get_col | ( | int | col | ) | const [inline] |
LVecBase2d LMatrix3d::get_col2 | ( | int | col | ) | const [inline] |
const double * LMatrix3d::get_data | ( | ) | const [inline] |
size_t LMatrix3d::get_hash | ( | ) | const [inline] |
size_t LMatrix3d::get_hash | ( | double | threshold | ) | const [inline] |
int LMatrix3d::get_num_components | ( | ) | const [inline] |
void LMatrix3d::get_row | ( | LVecBase3d & | result_vec, |
int | row | ||
) | const [inline] |
LVecBase3d LMatrix3d::get_row | ( | int | row | ) | const [inline] |
LVecBase2d LMatrix3d::get_row2 | ( | int | row | ) | const [inline] |
const LMatrix3d & LMatrix3d::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 6877 of file lmatrix.h.
Referenced by TexturePlacement::compute_tex_matrix(), TextureReference::from_egg(), EggTransform::get_component_mat3(), and EggTransform::get_transform2d().
bool LMatrix3d::invert_from | ( | const LMatrix3d & | 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.
Definition at line 7807 of file lmatrix.h.
Referenced by TextureReference::from_egg().
bool LMatrix3d::invert_in_place | ( | ) | [inline] |
bool LMatrix3d::invert_transpose_from | ( | const LMatrix3d & | other | ) | [inline] |
bool LMatrix3d::invert_transpose_from | ( | const LMatrix4d & | other | ) | [inline] |
bool LMatrix3d::is_nan | ( | ) | const [inline] |
LMatrix3d & LMatrix3d::operator*= | ( | double | scalar | ) | [inline] |
LMatrix3d & LMatrix3d::operator/= | ( | double | scalar | ) | [inline] |
bool LMatrix3d::operator< | ( | const LMatrix3d & | 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 LMatrix3d::read_datagram | ( | DatagramIterator & | source | ) |
Reads the matrix from the Datagram using get_stdfloat().
Definition at line 1726 of file lmatrix.cxx.
Referenced by TextureReference::fillin().
void LMatrix3d::read_datagram_fixed | ( | DatagramIterator & | scan | ) |
Reads the matrix from the Datagram using get_float32() or get_float64().
Definition at line 1691 of file lmatrix.cxx.
LMatrix3d LMatrix3d::rotate_mat | ( | double | angle | ) | [inline, static] |
Returns a matrix that rotates by the given angle in degrees counterclockwise.
Definition at line 8059 of file lmatrix.h.
Referenced by MayaShaderColorDef::compute_texture_matrix().
LMatrix3d LMatrix3d::rotate_mat | ( | double | angle, |
const LVecBase3d & | axis, | ||
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
LMatrix3d LMatrix3d::rotate_mat_normaxis | ( | double | angle, |
const LVecBase3d & | axis, | ||
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
LMatrix3d LMatrix3d::scale_mat | ( | const LVecBase2d & | scale | ) | [inline, static] |
Returns a matrix that applies the indicated scale in each of the two axes.
Definition at line 8072 of file lmatrix.h.
Referenced by TexturePlacement::compute_tex_matrix(), MayaShaderColorDef::compute_texture_matrix(), and PerlinNoise2::set_scale().
LMatrix3d LMatrix3d::scale_mat | ( | const LVecBase3d & | scale | ) | [inline, static] |
LMatrix3d LMatrix3d::scale_mat | ( | double | sx, |
double | sy, | ||
double | sz | ||
) | [inline, static] |
LMatrix3d LMatrix3d::scale_mat | ( | double | sx, |
double | sy | ||
) | [inline, static] |
LMatrix3d LMatrix3d::scale_shear_mat | ( | const LVecBase3d & | scale, |
const LVecBase3d & | shear, | ||
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
LMatrix3d LMatrix3d::scale_shear_mat | ( | double | sx, |
double | sy, | ||
double | sz, | ||
double | shxy, | ||
double | shxz, | ||
double | shyz, | ||
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
void LMatrix3d::set_cell | ( | int | row, |
int | col, | ||
double | value | ||
) | [inline] |
void LMatrix3d::set_col | ( | int | col, |
const LVecBase2d & | v | ||
) | [inline] |
void LMatrix3d::set_col | ( | int | col, |
const LVecBase3d & | v | ||
) | [inline] |
void LMatrix3d::set_rotate_mat | ( | double | angle | ) | [inline] |
void LMatrix3d::set_rotate_mat | ( | double | angle, |
const LVecBase3d & | 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 1473 of file lmatrix.cxx.
void LMatrix3d::set_rotate_mat_normaxis | ( | double | angle, |
const LVecBase3d & | 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 1534 of file lmatrix.cxx.
void LMatrix3d::set_row | ( | int | row, |
const LVecBase3d & | v | ||
) | [inline] |
void LMatrix3d::set_row | ( | int | row, |
const LVecBase2d & | v | ||
) | [inline] |
void LMatrix3d::set_scale_mat | ( | const LVecBase2d & | scale | ) | [inline] |
void LMatrix3d::set_scale_mat | ( | const LVecBase3d & | scale | ) | [inline] |
void LMatrix3d::set_scale_shear_mat | ( | const LVecBase3d & | scale, |
const LVecBase3d & | shear, | ||
CoordinateSystem | cs = CS_default |
||
) |
Fills mat with a matrix that applies the indicated scale and shear.
Definition at line 1287 of file lmatrix.cxx.
void LMatrix3d::set_shear_mat | ( | const LVecBase3d & | shear, |
CoordinateSystem | cs = CS_default |
||
) | [inline] |
void LMatrix3d::set_translate_mat | ( | const LVecBase2d & | trans | ) | [inline] |
LMatrix3d LMatrix3d::shear_mat | ( | double | shxy, |
double | shxz, | ||
double | shyz, | ||
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
LMatrix3d LMatrix3d::shear_mat | ( | const LVecBase3d & | shear, |
CoordinateSystem | cs = CS_default |
||
) | [inline, static] |
int LMatrix3d::size | ( | ) | [inline, static] |
LMatrix3d LMatrix3d::translate_mat | ( | double | tx, |
double | ty | ||
) | [inline, static] |
LMatrix3d LMatrix3d::translate_mat | ( | const LVecBase2d & | trans | ) | [inline, static] |
Returns a matrix that applies the indicated translation.
Definition at line 8033 of file lmatrix.h.
Referenced by TexturePlacement::compute_tex_matrix(), and MayaShaderColorDef::compute_texture_matrix().
void LMatrix3d::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 1712 of file lmatrix.cxx.
Referenced by TextureReference::write_datagram().
void LMatrix3d::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 1672 of file lmatrix.cxx.
LVecBase3d LMatrix3d::xform | ( | const LVecBase3d & | v | ) | const [inline] |
void LMatrix3d::xform_in_place | ( | LVecBase3d & | v | ) | const [inline] |
LVecBase2d LMatrix3d::xform_point | ( | const LVecBase2d & | v | ) | const [inline] |
The matrix transforms a 2-component point (including translation component) and returns the result.
This assumes the matrix is an affine transform.
Definition at line 7388 of file lmatrix.h.
Referenced by PerlinNoise2::noise().
void LMatrix3d::xform_point_in_place | ( | LVecBase2d & | v | ) | const [inline] |
LVecBase2d LMatrix3d::xform_vec | ( | const LVecBase2d & | v | ) | const [inline] |
LVecBase3d LMatrix3d::xform_vec | ( | const LVecBase3d & | v | ) | const [inline] |
LVecBase3d LMatrix3d::xform_vec_general | ( | const LVecBase3d & | v | ) | const [inline] |
void LMatrix3d::xform_vec_general_in_place | ( | LVecBase3d & | v | ) | const [inline] |
void LMatrix3d::xform_vec_in_place | ( | LVecBase2d & | v | ) | const [inline] |
void LMatrix3d::xform_vec_in_place | ( | LVecBase3d & | v | ) | const [inline] |