跳到主要内容

SQuaternion

Index​

Functions Index​

Function
string ToString ()
float Angle (SQuaternion b)
SQuaternion Lerp (SQuaternion b, float t)
SQuaternion Slerp (SQuaternion b, float t)
SQuaternion RotateTowards (SQuaternion b, float delta)
float Dot (SQuaternion b)
bool Equals (SQuaternion other)
Static Functions
static SQuaternion New (float x, float y, float z, float w)
static SQuaternion Euler (float x, float y, float z)
static SQuaternion AngleAxis (SVector axis, float angle)

static SQuaternion LookRotation (SVector forward)
static SQuaternion LookRotation (SVector forward, SVector up)

static SVector operator (SQuaternion a, SVector b)
static SQuaternion operator (SQuaternion a, SQuaternion b)

static SQuaternion FromToRotation (SVector a, SVector b)

Properties Index​

Property
float X get set
float Y get set
float Z get set
float W get set
SVector EulerAngles get
SQuaternion Inverse get
Static Properties
static SQuaternion Identity get

Functions​

ToString​

string ToString ()

Converts a quaternion to a human readable string

aQuaternion = Quaternion.New(0.0, 1.0, 0.0, 0.0)
theString = aQuaternion.ToString()

Angle​

float Angle (SQuaternion b)

Returns the angle between two quaternions

ParameterTypeDescription
local newQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707);
local otherQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0);
angle = newQuat.Angle(otherQuat);

Space.Log(angle);
-- prints 90.0173034667969

Lerp​

SQuaternion Lerp (SQuaternion b, float t)

Linearly interpolates between this and other quaternion, by factor t and returns the result

ParameterTypeDescription
QuatA = Quaternion.New(0.0, 0.707, 0.0, 0.707)
QuatB = Quaternion.New(0.0, 1.0, 0.0, 0.0)
QuatLerpAB = QuatA.Lerp(QuatB, Space.Time * 0.1)
local cube = Space.Host.ExecutingObject

local fromQuat = cube.LocalRotation
local toQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707)
local speed = 0.1

-- The cube will rotate 90 degrees from current rotation by speed amount.
local moveCube = function()
cube.LocalRotation = fromQuat.Lerp(toQuat, Space.Time * speed);
end

cube.OnUpdate(moveCube)

Slerp​

SQuaternion Slerp (SQuaternion b, float t)

Spherically interpolates between this and other quaternion, by factor t and returns the result

ParameterTypeDescription
QuatA = Quaternion.New(0.0, 0.707, 0.0, 0.707)
QuatB = Quaternion.New(0.0, 1.0, 0.0, 0.0)
QuatLerpAB = QuatA.Slerp(QuatB, Space.Time * 0.1)
local cube = Space.Host.ExecutingObject;

local fromQuat = cube.LocalRotation;
local toQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0);
local speed = 0.1;

-- The cube will rotate 180 degrees from current rotation by speed amount.
local moveCube = function()
cube.LocalRotation = fromQuat.Slerp(toQuat, Space.Time * speed)
end

cube.OnUpdate(moveCube)

RotateTowards​

SQuaternion RotateTowards (SQuaternion b, float delta)

Rotates this towards other, by no more than t degrees

ParameterTypeDescription
QuatA = Quaternion.New(0.0, 0.707, 0.0, 0.707)
QuatB = Quaternion.New(0.0, 1.0, 0.0, 0.0)
ARotatedTowardB = QuatA.RotateTowards(QuatB, Space.Time * 0.1)
local cube = Space.Host.ExecutingObject

local fromQuat = cube.LocalRotation
local target = Quaternion.New(0.0, 0.707, 0.0, 0.707)
local speed = 10.0

-- The cube will rotate 90 degrees from current rotation by step amount.
local moveCube = function()
local step = speed * Space.Time
cube.LocalRotation = fromQuat.RotateTowards(target, step)
end

cube.OnUpdate(moveCube)

Dot​

float Dot (SQuaternion b)

Returns the dot product of this and another quaternion

ParameterTypeDescription
local quat = Quaternion.New(0.0, 0.707, 0.0, 0.707);
local quatOther = Quaternion.New(0.0, 0.0, 0.0, 1.0);
Space.Log(quat.Dot(quatOther));
-- prints 0.707000017166138

Equals​

bool Equals (SQuaternion other)

Function Description

