public Matrix3(Matrix3 matrix) { m00_ = matrix.m00_; m01_ = matrix.m01_; m02_ = matrix.m02_; m10_ = matrix.m10_; m11_ = matrix.m11_; m12_ = matrix.m12_; m20_ = matrix.m20_; m21_ = matrix.m21_; m22_ = matrix.m22_; }
/// Copy-construct from a 3x3 matrix and set the extra elements to identity. public Matrix3x4(Matrix3 matrix) { m00_ = matrix.m00_; m01_ = matrix.m01_; m02_ = matrix.m02_; m03_ = 0.0f; m10_ = matrix.m10_; m11_ = matrix.m11_; m12_ = matrix.m12_; m13_ = 0.0f; m20_ = matrix.m20_; m21_ = matrix.m21_; m22_ = matrix.m22_; m23_ = 0.0f; }
public Matrix3 Set(Matrix3 rhs) { m00_ = rhs.m00_; m01_ = rhs.m01_; m02_ = rhs.m02_; m10_ = rhs.m10_; m11_ = rhs.m11_; m12_ = rhs.m12_; m20_ = rhs.m20_; m21_ = rhs.m21_; m22_ = rhs.m22_; return this; }
/// Test for equality with another matrix with epsilon. public bool Equals(Matrix3 rhs) { return true; }
/// Construct from a rotation matrix. public Quaternion(Matrix3 matrix) { FromRotationMatrix(matrix); }
/// Define from a rotation matrix. public void FromRotationMatrix(Matrix3 matrix) { float t = matrix.m00_ + matrix.m11_ + matrix.m22_; if (t > 0.0f) { float invS = 0.5f / (float)Math.Sqrt(1.0f + t); x_ = (matrix.m21_ - matrix.m12_) * invS; y_ = (matrix.m02_ - matrix.m20_) * invS; z_ = (matrix.m10_ - matrix.m01_) * invS; w_ = 0.25f / invS; } else { if (matrix.m00_ > matrix.m11_ && matrix.m00_ > matrix.m22_) { float invS = 0.5f / (float)Math.Sqrt(1.0f + matrix.m00_ - matrix.m11_ - matrix.m22_); x_ = 0.25f / invS; y_ = (matrix.m01_ + matrix.m10_) * invS; z_ = (matrix.m20_ + matrix.m02_) * invS; w_ = (matrix.m21_ - matrix.m12_) * invS; } else if (matrix.m11_ > matrix.m22_) { float invS = 0.5f / (float)Math.Sqrt(1.0f + matrix.m11_ - matrix.m00_ - matrix.m22_); x_ = (matrix.m01_ + matrix.m10_) * invS; y_ = 0.25f / invS; z_ = (matrix.m12_ + matrix.m21_) * invS; w_ = (matrix.m02_ - matrix.m20_) * invS; } else { float invS = 0.5f / (float)Math.Sqrt(1.0f + matrix.m22_ - matrix.m00_ - matrix.m11_); x_ = (matrix.m02_ + matrix.m20_) * invS; y_ = (matrix.m12_ + matrix.m21_) * invS; z_ = 0.25f / invS; w_ = (matrix.m10_ - matrix.m01_) * invS; } } }
/// Define from orthonormal axes. public void FromAxes(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis) { Matrix3 matrix = new Matrix3( xAxis.x, yAxis.x, zAxis.x, xAxis.y, yAxis.y, zAxis.y, xAxis.z, yAxis.z, zAxis.z ); FromRotationMatrix(matrix); }
/// Set rotation elements from a 3x3 matrix. public void SetRotation(Matrix3 rotation) { m00_ = rotation.m00_; m01_ = rotation.m01_; m02_ = rotation.m02_; m10_ = rotation.m10_; m11_ = rotation.m11_; m12_ = rotation.m12_; m20_ = rotation.m20_; m21_ = rotation.m21_; m22_ = rotation.m22_; }
/// Assign from a 3x3 matrix and set the extra elements to identity. public Matrix3x4 Set(Matrix3 rhs) { m00_ = rhs.m00_; m01_ = rhs.m01_; m02_ = rhs.m02_; m03_ = 0.0f; m10_ = rhs.m10_; m11_ = rhs.m11_; m12_ = rhs.m12_; m13_ = 0.0f; m20_ = rhs.m20_; m21_ = rhs.m21_; m22_ = rhs.m22_; m23_ = 0.0f; return this; }
/// Assign from a 3x3 matrix. Set the extra elements to identity. public void Set(Matrix3 rhs) { m00_ = rhs.m00_; m01_ = rhs.m01_; m02_ = rhs.m02_; m03_ = 0.0f; m10_ = rhs.m10_; m11_ = rhs.m11_; m12_ = rhs.m12_; m13_ = 0.0f; m20_ = rhs.m20_; m21_ = rhs.m21_; m22_ = rhs.m22_; m23_ = 0.0f; m30_ = 0.0f; m31_ = 0.0f; m32_ = 0.0f; m33_ = 1.0f; }