Data type
CFrame
A data type that represents both a 3D position and orientation.
The CFrame data type, short for coordinate frame, describes a
3D position and orientation. It is made up of a positional component and a
rotational component and includes essential arithmetic operations for
working with 3D data on Roblox.
-- Create a CFrame at a certain position and Euler rotation
local cf = CFrame.new(0, 5, 0) * CFrame.fromEulerAngles(math.rad(45), 0, 0)For an introduction to the CFrame data type, see
CFrames.
Positional Component#
The positional component is available as a Vector3. In addition,
the components of a CFrame object's position are also available in
the X, Y and Z
properties like a Vector3.
Rotational Component#
CFrame stores 3D rotation data in a 3×3 rotation matrix.
These values are returned by the CFrame:GetComponents() function
after the x, y and z positional values. This matrix is used internally
when doing calculations involving rotations, using radians as their unit
(for conversion from one to the other, use math.rad() or
math.deg()). For more information on how the Roblox Engine performs
rotations, see RotationOrder.
The table below represents the components of a CFrame object's
rotation matrix and their relationship with the available vector properties
such as LookVector and
RightVector. Although the individual components
of the rotation matrix are rarely useful by themselves, the vector properties
which derive from them are much more useful.
| XVector, RightVector | YVector, UpVector | ZVector, -LookVector† |
|---|---|---|
| R00 | R01 | R02 |
| R10 | R11 | R12 |
| R20 | R21 | R22 |
Datatype.CFrame.LookVector|LookVector represents the negated
column components. The Datatype.CFrame.LookVector|LookVector is
useful because many Class.Instance|Instances such as the
Class.Camera|Camera and Class.Attachment|Attachments
treat that vector as the direction the instance is pointing.Constructors 16#
| new | Returns a blank identity CFrame. |
| new | Returns a CFrame with no rotation with the position of the
provided Vector3. |
| new | Returns a CFrame with the position of the first
Vector3 and an orientation pointed toward the second. |
| new | Returns a CFrame with a position comprised of the provided x,
y, and z components. |
| new | Returns a CFrame from position (x, y, z) and quaternion
(qX, qY, qZ, qW). |
| new | Returns a CFrame from position (x, y, z) with an
orientation specified by the rotation matrix. |
| lookAt | Returns a CFrame with the position of the first
Vector3 and an orientation pointed toward the second. |
| lookAlong | Returns a CFrame with the position of the first
Vector3 and an orientation directed along the second. |
| fromRotationBetweenVectors | Returns a CFrame representing the orientation needed to rotate
from the first Vector3 to the second, with the position set to
zero. |
| fromEulerAngles | Returns a rotated CFrame from angles rx, ry, and rz in
radians. Rotations are applied in the optional RotationOrder with a
default of XYZ. |
| fromEulerAnglesXYZ | Returns a rotated CFrame from angles rx, ry, and rz in
radians using RotationOrder.XYZ. |
| fromEulerAnglesYXZ | Returns a rotated CFrame from angles rx, ry, and rz in
radians using RotationOrder.YXZ. |
| Angles | Equivalent to fromEulerAnglesXYZ(). |
| fromOrientation | Equivalent to fromEulerAnglesYXZ(). |
| fromAxisAngle | Returns a rotated CFrame from a unit Vector3 and a
rotation in radians. |
| fromMatrix | Returns a CFrame from a translation and the columns of a
rotation matrix. |
new()#
Creates an identity CFrame with position (0, 0, 0) and no
rotation (identity rotation matrix). This is equivalent to
CFrame.identity.
new(pos: Vector3)#
Returns a CFrame positioned at pos with no rotation (identity
rotation matrix). The orientation defaults to the identity, meaning the
local axes align with the world axes.
| Name | Type | Default | Description |
|---|---|---|---|
pos | Vector3 | The 3D position for the new CFrame. |
new(pos: Vector3, lookAt: Vector3)#
Returns a new CFrame located at pos and facing towards
lookAt, assuming that (0, 1, 0) is considered "up" in world space.
This constructor overload has been replaced by CFrame.lookAt(),
which accomplishes a similar goal. It remains for the sake of backward
compatibility.
At high pitch angles (around 82 degrees), you may experience numerical
instability. If this is an issue, or if you require a different "up"
vector, use CFrame.fromMatrix() to more accurately construct
the CFrame. Additionally, if lookAt is directly above pos
(pitch angle of 90 degrees), the "up" vector switches to the X axis.
new(x: number, y: number, z: number)#
Returns a CFrame positioned at (x, y, z) with no rotation
(identity rotation matrix). This is equivalent to
CFrame.new(Vector3.new(x, y, z)).
| Name | Type | Default | Description |
|---|---|---|---|
x | number | The X component of the position. | |
y | number | The Y component of the position. | |
z | number | The Z component of the position. |
new(x: number, y: number, z: number, qX: number, qY: number, qZ: number, qW: number)#
Returns a CFrame from position (x, y, z) and quaternion
(qX, qY, qZ, qW). The quaternion is expected to be of unit length
to represent a valid rotation. If this isn't the case, the quaternion will
be normalized.
| Name | Type | Default | Description |
|---|---|---|---|
x | number | The X component of the position. | |
y | number | The Y component of the position. | |
z | number | The Z component of the position. | |
qX | number | The X component of the quaternion rotation. | |
qY | number | The Y component of the quaternion rotation. | |
qZ | number | The Z component of the quaternion rotation. | |
qW | number | The W (scalar) component of the quaternion rotation. |
new(x: number, y: number, z: number, R00: number, R01: number, R02: number, R10: number, R11: number, R12: number, R20: number, R21: number, R22: number)#
Creates a CFrame from position (x, y, z) with an
orientation specified by the rotation matrix.
[[R00 R01 R02] [R10 R11 R12] [R20 R21 R22]]
| Name | Type | Default | Description |
|---|---|---|---|
x | number | The X component of the position. | |
y | number | The Y component of the position. | |
z | number | The Z component of the position. | |
R00 | number | The row 1, column 1 element of the rotation matrix. | |
R01 | number | The row 1, column 2 element of the rotation matrix. | |
R02 | number | The row 1, column 3 element of the rotation matrix. | |
R10 | number | The row 2, column 1 element of the rotation matrix. | |
R11 | number | The row 2, column 2 element of the rotation matrix. | |
R12 | number | The row 2, column 3 element of the rotation matrix. | |
R20 | number | The row 3, column 1 element of the rotation matrix. | |
R21 | number | The row 3, column 2 element of the rotation matrix. | |
R22 | number | The row 3, column 3 element of the rotation matrix. |
lookAt(at: Vector3, lookAt: Vector3, up: Vector3 = Vector3.yAxis)#
Returns a new CFrame with the position of at and facing
towards lookAt, optionally specifying the upward direction (up) with a
default of (0, 1, 0).
lookAlong(at: Vector3, direction: Vector3, up: Vector3 = Vector3.yAxis)#
Returns a new CFrame with the position of at and facing along
direction, optionally specifying the upward direction (up) with a
default of (0, 1, 0).
This constructor is equivalent to CFrame.lookAt(at, at + direction).
fromRotationBetweenVectors(from: Vector3, to: Vector3)#
Returns a CFrame whose rotation represents the shortest-arc
rotation that aligns vector from with vector to. The input vectors do
not need to be unit length; they are normalized internally. The resulting
CFrame has its position set to (0, 0, 0).
-- Rotate a direction to face another direction
local from = Vector3.new(0, 1, 0)
local to = Vector3.new(1, 0, 0)
local cf = CFrame.fromRotationBetweenVectors(from, to)
print(cf * from) --> approximately (1, 0, 0)fromEulerAngles(rx: number, ry: number, rz: number, order: RotationOrder = Enum.RotationOrder.XYZ)#
Returns a rotated CFrame from angles rx, ry, and rz in
radians. Rotations are applied in the optional RotationOrder with a
default of XYZ, equivalent to:
local rx, ry, rz = math.rad(30), math.rad(45), math.rad(60)
local cframe = CFrame.fromEulerAngles(rx, 0, 0) -- X
* CFrame.fromEulerAngles(0, ry, 0) -- Y
* CFrame.fromEulerAngles(0, 0, rz) -- Z
local rx_out, ry_out, rz_out = cframe:ToEulerAnglesXYZ()
print(string.format("rx: %.2f, ry: %.2f, rz: %.2f", math.deg(rx_out), math.deg(ry_out), math.deg(rz_out))) --> rx: 30.00, ry: 45.00, rz: 60.00| Name | Type | Default | Description |
|---|---|---|---|
rx | number | Rotation angle around the X axis in radians. | |
ry | number | Rotation angle around the Y axis in radians. | |
rz | number | Rotation angle around the Z axis in radians. | |
order | RotationOrder | Enum.RotationOrder.XYZ | The order in which rotations are applied. |
fromEulerAnglesXYZ(rx: number, ry: number, rz: number)#
Returns a rotated CFrame from angles rx, ry, and rz in
radians using RotationOrder.XYZ, equivalent to:
local rx, ry, rz = math.rad(30), math.rad(45), math.rad(60)
local cframe = CFrame.fromEulerAngles(rx, 0, 0) -- X
* CFrame.fromEulerAngles(0, ry, 0) -- Y
* CFrame.fromEulerAngles(0, 0, rz) -- Z
local rx_out, ry_out, rz_out = cframe:ToEulerAnglesXYZ()
print(string.format("rx: %.2f, ry: %.2f, rz: %.2f", math.deg(rx_out), math.deg(ry_out), math.deg(rz_out))) --> rx: 30.00, ry: 45.00, rz: 60.00| Name | Type | Default | Description |
|---|---|---|---|
rx | number | Rotation angle around the X axis in radians. | |
ry | number | Rotation angle around the Y axis in radians. | |
rz | number | Rotation angle around the Z axis in radians. |
fromEulerAnglesYXZ(rx: number, ry: number, rz: number)#
Returns a rotated CFrame from angles rx, ry, and rz in
radians using RotationOrder.YXZ, equivalent to:
local rx, ry, rz = math.rad(30), math.rad(45), math.rad(60)
local cframe = CFrame.fromEulerAngles(0, ry, 0) -- Y
* CFrame.fromEulerAngles(rx, 0, 0) -- X
* CFrame.fromEulerAngles(0, 0, rz) -- Z
local rx_out, ry_out, rz_out = cframe:ToEulerAnglesYXZ()
print(string.format("rx: %.2f, ry: %.2f, rz: %.2f", math.deg(rx_out), math.deg(ry_out), math.deg(rz_out))) --> rx: 30.00, ry: 45.00, rz: 60.00| Name | Type | Default | Description |
|---|---|---|---|
rx | number | Rotation angle around the X axis in radians. | |
ry | number | Rotation angle around the Y axis in radians. | |
rz | number | Rotation angle around the Z axis in radians. |
Angles(rx: number, ry: number, rz: number)#
Equivalent to fromEulerAnglesXYZ().
| Name | Type | Default | Description |
|---|---|---|---|
rx | number | Rotation angle around the X axis in radians. | |
ry | number | Rotation angle around the Y axis in radians. | |
rz | number | Rotation angle around the Z axis in radians. |
fromOrientation(rx: number, ry: number, rz: number)#
Equivalent to fromEulerAnglesYXZ().
| Name | Type | Default | Description |
|---|---|---|---|
rx | number | Rotation angle around the X axis in radians. | |
ry | number | Rotation angle around the Y axis in radians. | |
rz | number | Rotation angle around the Z axis in radians. |
fromAxisAngle(v: Vector3, r: number)#
Returns a CFrame rotated r radians around the axis v. The
axis vector is normalized internally, so it does not need to be unit
length. The resulting CFrame has no translation (position is
(0, 0, 0)). A positive angle represents a counter-clockwise rotation
when looking from the tip of the axis vector toward the origin (right-hand
rule).
-- Rotate 90 degrees around the Y axis
local cf = CFrame.fromAxisAngle(Vector3.yAxis, math.rad(90))| Name | Type | Default | Description |
|---|---|---|---|
v | Vector3 | The axis of rotation (normalized internally). | |
r | number | The rotation angle in radians. |
fromMatrix(pos: Vector3, vX: Vector3, vY: Vector3, vZ: Vector3)#
Returns a CFrame from a translation and the columns of a
rotation matrix. If vZ is excluded, the third column is calculated as
vX:Cross(vY).Unit.
| Name | Type | Default | Description |
|---|---|---|---|
pos | Vector3 | The 3D position of the CFrame. | |
vX | Vector3 | Equivalent to RightVector. | |
vY | Vector3 | Equivalent to UpVector. | |
vZ | Vector3 | Equivalent to -LookVector. |
Constants 1#
Properties 12#
identityCFrame | An identity CFrame with no translation or rotation. |
PositionVector3 | The 3D position of the CFrame. |
RotationCFrame | A copy of the CFrame with no translation. |
Xnumber | The X coordinate of the position. |
Ynumber | The Y coordinate of the position. |
Znumber | The Z coordinate of the position. |
LookVectorVector3 | The forward-direction component of the CFrame object's
orientation, equivalent to the negated form of
ZVector. |
RightVectorVector3 | The right-direction component of the CFrame object's
orientation. |
UpVectorVector3 | The up-direction component of the CFrame object's orientation. |
XVectorVector3 | Equivalent to RightVector. |
YVectorVector3 | Equivalent to UpVector. |
ZVectorVector3 | The Z component of the CFrame object's orientation. Equivalent
to the third column of the rotation matrix. |
identity: CFrame#
Position: Vector3#
Rotation: CFrame#
X: number#
The X component of the CFrame object's world-space position.
Equivalent to CFrame.Position.X.
Y: number#
The Y component of the CFrame object's world-space position.
Equivalent to CFrame.Position.Y.
Z: number#
The Z component of the CFrame object's world-space position.
Equivalent to CFrame.Position.Z.
LookVector: Vector3#
The forward-direction component of the CFrame object's
orientation, equivalent to the negated ZVector
or the negated third column of the rotation matrix.
local cf = CFrame.new(0, 0, 0)
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()
print(cf.LookVector) --> (-0, -0, -1)
print(-cf.ZVector) --> (-0, -0, -1)
print(-R02, -R12, -R22) --> (-0 -0 -1)Adding a CFrame object's
LookVector to itself produces a
CFrame moved forward in whichever direction it's facing by 1
unit.
RightVector: Vector3#
The right-direction component of the CFrame object's
orientation. Equivalent to XVector or the first
column of the rotation matrix.
local cf = CFrame.new(0, 0, 0)
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()
print(cf.RightVector) --> (1, 0, 0)
print(cf.XVector) --> (1, 0, 0)
print(R00, R10, R20) --> (1 0 0)UpVector: Vector3#
The up-direction component of the CFrame object's orientation.
Equivalent to YVector or the second column of
the rotation matrix.
local cf = CFrame.new(0, 0, 0)
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()
print(cf.UpVector) --> (0, 1, 0)
print(cf.YVector) --> (0, 1, 0)
print(R01, R11, R21) --> (0 1 0)XVector: Vector3#
The X component of the CFrame object's orientation. Equivalent
to RightVector or the first column of the
rotation matrix.
local cf = CFrame.new(0, 0, 0)
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()
print(cf.XVector) --> (1, 0, 0)
print(cf.RightVector) --> (1, 0, 0)
print(R00, R10, R20) --> (1 0 0)YVector: Vector3#
The Y component of the CFrame object's orientation. Equivalent
to UpVector or the second column of the
rotation matrix.
local cf = CFrame.new(0, 0, 0)
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()
print(cf.YVector) --> (0, 1, 0)
print(cf.UpVector) --> (0, 1, 0)
print(R01, R11, R21) --> (0 1 0)ZVector: Vector3#
The Z component of the CFrame object's orientation. Equivalent
to the negated LookVector or the third column
of the rotation matrix.
local cf = CFrame.new(0, 0, 0)
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()
print(cf.ZVector) --> (0, 0, 1)
print(-cf.LookVector) --> (0, 0, 1)
print(R02, R12, R22) --> (0 0 1)Methods 18#
| Inverse | Returns the inverse of the CFrame. |
| Lerp | Returns a CFrame interpolated between itself and goal by the
fraction alpha. |
| Orthonormalize | Returns an orthonormalized copy of the CFrame. |
| ToWorldSpace | Receives one or more CFrame objects and returns them
transformed from object to world space. |
| ToObjectSpace | Receives one or more CFrame objects and returns them
transformed from world to object space. |
| PointToWorldSpace | Receives one or more Vector3 objects and returns them
transformed from object to world space. |
| PointToObjectSpace | Receives one or more Vector3 objects and returns them
transformed from world to object space. |
| VectorToWorldSpace | Receives one or more Vector3 objects and returns them rotated
from object to world space. |
| VectorToObjectSpace | Receives one or more Vector3 objects and returns them rotated
from world to object space. |
| GetComponents | Returns the values x, y, z, R00, R01, R02, R10, R11,
R12, R20, R21, and R22, where x y z represent the position
of the CFrame and R00‑R22 represent its 3×3 rotation
matrix. |
| ToEulerAngles | Returns approximate angles that could be used to generate the
CFrame using the optional RotationOrder. |
| ToEulerAnglesXYZ | Returns the approximate angles (in radians) that could be used to generate
the CFrame using RotationOrder.XYZ. |
| ToEulerAnglesYXZ | Returns the approximate angles (in radians) that could be used to generate
the CFrame using RotationOrder.YXZ. |
| ToOrientation | Returns the approximate angles (in radians) that could be used to generate the CFrame using the YXZ rotation order. |
| ToAxisAngle | Returns a tuple containing a unit Vector3 axis and a rotation
angle in radians. |
| components | Equivalent to CFrame:GetComponents(). |
| FuzzyEq | Returns true if the other CFrame is sufficiently close to
this CFrame in both position and rotation. |
| AngleBetween | Returns the angle, in radians, between the orientation of one
CFrame and another. |
Inverse(): CFrame#
Returns the inverse of the CFrame, representing the
transformation that undoes the original. For any CFrame cf,
the expression cf * cf:Inverse() produces the identity
CFrame. The inverse reverses both the rotation (transposing the
rotation matrix) and the translation.
Returns
CFrame— The inverse CFrame that reverses this transformation.
Lerp(goal: CFrame, alpha: number): CFrame#
Returns a CFrame interpolated between itself and goal by the
fraction alpha. The positional component is interpolated linearly while
the rotational component is interpolated using spherical linear
interpolation (slerp), producing a constant-speed rotation along the
shortest arc. An alpha of 0 returns the original CFrame and
an alpha of 1 returns goal.
| Name | Type | Default | Description |
|---|---|---|---|
goal | CFrame | The target CFrame to interpolate toward. | |
alpha | number | The interpolation fraction, where 0 is the original and 1 is goal. |
Returns
CFrame— The interpolated CFrame between the original andgoal.
Orthonormalize(): CFrame#
Returns an orthonormalized copy of the CFrame. The
BasePart.CFrame property automatically applies orthonormalization,
but other APIs which take CFrames do not, so this method
is occasionally necessary when incrementally updating a CFrame
and using it with them.
Returns
CFrame— A copy of this CFrame with its rotation matrix orthonormalized.
ToWorldSpace(...: Tuple<CFrame>): Tuple<CFrame>#
Receives one or more CFrame objects and returns them
transformed from object to world space. Equivalent to:
CFrame * cf
local cf = CFrame.new(5, 10, 0)
local offset = CFrame.new(0, 2, 0)
-- Output world space of offset CFrame relative to calling CFrame
print(cf:ToWorldSpace(offset)) --> 5, 12, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1| Name | Type | Default | Description |
|---|---|---|---|
... | Tuple<CFrame> | One or more CFrames specified in object (local) space. |
Returns
Tuple<CFrame>— The CFrames transformed into world space.
ToObjectSpace(...: Tuple<CFrame>): Tuple<CFrame>#
Receives one or more CFrame objects and returns them
transformed from world to object space. Equivalent to:
CFrame:Inverse() * cf
| Name | Type | Default | Description |
|---|---|---|---|
... | Tuple<CFrame> | One or more CFrames specified in world space. |
Returns
Tuple<CFrame>— The CFrames transformed into object (local) space.
PointToWorldSpace(...: Tuple<Vector3>): Tuple<Vector3>#
Receives one or more Vector3 objects and returns them
transformed from object to world space. Equivalent to:
CFrame * v3
local cf = CFrame.new(5, 10, 0)
-- Output core world space of the CFrame
print(cf:PointToWorldSpace()) --> 5, 10, 0
-- Output world space of a Vector3 (0, 4, 0) relative to the CFrame (object space)
print(cf:PointToWorldSpace(Vector3.new(0, 4, 0))) --> 5, 14, 0| Name | Type | Default | Description |
|---|---|---|---|
... | Tuple<Vector3> | One or more points specified in object (local) space. |
Returns
Tuple<Vector3>— The points transformed into world space.
PointToObjectSpace(...: Tuple<Vector3>): Tuple<Vector3>#
Receives one or more Vector3 objects and returns them
transformed from world to object space. Equivalent to:
CFrame:Inverse() * v3
| Name | Type | Default | Description |
|---|---|---|---|
... | Tuple<Vector3> | One or more points specified in world space. |
Returns
Tuple<Vector3>— The points transformed into object (local) space.
VectorToWorldSpace(...: Tuple<Vector3>): Tuple<Vector3>#
Receives one or more Vector3 objects and returns them rotated
from object to world space. Equivalent to:
(CFrame - CFrame.Position) * v3
| Name | Type | Default | Description |
|---|---|---|---|
... | Tuple<Vector3> | One or more direction vectors specified in object (local) space. |
Returns
Tuple<Vector3>— The vectors rotated into world space (translation ignored).
VectorToObjectSpace(...: Tuple<Vector3>): Tuple<Vector3>#
Receives one or more Vector3 objects and returns them rotated
from world to object space. Equivalent to:
(CFrame:Inverse() - CFrame:Inverse().Position) * v3
| Name | Type | Default | Description |
|---|---|---|---|
... | Tuple<Vector3> | One or more direction vectors specified in world space. |
Returns
Tuple<Vector3>— The vectors rotated into object (local) space (translation ignored).
GetComponents(): Tuple#
Returns the 12 numeric components of the CFrame as a tuple:
x, y, z (position), followed by R00, R01, R02, R10, R11,
R12, R20, R21, R22 (the 3×3 rotation matrix in row-major
order). This is the reverse of the 12-argument CFrame.new()
constructor.
local cf = CFrame.new(1, 2, 3) * CFrame.fromEulerAnglesXYZ(0, math.rad(90), 0)
local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = cf:GetComponents()Returns
Tuple— The 12 numeric values: x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22.
ToEulerAngles(order: RotationOrder = Enum.RotationOrder.XYZ): number, number, number#
Returns approximate angles that could be used to generate the
CFrame using the optional RotationOrder. If you don't
provide order, the method uses RotationOrder.XYZ.
| Name | Type | Default | Description |
|---|---|---|---|
order | RotationOrder | Enum.RotationOrder.XYZ | The rotation order used for decomposition. |
Returns
number— The X-axis rotation angle in radians.number— The Y-axis rotation angle in radians.number— The Z-axis rotation angle in radians.
ToEulerAnglesXYZ(): number, number, number#
Returns the approximate angles, in radians, that could be used to generate
the CFrame using RotationOrder.XYZ. The three returned
values represent rotations around the X, Y, and Z axes respectively. Due
to the nature of Euler angle decomposition, the angles are approximate and
subject to gimbal lock near pitch angles of ±90 degrees.
Returns
number— The X-axis rotation angle in radians.number— The Y-axis rotation angle in radians.number— The Z-axis rotation angle in radians.
ToEulerAnglesYXZ(): number, number, number#
Returns the approximate angles, in radians, that could be used to generate
the CFrame using RotationOrder.YXZ. The three returned
values represent rotations around the X, Y, and Z axes respectively. Due
to the nature of Euler angle decomposition, the angles are approximate and
subject to gimbal lock near pitch angles of ±90 degrees.
Returns
number— The X-axis rotation angle in radians.number— The Y-axis rotation angle in radians.number— The Z-axis rotation angle in radians.
ToOrientation(): number, number, number#
Returns the approximate angles, in radians, that could be used to generate
the CFrame using RotationOrder.YXZ. Equivalent to
CFrame:ToEulerAnglesYXZ().
Returns
number— The X-axis rotation angle in radians.number— The Y-axis rotation angle in radians.number— The Z-axis rotation angle in radians.
ToAxisAngle(): Vector3, number#
Returns a unit Vector3 representing the axis of rotation and a
number representing the angle of rotation in radians. A positive angle
represents counter-clockwise rotation when looking from the tip of the
axis vector toward the origin (right-hand rule). This is the inverse of
CFrame.fromAxisAngle().
Returns
Vector3— A unit vector representing the axis of rotation.number— The rotation angle in radians.
components(): Tuple#
Equivalent to CFrame:GetComponents().
Returns
Tuple— The 12 numeric values: x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22.
FuzzyEq(other: CFrame, epsilon: number = 0.00001 (1e-5)): bool#
Returns true if the other CFrame is sufficiently close to
this CFrame in both position and rotation. The epsilon value
is used to control the tolerance for this similarity; this value is
optional and should be a small positive value if provided. The similarity
for position is component-wise while rotation uses a fast approximation of
the angle difference.
| Name | Type | Default | Description |
|---|---|---|---|
other | CFrame | The CFrame to compare against. | |
epsilon | number | 0.00001 (1e-5) | The tolerance for comparing position and rotation components. |
Returns
bool— True if the two CFrames are withinepsilonof each other.
AngleBetween(other: CFrame): number#
Returns the angle, in radians, between the orientation of one
CFrame and another. This function does not take the position of
either CFrame into account and only looks at the relative
orientation.
| Name | Type | Default | Description |
|---|---|---|---|
other | CFrame | The CFrame whose orientation is compared against this CFrame. |
Returns
number— The angle in radians between the two orientations, in the range [0, pi].
Math operations 4#
| Operation | Description |
|---|---|
CFrame * CFrame → CFrame | Produces a new CFrame representing the composition of the two
CFrames. |
CFrame * Vector3 → Vector3 | Produces a Vector3 transformed from object to world
coordinates. |
CFrame + Vector3 → CFrame | Produces a CFrame translated in world space by the
Vector3. |
CFrame - Vector3 → CFrame | Produces a CFrame translated in world space by the negative
Vector3. |