# Matrix¶

`import introcs`

We assume that all matrices at 4x4 matrices, allowing us to represent affine transforms on homogeneous coordinates. This class is primarily used for the graphics applications in class. For more general matrices, you should use `numpy`.

Note that `Matrix` has no attributes. This is what we call an opaque class. In fact you cannot even pass attributes to the standard constructor. You are expected to make an identity matrix and then modify it via methods. If you want a special type of matrix quickly, use one of the class methods.

This is a very advanced class for an introductory course and is almost always delegated to behind-the-scenes parts of assignments.

## Constructor¶

class `introcs.``Matrix`

An instance is a homongenous matrices for graphics transforms.

This class is backed by numpy for fast computation. There are no publicly accessible attributes, as it is not safe to access the internals.

The constructor creates a new 4x4 identify matrix

## Class Methods¶

Class methods are methods that are called with the class name before the period, instead of an object. They provide alternate constructors.

classmethod `Matrix.``CreateTranslation`([x, [y, [z]]])

Creates a translation matrix for the given offset.

Parameters
• x (`int` or `float`) – x-coordinate of translation (default 0)

• y (`int` or `float`) – y-coordinate of translation (default 0)

• z (`int` or `float`) – z-coordinate of translation (default 0)

classmethod `Matrix.``CreateRotation`([ang, [x, [y, [z]]]])

Creates a rotation about the given axis.

The rotation angle is given in degrees, not radians. Rotation is counterclockwise around the angle of rotation. The z-axis is the default axis of rotation.

Parameters
• angle (`int` or `float`) – angle of rotation in degrees (default 0)

• x (`int` or `float`) – x-coordinate of rotation axis (default 0)

• y (`int` or `float`) – y-coordinate of rotation axis (default 0)

• z (`int` or `float`) – z-coordinate of rotation axis (default 1)

classmethod `Matrix.``CreateScale`([x, [y, [z]]])

Scales this matrix (in-place) by the given amount

Parameters
• x (`int` or `float`) – x-coordinate of the scale (default 1)

• y – y-coordinate of the scale (default 1)

• z – z-coordinate of the scale (default 1)

## Immutable Methods¶

Immutable methods return a new object and do not modify the original.

`Matrix.``invert`()

Inverts this matrix in place.

This method returns this object for chaining.

Returns

This object, newly modified

Return type

Matrix`

`Matrix.``transpose`()
Returns

the transpose of this matrix

Return type

`Matrix`

`Matrix.``transform`(value)

Transforms the given point or vector by this matrix.

Value can be a point or vector of any dimenion. This includes `Point2`, `Point3`, `Vector2`, and `Vector3`. The value returned will have the same type as `value`.

Parameters

value (point or vector) – the object to transform

Returns

The value transformed by this matrix

Return type

`type(value)`

`Matrix.``copy`()
Returns

a copy of this matrix

Return type

`Matrix`

## Mutable Methods¶

Mutable methods modify the underlying object.

`Matrix.``inverse`()
Returns

the inverse of this matrix

Return type

Matrix`

`Matrix.``transpost`()

Transposes this matrix in place.

This method returns this object for chaining.

Returns

This object, newly modified

Return type

Matrix`

`Matrix.``translate`([x, [y, [z]]])

Translates this matrix (in-place) by the given amount.

This method will modify the attributes of this oject. This method returns this object for chaining.

Parameters
• x (`int` or `float`) – x-coordinate of translation (default 0)

• y (`int` or `float`) – y-coordinate of translation (default 0)

• z (`int` or `float`) – z-coordinate of translation (default 0)

Returns

This object, newly modified

`Matrix.``rotate`([ang, [x, [y, [z]]]])

Rotates this matrix (in place) about the given axis

The rotation angle is given in degrees, not radians. Rotation is counterclockwise around the angle of rotation. The z-axis is the default axis of rotation.

This method will modify the attributes of this oject. This method returns this object for chaining.

Parameters
• angle (`int` or `float`) – angle of rotation in degrees (default 0)

• x (`int` or `float`) – x-coordinate of rotation axis (default 0)

• y (`int` or `float`) – y-coordinate of rotation axis (default 0)

• z (`int` or `float`) – z-coordinate of rotation axis (default 1)

Returns

This object, newly modified

`Matrix.``scale`([x, [y, [z]]])

Scales this matrix (in-place) by the given amount

This method will modify the attributes of this oject. This method returns this object for chaining.

Parameters
• x (`int` or `float`) – x-coordinate of the scale (default 1)

• y – y-coordinate of the scale (default 1)

• z – z-coordinate of the scale (default 1)

Returns

This object, newly modified

## Operators¶

Operators redefine the meaning of the basic operations. For example:: `p * q` is the same as `p.__mul__(q)`.

`Matrix.``__mul__`(other)

Premultiplies this matrix by `other`.

This operation pre-multiplies the matrix on the right. As a result, this allows us to read graphics operations left to right (which is more natural). This method does not modify this matrix.

For example, suppose `p` is a rotation and `q` is a translation. Then:

```p * q
```

produces a rotation followed by a translation.

Parameters

other (`Matrix`) – the matrix to pre-multiply

Returns

The result of premultiplying this matrix by `other`

Return type

`Matrix`

`Matrix.``__imul__`(other)

Premultiplies this matrix by `other` in place.

This operation pre-multiplies the matrix on the right. As a result, this allows us to read graphics operations left to right (which is more natural).

This method will modify the attributes of this oject. This method returns this object for chaining.

For example, suppose `p` is a rotation and `q` is a translation. Then:

```p *= q
```

changes `p` into a rotation followed by a translation.

Returns

This object, newly modified

Return type

`Matrix`