<?xml version="1.0" encoding="UTF-8" ?>
<class name="Quat" version="3.2">
	<brief_description>
		Quaternion.
	</brief_description>
	<description>
		A unit quaternion used for representing 3D rotations.
		It is similar to [Basis], which implements matrix representation of rotations, and can be parametrized using both an axis-angle pair or Euler angles. But due to its compactness and the way it is stored in memory, certain operations (obtaining axis-angle and performing SLERP, in particular) are more efficient and robust against floating-point errors.
		Quaternions need to be (re)normalized.
	</description>
	<tutorials>
		<link>https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html#interpolating-with-quaternions</link>
	</tutorials>
	<methods>
		<method name="Quat">
			<return type="Quat">
			</return>
			<argument index="0" name="from" type="Basis">
			</argument>
			<description>
				Returns the rotation matrix corresponding to the given quaternion.
			</description>
		</method>
		<method name="Quat">
			<return type="Quat">
			</return>
			<argument index="0" name="euler" type="Vector3">
			</argument>
			<description>
				Returns a quaternion that will perform a rotation specified by Euler angles (in the YXZ convention: first Z, then X, and Y last), given in the vector format as (X angle, Y angle, Z angle).
			</description>
		</method>
		<method name="Quat">
			<return type="Quat">
			</return>
			<argument index="0" name="axis" type="Vector3">
			</argument>
			<argument index="1" name="angle" type="float">
			</argument>
			<description>
				Returns a quaternion that will rotate around the given axis by the specified angle. The axis must be a normalized vector.
			</description>
		</method>
		<method name="Quat">
			<return type="Quat">
			</return>
			<argument index="0" name="x" type="float">
			</argument>
			<argument index="1" name="y" type="float">
			</argument>
			<argument index="2" name="z" type="float">
			</argument>
			<argument index="3" name="w" type="float">
			</argument>
			<description>
				Returns a quaternion defined by these values.
			</description>
		</method>
		<method name="cubic_slerp">
			<return type="Quat">
			</return>
			<argument index="0" name="b" type="Quat">
			</argument>
			<argument index="1" name="pre_a" type="Quat">
			</argument>
			<argument index="2" name="post_b" type="Quat">
			</argument>
			<argument index="3" name="t" type="float">
			</argument>
			<description>
				Performs a cubic spherical-linear interpolation with another quaternion.
			</description>
		</method>
		<method name="dot">
			<return type="float">
			</return>
			<argument index="0" name="b" type="Quat">
			</argument>
			<description>
				Returns the dot product of two quaternions.
			</description>
		</method>
		<method name="get_euler">
			<return type="Vector3">
			</return>
			<description>
				Returns Euler angles (in the YXZ convention: first Z, then X, and Y last) corresponding to the rotation represented by the unit quaternion. Returned vector contains the rotation angles in the format (X angle, Y angle, Z angle).
			</description>
		</method>
		<method name="inverse">
			<return type="Quat">
			</return>
			<description>
				Returns the inverse of the quaternion.
			</description>
		</method>
		<method name="is_equal_approx">
			<return type="bool">
			</return>
			<argument index="0" name="quat" type="Quat">
			</argument>
			<description>
				Returns [code]true[/code] if this quaterion and [code]quat[/code] are approximately equal, by running [method @GDScript.is_equal_approx] on each component.
			</description>
		</method>
		<method name="is_normalized">
			<return type="bool">
			</return>
			<description>
				Returns whether the quaternion is normalized or not.
			</description>
		</method>
		<method name="length">
			<return type="float">
			</return>
			<description>
				Returns the length of the quaternion.
			</description>
		</method>
		<method name="length_squared">
			<return type="float">
			</return>
			<description>
				Returns the length of the quaternion, squared.
			</description>
		</method>
		<method name="normalized">
			<return type="Quat">
			</return>
			<description>
				Returns a copy of the quaternion, normalized to unit length.
			</description>
		</method>
		<method name="set_axis_angle">
			<argument index="0" name="axis" type="Vector3">
			</argument>
			<argument index="1" name="angle" type="float">
			</argument>
			<description>
				Sets the quaternion to a rotation which rotates around axis by the specified angle, in radians. The axis must be a normalized vector.
			</description>
		</method>
		<method name="set_euler">
			<argument index="0" name="euler" type="Vector3">
			</argument>
			<description>
				Sets the quaternion to a rotation specified by Euler angles (in the YXZ convention: first Z, then X, and Y last), given in the vector format as (X angle, Y angle, Z angle).
			</description>
		</method>
		<method name="slerp">
			<return type="Quat">
			</return>
			<argument index="0" name="b" type="Quat">
			</argument>
			<argument index="1" name="t" type="float">
			</argument>
			<description>
				Performs a spherical-linear interpolation with another quaternion.
			</description>
		</method>
		<method name="slerpni">
			<return type="Quat">
			</return>
			<argument index="0" name="b" type="Quat">
			</argument>
			<argument index="1" name="t" type="float">
			</argument>
			<description>
				Performs a spherical-linear interpolation with another quaterion without checking if the rotation path is not bigger than 90°.
			</description>
		</method>
		<method name="xform">
			<return type="Vector3">
			</return>
			<argument index="0" name="v" type="Vector3">
			</argument>
			<description>
				Transforms the vector [code]v[/code] by this quaternion.
			</description>
		</method>
	</methods>
	<members>
		<member name="w" type="float" setter="" getter="" default="1.0">
			W component of the quaternion.
		</member>
		<member name="x" type="float" setter="" getter="" default="0.0">
			X component of the quaternion.
		</member>
		<member name="y" type="float" setter="" getter="" default="0.0">
			Y component of the quaternion.
		</member>
		<member name="z" type="float" setter="" getter="" default="0.0">
			Z component of the quaternion.
		</member>
	</members>
	<constants>
		<constant name="IDENTITY" value="Quat( 0, 0, 0, 1 )">
			The identity rotation. Equivalent to an identity matrix. If a vector is transformed by an identity quaternion, it will not change.
		</constant>
	</constants>
</class>