ParameterTypeDescription
otherSQuaternionThe other Quaternion that we are comparing with.
QuatA = Quaternion.New(0.0, 0.707, 0.0, 0.707)
QuatB = Quaternion.New(0.0, 1.0, 0.0, 0.0)
isEqual = QuatA.Equals(QuatB)

New​

static SQuaternion New (float x, float y, float z, float w)

Creates a new Quaternion

ParameterTypeDescription
newQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707)

Euler​

static SQuaternion Euler (float x, float y, float z)

Creates a quaternion using Euler angles.

ParameterTypeDescription
newQuat = Quaternion.Euler(0.0, 90.0, 0.0)

AngleAxis​

static SQuaternion AngleAxis (SVector axis, float angle)

Creates a quaternion from an Angle/Axis pair

ParameterTypeDescription
newVector = Vector.New(0.0, 90.0, 0.0)
newQuat = Quaternion.AngleAxis(newVector, 90.0)

LookRotation​

static SQuaternion LookRotation (SVector forward)
static SQuaternion LookRotation (SVector forward, SVector up)

Creates a quaternion a forward vector; presuming up is (0,1,0)

ParameterTypeDescription
local newQuat = Quaternion.LookRotation(Vector.Forward);
-- or
local newQuat = Quaternion.LookRotation(Vector.Forward, Vector.Up);

operator*​

static SVector operator* (SQuaternion a, SVector b)
static SQuaternion operator* (SQuaternion a, SQuaternion b)

The result of using the * operator.

ParameterTypeDescription
newQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0)
newVector = Vector.Forward
rotatedVector = newQuat * newVector

--or

newQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707)
newVector = Vector.New(0.0, 0.0, 0.0)
rotatedVector = newQuat * newQuat

FromToRotation​

static SQuaternion FromToRotation (SVector a, SVector b)

Creates a rotation which rotates from a to b.

Usually you use this to rotate a transform so that one of its axes eg. the y-axis - follows a target direction b in world space.

ParameterTypeDescription
VectorA = Vector.New(0.0,1.0,0.0)
VectorB = Vector.New(1.0,0.0,0.0)
QuaternionFromToRotation = Quaternion.FromToRotation(VectorA, VectorB)

Properties​

X​

float X get set

X axis

newQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0)
newQuat.X = 40.0
obj = Space.Host.ExecutingObject
originalRot = obj.LocalRotation

onStartMethod = function()
Space.Log(originalRot.x)
-- prints the X component of this object as a float

originalRot.x = 0.25
-- assigns 0.25 value to the X component

obj.LocalRotation = originalRot
-- sets the the new rotation
end

obj.OnStart(onStartMethod)

Y​

float Y get set

Y axis

newQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0)
newQuat.Y = 40.0
obj = Space.Host.ExecutingObject
originalRot = obj.LocalRotation

onStartMethod = function()
Space.Log(originalRot.y);
-- prints the Y component of this object as a float

originalRot.y = 0.25;
-- assigns 0.25 value to the Y component

obj.LocalRotation = originalRot;
-- sets the the new rotation
end

obj.OnStart(onStartMethod);

Z​

float Z get set

Z axis

newQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0)
newQuat.Z = 40.0
local obj = Space.Host.ExecutingObject;
local originalRot = obj.LocalRotation;
obj.SubscribeToEvents();

local onStartMethod = function()
Space.Log(originalRot.z);
-- prints the Z component of this object as a float

originalRot.z = 0.25;
-- assigns 0.25 value to the Z component

obj.LocalRotation = originalRot;
-- sets the the new rotation
end

obj.OnStart(onStartMethod);

W​

float W get set

W axis

newQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0)
newQuat.W = 40.0
local obj = Space.Host.ExecutingObject;
local originalRot = obj.LocalRotation;
obj.SubscribeToEvents();

local onStartMethod = function()
Space.Log(originalRot.w);
-- prints the W component of this object as a float

originalRot.w = 0.25;
-- assigns 0.25 value to the W component

obj.LocalRotation = originalRot;
-- sets the the new rotation
end

obj.OnStart(onStartMethod);

EulerAngles​

SVector EulerAngles get

Returns the Euler rotation for this Quaternion

newQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707)
euler = newQuat.EulerAngles

Inverse​

SQuaternion Inverse get

Returns the inverse of this quaternion

quat = Quaternion.New(0.0, 0.707, 0.0, 0.707)
inverseQuat = quat.Inverse

Identity​

static SQuaternion Identity get

Equivalent of new SQuaternion(0,0,0,1)

identity = Quaternion.Identity