3x3 matrix datatype.
``````    public struct Basis : IEquatable<Basis>
``````

3x3 matrix used for 3D rotation and scale. Contains 3 vector fields x,y and z as its columns, which can be interpreted as the local basis vectors of a transformation. Can also be accessed as array of 3D vectors. These vectors are orthogonal to each other, but are not necessarily normalized (due to scaling). Almost always used as orthogonal basis for a Transform.

For such use, it is composed of a scaling and a rotation matrix, in that order (M = R.S).

### Static Properties

``````    public static  Identity { get; }
``````

### Constructors

``````    public Basis(Quat quat)
``````

Create a rotation matrix from the given quaternion.

``````    public Basis(Vector3 euler)
``````

Create a rotation matrix (in the YXZ convention: first Z, then X, and Y last) from the specified Euler angles, given in the vector format as (X-angle, Y-angle, Z-angle).

``````    public Basis(Vector3 axis, float phi)
``````

Create a rotation matrix which rotates around the given axis by the specified angle, in radians. The axis must be a normalized vector.

``````    public Basis(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis)
``````

Create a matrix from 3 axis vectors.

``````    public Basis()
``````

### Properties

``````    public Vector3 Scale { get; }
``````

``````    public Vector3 this[] { get; set; }
``````

``````    public float this[] { get; set; }
``````

``````    public Vector3 x { get; set; }
``````

The basis matrix’s x vector.

``````    public Vector3 y { get; set; }
``````

The basis matrix’s y vector.

``````    public Vector3 z { get; set; }
``````

The basis matrix’s z vector.

### Methods

``````    public float Determinant()
``````

Return the determinant of the matrix.

``````    public override bool Equals(object obj)
``````

``````    public bool Equals(Basis other)
``````

``````    public Vector3 GetAxis(int axis)
``````

``````    public Vector3 GetEuler()
``````

Assuming that the matrix is a proper rotation matrix (orthonormal matrix with determinant +1), return Euler angles (in the YXZ convention: first Z, then X, and Y last). Returned vector contains the rotation angles in the format (X-angle, Y-angle, Z-angle).

``````    public override int GetHashCode()
``````

``````    public int GetOrthogonalIndex()
``````

This function considers a discretization of rotations into 24 points on unit sphere, lying along the vectors (x,y,z) with each component being either -1,0 or 1, and returns the index of the point best representing the orientation of the object. It is mainly used by the grid map editor. For further details, refer to Godot source code.

``````    public Basis Inverse()
``````

Return the inverse of the matrix.

``````    public Basis Orthonormalized()
``````

Return the orthonormalized version of the matrix (useful to call from time to time to avoid rounding error for orthogonal matrices). This performs a Gram-Schmidt orthonormalization on the basis of the matrix.

``````    public Quat Quat()
``````

``````    public Basis Rotated(Vector3 axis, float phi)
``````

Introduce an additional rotation around the given axis by phi (radians). The axis must be a normalized vector.

``````    public Basis Scaled(Vector3 scale)
``````

Introduce an additional scaling specified by the given 3D scaling factor.

``````    public void SetAxis(int axis, Vector3 value)
``````

``````    public float Tdotx(Vector3 with)
``````

Transposed dot product with the x axis of the matrix.

``````    public float Tdoty(Vector3 with)
``````

Transposed dot product with the y axis of the matrix.

``````    public float Tdotz(Vector3 with)
``````

Transposed dot product with the z axis of the matrix.

``````    public override string ToString()
``````

``````    public string ToString(string format)
``````

``````    public Basis Transposed()
``````

Return the transposed version of the matrix.

``````    public Vector3 Xform(Vector3 v)
``````

Return a vector transformed (multiplied) by the matrix.

``````    public Vector3 XformInv(Vector3 v)
``````

Return a vector transformed (multiplied) by the transposed matrix. Note that this results in a multiplication by the inverse of the matrix only if it represents a rotation-reflection.

### Operators

``````    public static bool operator ==(Basis left, Basis right)
``````

``````    public static bool operator !=(Basis left, Basis right)
``````

``````    public static Basis operator *(Basis left, Basis right)
``````
Tags: