diff --git a/doc/classes/Quaternion.xml b/doc/classes/Quaternion.xml index a606570ccfa8..c9b4bc63d48a 100644 --- a/doc/classes/Quaternion.xml +++ b/doc/classes/Quaternion.xml @@ -4,19 +4,24 @@ A unit quaternion used for representing 3D rotations. - Quaternions are similar to [Basis], which implements the matrix representation of rotations. Unlike [Basis], which stores rotation, scale, and shearing, quaternions only store rotation. - Quaternions can be parametrized using both an axis-angle pair or Euler angles. Due to their compactness and the way they are stored in memory, certain operations (obtaining axis-angle and performing SLERP, in particular) are more efficient and robust against floating-point errors. - [b]Note:[/b] Quaternions need to be normalized before being used for rotation. + The [Quaternion] built-in [Variant] type is a 4D data structure that represents rotation in the form of a [url=https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation]Hamilton convention quaternion[/url]. Compared to the [Basis] type which can store both rotation and scale, quaternions can [i]only[/i] store rotation. + A [Quaternion] is composed by 4 floating-point components: [member w], [member x], [member y], and [member z]. These components are very compact in memory, and because of this some operations are more efficient and less likely to cause floating-point errors. Methods such as [method get_angle], [method get_axis], and [method slerp] are faster than their [Basis] counterparts. + For a great introduction to quaternions, see [url=https://www.youtube.com/watch?v=d4EgbgTm0Bg]this video by 3Blue1Brown[/url]. You do not need to know the math behind quaternions, as Godot provides several helper methods that handle it for you. These include [method slerp] and [method spherical_cubic_interpolate], as well as the [code]*[/code] operator. + [b]Note:[/b] Quaternions must be normalized before being used for rotation (see [method normalized]). + [b]Note:[/b] Similarly to [Vector2] and [Vector3], the components of a quaternion use 32-bit precision by default, unlike [float] which is always 64-bit. If double precision is needed, compile the engine with the option [code]precision=double[/code]. + https://www.youtube.com/watch?v=d4EgbgTm0Bg + https://quaternions.online/ $DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions https://godotengine.org/asset-library/asset/678 + https://iwatake2222.github.io/rotation_master/rotation_master.html - Constructs a default-initialized quaternion with all components set to [code]0[/code]. + Constructs a [Quaternion] identical to the [constant IDENTITY]. @@ -31,7 +36,7 @@ - Constructs a quaternion representing the shortest arc between two points on the surface of a sphere with a radius of [code]1.0[/code]. + Constructs a [Quaternion] representing the shortest arc between [param arc_from] and [param arc_to]. These can be imagined as two points intersecting a sphere's surface, with a radius of [code]1.0[/code]. @@ -39,14 +44,15 @@ - Constructs a quaternion that will rotate around the given axis by the specified angle. The axis must be a normalized vector. + Constructs a [Quaternion] representing rotation around the [param axis] by the given [param angle], in radians. The axis must be a normalized vector. - Constructs a quaternion from the given [Basis]. + Constructs a [Quaternion] from the given rotation [Basis]. + This constructor is faster than [method Basis.get_rotation_quaternion], but the given basis must be [i]orthonormalized[/i] (see [method Basis.orthonormalized]). Otherwise, the constructor fails and returns [constant IDENTITY]. @@ -56,7 +62,8 @@ - Constructs a quaternion defined by the given values. + Constructs a [Quaternion] defined by the given values. + [b]Note:[/b] Only normalized quaternions represent rotation; if these values are not normalized, the new [Quaternion] will not be a valid rotation. @@ -73,7 +80,8 @@ - Returns the dot product of two quaternions. + Returns the dot product between this quaternion and [param with]. + This is equivalent to [code](quat.x * with.x) + (quat.y * with.y) + (quat.z * with.z) + (quat.w * with.w)[/code]. @@ -85,7 +93,7 @@ - Constructs a Quaternion from Euler angles in YXZ rotation order. + Constructs a new [Quaternion] from the given [Vector3] of [url=https://en.wikipedia.org/wiki/Euler_angles]Euler angles[/url], in radians. This method always uses the YXZ convention ([constant EULER_ORDER_YXZ]). @@ -102,13 +110,14 @@ - Returns the quaternion's rotation in the form of Euler angles. The Euler order depends on the [param order] parameter, for example using the YXZ convention: since this method decomposes, first Z, then X, and Y last. See the [enum EulerOrder] enum for possible values. The returned vector contains the rotation angles in the format (X angle, Y angle, Z angle). + Returns this quaternion's rotation as a [Vector3] of [url=https://en.wikipedia.org/wiki/Euler_angles]Euler angles[/url], in radians. + The order of each consecutive rotation can be changed with [param order] (see [enum EulerOrder] constants). By default, the YXZ convention is used ([constant EULER_ORDER_YXZ]): Z (roll) is calculated first, then X (pitch), and lastly Y (yaw). When using the opposite method [method from_euler], this order is reversed. - Returns the inverse of the quaternion. + Returns the inverse version of this quaternion, inverting the sign of every component except [member w]. @@ -127,30 +136,32 @@ - Returns whether the quaternion is normalized or not. + Returns [code]true[/code] if this quaternion is normalized. See also [method normalized]. - Returns the length of the quaternion. + Returns this quaternion's length, also called magnitude. - Returns the length of the quaternion, squared. + Returns this quaternion's length, squared. + [b]Note:[/b] This method is faster than [method length], so prefer it if you only need to compare quaternion lengths. + Returns the logarithm of this quaternion. Multiplies this quaternion's rotation axis by its rotation angle, and stores the result in the returned quaternion's vector part ([member x], [member y], and [member z]). The returned quaternion's real part ([member w]) is always [code]0.0[/code]. - Returns a copy of the quaternion, normalized to unit length. + Returns a copy of this quaternion, normalized so that its length is [code]1.0[/code]. See also [method is_normalized]. @@ -158,8 +169,7 @@ - Returns the result of the spherical linear interpolation between this quaternion and [param to] by amount [param weight]. - [b]Note:[/b] Both quaternions must be normalized. + Performs a spherical-linear interpolation with the [param to] quaternion, given a [param weight] and returns the result. Both this quaternion and [param to] must be normalized. @@ -167,7 +177,7 @@ - Returns the result of the spherical linear interpolation between this quaternion and [param to] by amount [param weight], but without checking if the rotation path is not bigger than 90 degrees. + Performs a spherical-linear interpolation with the [param to] quaternion, given a [param weight] and returns the result. Unlike [method slerp], this method does not check if the rotation path is smaller than 90 degrees. Both this quaternion and [param to] must be normalized. @@ -197,25 +207,26 @@ - W component of the quaternion (real part). - Quaternion components should usually not be manipulated directly. + W component of the quaternion. This is the "real" part. + [b]Note:[/b] Quaternion components should usually not be manipulated directly. - X component of the quaternion (imaginary [code]i[/code] axis part). - Quaternion components should usually not be manipulated directly. + X component of the quaternion. This is the value along the "imaginary" [code]i[/code] axis. + [b]Note:[/b] Quaternion components should usually not be manipulated directly. - Y component of the quaternion (imaginary [code]j[/code] axis part). - Quaternion components should usually not be manipulated directly. + Y component of the quaternion. This is the value along the "imaginary" [code]j[/code] axis. + [b]Note:[/b] Quaternion components should usually not be manipulated directly. - Z component of the quaternion (imaginary [code]k[/code] axis part). - Quaternion components should usually not be manipulated directly. + Z component of the quaternion. This is the value along the "imaginary" [code]k[/code] axis. + [b]Note:[/b] Quaternion components should usually not be manipulated directly. - The identity quaternion, representing no rotation. Equivalent to an identity [Basis] matrix. If a vector is transformed by an identity quaternion, it will not change. + The identity quaternion, representing no rotation. This has the same rotation as [constant Basis.IDENTITY]. + If a [Vector3] is rotated (multiplied) by this quaternion, it does not change. @@ -223,7 +234,7 @@ - Returns [code]true[/code] if the quaternions are not equal. + Returns [code]true[/code] if the components of both quaternions are not exactly equal. [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable. @@ -231,63 +242,69 @@ - Composes these two quaternions by multiplying them together. This has the effect of rotating the second quaternion (the child) by the first quaternion (the parent). + Composes (multiplies) two quaternions. This rotates the [param right] quaternion (the child) by this quaternion (the parent). - Rotates (multiplies) the [Vector3] by the given [Quaternion]. + Rotates (multiplies) the [param right] vector by this quaternion, returning a [Vector3]. - Multiplies each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression. + Multiplies each component of the [Quaternion] by the right [float] value. + This operation is not meaningful on its own, but it can be used as a part of a larger expression. - Multiplies each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression. + Multiplies each component of the [Quaternion] by the right [int] value. + This operation is not meaningful on its own, but it can be used as a part of a larger expression. - Adds each component of the left [Quaternion] to the right [Quaternion]. This operation is not meaningful on its own, but it can be used as a part of a larger expression, such as approximating an intermediate rotation between two nearby rotations. + Adds each component of the left [Quaternion] to the right [Quaternion]. + This operation is not meaningful on its own, but it can be used as a part of a larger expression, such as approximating an intermediate rotation between two nearby rotations. - Subtracts each component of the left [Quaternion] by the right [Quaternion]. This operation is not meaningful on its own, but it can be used as a part of a larger expression. + Subtracts each component of the left [Quaternion] by the right [Quaternion]. + This operation is not meaningful on its own, but it can be used as a part of a larger expression. - Divides each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression. + Divides each component of the [Quaternion] by the right [float] value. + This operation is not meaningful on its own, but it can be used as a part of a larger expression. - Divides each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression. + Divides each component of the [Quaternion] by the right [int] value. + This operation is not meaningful on its own, but it can be used as a part of a larger expression. - Returns [code]true[/code] if the quaternions are exactly equal. + Returns [code]true[/code] if the components of both quaternions are exactly equal. [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable. @@ -295,7 +312,8 @@ - Access quaternion components using their index. [code]q[0][/code] is equivalent to [code]q.x[/code], [code]q[1][/code] is equivalent to [code]q.y[/code], [code]q[2][/code] is equivalent to [code]q.z[/code], and [code]q[3][/code] is equivalent to [code]q.w[/code]. + Accesses each component of this quaternion by their index. + Index [code]0[/code] is the same as [member x], index [code]1[/code] is the same as [member y], index [code]2[/code] is the same as [member z], and index [code]3[/code] is the same as [member w]. @@ -307,7 +325,7 @@ - Returns the negative value of the [Quaternion]. This is the same as writing [code]Quaternion(-q.x, -q.y, -q.z, -q.w)[/code]. This operation results in a quaternion that represents the same rotation. + Returns the negative value of the [Quaternion]. This is the same as multiplying all components by [code]-1[/code]. This operation results in a quaternion that represents the same rotation.