Creates a matrix from inputs in the form,
Static constructor methods are also available. See Mat33.scaling2D, Mat33.zRotation, Mat33.translation, and Mat33.fromCSSMatrix.
Readonlya1Readonlya2Readonlya3Readonlyb1Readonlyb2Readonlyb3Readonlyc1Readonlyc2Readonlyc3StaticidentityThe 3x3 identity matrix.
Right-multiplies this by other.
See also transformVec3 and transformVec2.
Example:
import {Mat33, Vec2} from '@js-draw/math';
console.log(Mat33.identity.rightMul(Mat33.identity));
// Create a matrix by right multiplying.
const scaleThenRotate =
// The resultant matrix first scales by a factor of two
Mat33.scaling2D(2).rightMul(
// ...then rotates by pi/4 radians = 45 degrees.
Mat33.zRotation(Math.PI / 4)
);
console.log(scaleThenRotate);
// Use scaleThenRotate to scale then rotate a vector.
console.log(scaleThenRotate.transformVec2(Vec2.unitX));
result[0] = top left element
result[1] = element at row zero, column 1
...
Example:
import { Mat33 } from '@js-draw/math';
console.log(
new Mat33(
1, 2, 3,
4, 5, 6,
7, 8, 9,
)
);
Applies this as an affine transformation to the given vector.
Returns a transformed version of other.
Unlike transformVec3, this does translate the given vector.
StaticfromCSSMatrixStaticofStaticscaling2DStatictranslationStaticzCreates a matrix for rotating Vec2s about center by some number of radians.
For this function, Vec2s are considered to be points in 2D space.
For example,
import { Mat33, Vec2 } from '@js-draw/math';
const halfCircle = Math.PI; // PI radians = 180 degrees = 1/2 circle
const center = Vec2.of(1, 1); // The point (1,1)
const rotationMatrix = Mat33.zRotation(halfCircle, center);
console.log(
'Rotating (0,0) 180deg about', center, 'results in',
// Rotates (0,0)
rotationMatrix.transformVec2(Vec2.zero),
);
Represents a three dimensional linear transformation or a two-dimensional affine transformation. (An affine transformation scales/rotates/shears and translates while a linear transformation just scales/rotates/shears).
In addition to other matrices, Mat33s can be used to transform Vec3s and Vec2s.
For example, to move the point (1,1) by 5 units to the left and 6 units up,
import {Mat33, Vec2} from '@js-draw/math'; const moveLeftAndUp = Mat33.translation(Vec2.of(5, 6)); console.log(moveLeftAndUp);This
moveLeftAndUpmatrix could then translate (move) a Vec2 using Mat33.transformVec2:It's also possible to create transformation matrices that scale and rotate. A single transform matrix can be created from multiple using matrix multiplication (see Mat33.rightMul):
---use-previous--- ---visible--- // Create a matrix by right multiplying. const scaleThenRotate = // The resultant matrix first scales by a factor of two Mat33.scaling2D(2).rightMul( // ...then rotates by pi/2 radians = 90 degrees. Mat33.zRotation(Math.PI / 2) ); console.log(scaleThenRotate); // Use scaleThenRotate to scale then rotate a vector. console.log(scaleThenRotate.transformVec2(Vec2.unitX));