60 result.data[0][0] = 1.0f;
69 result.data[1][1] = 1.0f;
78 result.data[2][2] = 1.0f;
82 result.data[0][0] = 1.0f;
83 result.data[1][1] = 1.0f;
84 result.data[2][2] = 1.0f;
110 for (
int i = 0;
i < 3; ++
i) {
126 for (
int i = 0;
i < 3; ++
i) {
142 for (
int i = 0;
i < 3; ++
i) {
143 for (
int j = 0;
j < 3; ++
j) {
145 for (
int k = 0;
k < 3; ++
k) {
148 result.data[
i][
j] = sum;
171 for(
int i = 0;
i < 3; ++
i) {
172 for (
int j = 0;
j < 3; ++
j) {
184 for (
int i = 0;
i < 3; ++
i) {
185 for (
int j = 0;
j < 3; ++
j) {
198 for (
int i = 0;
i < 3; ++
i) {
199 for (
int j = 0;
j < 3; ++
j) {
200 result.data[
i][
j] = data[
j][
i];
211 return data[0][0] * (data[1][1] * data[2][2] - data[1][2] * data[2][1]) -
212 data[0][1] * (data[1][0] * data[2][2] - data[1][2] * data[2][0]) +
213 data[0][2] * (data[1][0] * data[2][1] - data[1][1] * data[2][0]);
228 result.data[0][0] = (data[1][1] * data[2][2] - data[1][2] * data[2][1]) *
inv_det;
229 result.data[0][1] = (data[0][2] * data[2][1] - data[0][1] * data[2][2]) *
inv_det;
230 result.data[0][2] = (data[0][1] * data[1][2] - data[0][2] * data[1][1]) *
inv_det;
231 result.data[1][0] = (data[1][2] * data[2][0] - data[1][0] * data[2][2]) *
inv_det;
232 result.data[1][1] = (data[0][0] * data[2][2] - data[0][2] * data[2][0]) *
inv_det;
233 result.data[1][2] = (data[0][2] * data[1][0] - data[0][0] * data[1][2]) *
inv_det;
234 result.data[2][0] = (data[1][0] * data[2][1] - data[1][1] * data[2][0]) *
inv_det;
235 result.data[2][1] = (data[0][1] * data[2][0] - data[0][0] * data[2][1]) *
inv_det;
236 result.data[2][2] = (data[0][0] * data[1][1] - data[0][1] * data[1][0]) *
inv_det;
245 return data[0][0] + data[1][1] + data[2][2];
255 for (
int i = 0;
i < 3; ++
i) {
256 for (
int j = 0;
j < 3; ++
j) {
273 for (
int i = 0;
i < 3; ++
i) {
274 for (
int j = 0;
j < 3; ++
j) {
284 for (
int i = 0;
i < 3; ++
i) {
285 for (
int j = 0;
j < 3; ++
j) {
296 return !(*
this ==
other);
306 float get(
int row,
int col)
const {
308 return data[row][col];
321 data[row][col] =
value;
332 for (
int i = 0;
i < 3; ++
i) {
351 for (
int i = 0;
i < 3; ++
i) {
Dynamic array container wrapping std::vector.
Definition list.h:40
T * data() noexcept
Returns a pointer to the underlying contiguous storage.
Definition list.h:286
A 3x3 floating-point matrix with SSE-accelerated operations.
Definition matrix3x3.h:24
static Matrix3x3 scalingMatrix(float scale_x, float scale_y, float scale_z)
Creates a diagonal scaling matrix.
Definition matrix3x3.h:40
Matrix3x3 inverse() const
Computes the inverse of this matrix.
Definition matrix3x3.h:220
float dot(int row1, int row2) const
Computes the dot product of two rows in this matrix.
Definition matrix3x3.h:160
void vectorTransform(float vector[3]) const
Transforms a 3-element vector by this matrix in place.
Definition matrix3x3.h:368
Matrix3x3(float val[3][3])
Constructs a matrix from a 3x3 float array.
Definition matrix3x3.h:99
void set(float val[3][3])
Copies values from a 3x3 float array into this matrix.
Definition matrix3x3.h:183
static constexpr float IdentityMatrix[3][3]
The 3x3 identity matrix constant.
Definition matrix3x3.h:27
Matrix3x3 transpose() const
Returns the transpose of this matrix.
Definition matrix3x3.h:196
float determinant() const
Computes the determinant of this matrix.
Definition matrix3x3.h:210
Matrix3x3 operator*(const Matrix3x3 &other) const
Returns the matrix product of two matrices.
Definition matrix3x3.h:140
void set(int row, int col, float value)
Sets the element at the given row and column.
Definition matrix3x3.h:319
bool operator!=(const Matrix3x3 &other) const
Returns true if any element differs from the other matrix.
Definition matrix3x3.h:295
float trace() const
Computes the trace (sum of diagonal elements) of this matrix.
Definition matrix3x3.h:244
bool operator==(const Matrix3x3 &other) const
Returns true if all elements are equal to the other matrix.
Definition matrix3x3.h:283
Matrix3x3()
Constructs a zero-initialized matrix.
Definition matrix3x3.h:91
float get(int row, int col) const
Returns the element at the given row and column.
Definition matrix3x3.h:306
Matrix3x3 operator/(float scalar) const
Divides every element by a scalar.
Definition matrix3x3.h:269
Matrix3x3 elementMultiply(const Matrix3x3 &other) const
Returns the Hadamard (element-wise) product of two matrices.
Definition matrix3x3.h:330
Matrix3x3 operator-(const Matrix3x3 &other) const
Returns the element-wise difference of two matrices.
Definition matrix3x3.h:124
Matrix3x3 operator+(const Matrix3x3 &other) const
Returns the element-wise sum of two matrices.
Definition matrix3x3.h:108
void zero()
Sets all matrix elements to zero.
Definition matrix3x3.h:170
static Matrix3x3 rotationMatrix(float angle, char axis)
Creates a rotation matrix around the specified axis.
Definition matrix3x3.h:54
Matrix3x3 operator*(float scalar) const
Multiplies every element by a scalar.
Definition matrix3x3.h:253
Matrix3x3 elementDivide(const Matrix3x3 &other) const
Returns the element-wise quotient of two matrices.
Definition matrix3x3.h:349
#define PROMEKI_NAMESPACE_BEGIN
Starts a promeki namespace block.
Definition namespace.h:14
#define PROMEKI_NAMESPACE_END
Ends a promeki namespace block.
Definition namespace.h:19
const T & value(const Result< T > &r)
Returns the value from a Result.
Definition result.h:56