3×3 matrix datatype.
``````    [Serializable]
public struct Basis : IEquatable<Basis>
``````

3×3 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 an 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  FlipX { get; }
``````

``````    public static  FlipY { get; }
``````

``````    public static  FlipZ { get; }
``````

``````    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 column0, Vector3 column1, Vector3 column2)
``````

Create a matrix from 3 axis vectors.

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

### Fields

``````    public Vector3 Row0
``````

``````    public Vector3 Row1
``````

``````    public Vector3 Row2
``````

### Properties

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

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

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

``````    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()
``````

Returns the determinant of the matrix.

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

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

``````    [Obsolete("GetAxis is deprecated. Use GetColumn instead.")]
public Vector3 GetAxis(int axis)
``````

``````    public Vector3 GetColumn(int index)
``````

``````    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 Vector3 GetRow(int index)
``````

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

Returns the inverse of the matrix.

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

Returns 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 SetColumn(int index, Vector3 value)
``````

``````    public void SetRow(int index, 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()
``````

Returns the transposed version of the matrix.

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

Returns a vector transformed (multiplied) by the matrix.

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

Returns a vector transformed (multiplied) by the transposed matrix.

Note: 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: