Skip to content

RMatrix

Class in Math Module
Header: #include <src/core/math/RMatrix.h>

Simple matrix class.

Scriptable: This class is available in script environments.

Copyable: Objects are cleaned up automatically by the garbage collector of the script engine.

RMatrix()
RMatrix(const RMatrix &other)
Copy constructor.
RMatrix(int r, int c)
Creates a matrix with r rows and c columns.
~RMatrix()
Deletes the matrix.
void clear()
Deletes the elements of this matrix and resets the matrix size to 0/0.
double get(int r, int c) const
RMatrix getAppended(const RMatrix &v) const
Appends matrix v to the right side of this matrix and returns the new matrix.
int getCols() const
RMatrix getInverse() const
double getRotationAngle() const
int getRows() const
RMatrix getTransposed() const
double getUniformScaleFactor() const
void init(int r, int c)
Initializes the matrix for the given size and resets all elements to 0.
bool isRotationAndUniformScale() const
bool isValid() const
RMatrix multiplyWith(const RMatrix &w) const
RVector multiplyWith(const RVector &w) const
RMatrix multiplyWith(double w) const
RMatrix operator*(const RMatrix &other) const
Multiplies two matrices.
RMatrix operator*(double s) const
RMatrix operator*=(double f)
Multiplies all elements of this matrix with the given factor and returns this matrix.
RMatrix & operator=(const RMatrix &other)
Assignment operator.
bool operator==(const RMatrix &other) const
Comparison.
double * operator[](int i)
void reset()
Resets all elements to 0.
bool rref()
Changes this matrix into its rref.
void set(int r, int c, double v)
Sets the element at the given row/column to the given value v.
void set2x3(double a11, double a12, double a13, double a21, double a22, double a23)
Sets the dimension of this matrix to 2x3 and the elements to the given elements.
void set3x1(double a11, double a21, double a31)
Sets the dimension of this matrix to 3x1 and the elements to the given elements.
void set3x3(double a11, double a12, double a13, double a21, double a22, double a23, double a31, double a32, double a33)
Sets the dimension of this matrix to 3x3 and the elements to the given elements.
static RMatrix create2x2(double a11, double a12, double a21, double a22)
static RMatrix create2x3(double a11, double a12, double a13, double a21, double a22, double a23)
static RMatrix create3x1(double a11, double a21, double a31)
static RMatrix create3x3(double a11, double a12, double a13, double a21, double a22, double a23, double a31, double a32, double a33)
static RMatrix createIdentity(int size)
static RMatrix createIdentity2x2()
static RMatrix createIdentity3x3()
static RMatrix createRotation(double angle)
void addRow(int r, double factor, int r2)
Adds to row r factor times row r2.
int getPivotCol(int r)
int getPivotRow(int startRow)
void multiplyRow(int r, double factor)
Multiplies row r with factor.
bool ref(int startRow)
Changes this matrix into its ref.
void swapRows(int r1, int r2)
Swaps the given two rows.
int cols
double ** m
int rows

RMatrix::RMatrix()

All rights reserved.

This file is part of the QCAD project.

QCAD is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

QCAD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with QCAD. Creates and empty matrix (zero columns and zero rows).

RMatrix::RMatrix(const RMatrix &other)

Copy constructor.

RMatrix::RMatrix(int r, int c)

Creates a matrix with r rows and c columns.

All elements are reset to 0.

Parameters:

  • r: number of rows
  • c: number of columns

RMatrix::~RMatrix()

Deletes the matrix.

void RMatrix::clear()

Deletes the elements of this matrix and resets the matrix size to 0/0.

double RMatrix::get(int r, int c) const

const

Parameters:

  • r: the row
  • c: the column

Returns: The element at the given row/column.

RMatrix RMatrix::getAppended(const RMatrix &v) const

const

Appends matrix v to the right side of this matrix and returns the new matrix.

This matrix is not affected.

Parameters:

  • v: the matrix to append to this matrix

int RMatrix::getCols() const

inline const

Returns: Number of columns of this matrix.

RMatrix RMatrix::getInverse() const

const

Returns: The inverse matrix of this matrix $A^{-1}$ or an empty matrix if this matrix is not invertible.

double RMatrix::getRotationAngle() const

const

int RMatrix::getRows() const

inline const

Returns: Number of rows of this matrix.

RMatrix RMatrix::getTransposed() const

const

Returns: The transposed matrix $A^T$. This matrix is not affected.

double RMatrix::getUniformScaleFactor() const

const

void RMatrix::init(int r, int c)

Initializes the matrix for the given size and resets all elements to 0.

bool RMatrix::isRotationAndUniformScale() const

const

bool RMatrix::isValid() const

const

Returns: True if this matrix is a valid matrix (more than 0 columns and rows).

RMatrix RMatrix::multiplyWith(const RMatrix &w) const

const

Returns: $A \cdot W$ This matrix is not affected.

RVector RMatrix::multiplyWith(const RVector &w) const

const

RMatrix RMatrix::multiplyWith(double w) const

const

RMatrix RMatrix::operator*(const RMatrix &other) const

const

Multiplies two matrices.

Non-Scriptable: This function is not available in script environments.

RMatrix RMatrix::operator*(double s) const

const

RMatrix RMatrix::operator*=(double f)

Multiplies all elements of this matrix with the given factor and returns this matrix.

Non-Scriptable: This function is not available in script environments.

RMatrix & RMatrix::operator=(const RMatrix &other)

Assignment operator.

Non-Scriptable: This function is not available in script environments.

bool RMatrix::operator==(const RMatrix &other) const

const

Comparison.

Non-Scriptable: This function is not available in script environments.

All elements of the matrix as well as the matrix dimensions have to match for the two matrices to be equal.

double * RMatrix::operator[](int i)

Non-Scriptable: This function is not available in script environments.

void RMatrix::reset()

Resets all elements to 0.

bool RMatrix::rref()

Changes this matrix into its rref.

See also: http://en.wikipedia.org/wiki/Rref#Reduced_row_echelon_form

Returns: True on success.

void RMatrix::set(int r, int c, double v)

Sets the element at the given row/column to the given value v.

Parameters:

  • r: the row
  • c: the column
  • v: the new value at the given row / column position

void RMatrix::set2x3(double a11, double a12, double a13, double a21, double a22, double a23)

Sets the dimension of this matrix to 2x3 and the elements to the given elements.

void RMatrix::set3x1(double a11, double a21, double a31)

Sets the dimension of this matrix to 3x1 and the elements to the given elements.

void RMatrix::set3x3(double a11, double a12, double a13, double a21, double a22, double a23, double a31, double a32, double a33)

Sets the dimension of this matrix to 3x3 and the elements to the given elements.

static RMatrix RMatrix::create2x2(double a11, double a12, double a21, double a22)

static

Returns: A matrix with 2 rows and 2 columns: $ \left( \begin{array}{ccc} a_{11} & a_{12} \ a_{21} & a_{22} \end{array} \right) $

static RMatrix RMatrix::create2x3(double a11, double a12, double a13, double a21, double a22, double a23)

static

Returns: A matrix with 2 rows and 3 columns: $ \left( \begin{array}{ccc} a_{11} & a_{12} & a_{13} \ a_{21} & a_{22} & a_{23} \end{array} \right) $

static RMatrix RMatrix::create3x1(double a11, double a21, double a31)

static

Returns: A matrix with 3 rows and 1 column (vector): $ \left( \begin{array}{ccc} a_{11} \ a_{21} \ a_{31} \end{array} \right) $

static RMatrix RMatrix::create3x3(double a11, double a12, double a13, double a21, double a22, double a23, double a31, double a32, double a33)

static

Returns: A matrix with 3 rows and 3 columns: $ \left( \begin{array}{ccc} a_{11} & a_{12} & a_{13} \ a_{21} & a_{22} & a_{23} \ a_{31} & a_{32} & a_{33} \end{array} \right) $

static RMatrix RMatrix::createIdentity(int size)

static

Returns: An identity matrix with size rows and size columns: $ \left( \begin{array}{cccc} 1 & 0 & 0 & \ldots \ 0 & 1 & 0 & \ldots \ 0 & 0 & 1 & \ldots \ \ldots & \ldots & \ldots & \ldots \end{array} \right) $

static RMatrix RMatrix::createIdentity2x2()

static

Returns: An identity matrix with 2 rows and 2 columns: $ \left( \begin{array}{ccc} 1 & 0 \ 0 & 1 \end{array} \right) $

static RMatrix RMatrix::createIdentity3x3()

static

Returns: An identity matrix with 3 rows and 3 columns: $ \left( \begin{array}{ccc} 1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{array} \right) $

static RMatrix RMatrix::createRotation(double angle)

static

void RMatrix::addRow(int r, double factor, int r2)

protected

Adds to row r factor times row r2.

Parameters:

  • r: the row
  • r2: the row 2
  • factor: The factor to apply to r2 before it is added to row r.

int RMatrix::getPivotCol(int r)

protected

Parameters:

  • r: the row

Returns: The pivot column of the given matrix row r.

int RMatrix::getPivotRow(int startRow)

protected

Parameters:

  • startRow: the start row

Returns: The pivot row of this matrix, starting with the given row startRow.

void RMatrix::multiplyRow(int r, double factor)

protected

Multiplies row r with factor.

Parameters:

  • r: the row
  • factor: the factor to apply to the row

bool RMatrix::ref(int startRow)

protected

Changes this matrix into its ref.

Returns: True on success.

void RMatrix::swapRows(int r1, int r2)

protected

Swaps the given two rows.

Parameters:

  • r1: the row 1
  • r2: the row 2

int RMatrix::cols

private

double** RMatrix::m

private

int RMatrix::rows

private