Ashasekayi (Talk | contribs) |
Ashasekayi (Talk | contribs) |
||
(28 intermediate revisions by the same user not shown) | |||
Line 10: | Line 10: | ||
''-- prints the X component of this object as a float''<br><br> | ''-- prints the X component of this object as a float''<br><br> | ||
originalRot.'''x''' = 0.25;<br> | originalRot.'''x''' = 0.25;<br> | ||
− | ''-- assigns 0.25 value to the X | + | ''-- assigns 0.25 value to the X component''<br><br> |
obj.LocalRotation = originalRot;<br> | obj.LocalRotation = originalRot;<br> | ||
− | ''-- sets the the new | + | ''-- sets the the new rotation''<br> |
end<br><br> | end<br><br> | ||
obj.OnStart(onStartMethod);}} | obj.OnStart(onStartMethod);}} | ||
Line 59: | Line 59: | ||
==Constructors== | ==Constructors== | ||
− | {{ScriptFunction|SQuaternion|__new|(float x, float y, float z, float w)|Initialises quaternion from four floats}} | + | {{ScriptFunction|SQuaternion|__new|(float x, float y, float z, float w)|Initialises quaternion from four floats|5= |
− | {{ScriptFunction|SQuaternion|__new|(float x, float y, float z)|Creates a quaternion from 3 Euler floats (i.e. 3x 0-360' angles)}} | + | local newQuat = '''Quaternion.New'''(0.0, 0.707, 0.0, 0.707);<br> |
− | {{ScriptFunction|SQuaternion|__new|(SVector | + | ''-- creates a new quaternion with value [0.0, 0.707, 0.0, 0.707]''<br> |
− | {{ScriptFunction|SQuaternion|__new|(SVector forward)|Creates a quaternion a forward vector; presuming up is (0,1,0)}} | + | ''-- which is [0.0, 90.0, 0.0] Euler angles''}} |
− | {{ScriptFunction|SQuaternion|__new|(SVector forward, SVector up)|Creates a quaternion a forward and up vector pair}} | + | |
+ | {{ScriptFunction|SQuaternion|__new|(float x, float y, float z)|Creates a quaternion from 3 Euler floats (i.e. 3x 0-360' angles)|5= | ||
+ | local newQuat = '''Quaternion.Euler'''(0.0, 90.0, 0.0); | ||
+ | ''-- creates a new quaternion with value [0.0, 0.707, 0.0, 0.707]''<br> | ||
+ | ''-- which is [0.0, 90.0, 0.0] Euler angles''}} | ||
+ | |||
+ | {{ScriptFunction|SQuaternion|__new|(SVector axis, float angle)|Creates a quaternion from a Angle / Axis pair|5= | ||
+ | local newVector = Vector.New(0.0, 90.0, 0.0); | ||
+ | local newQuat = '''Quaternion.AngleAxis'''(newVector, 90.0);<br> | ||
+ | ''-- creates a new quaternion with value [0.0, 0.707, 0.0, 0.707]''}} | ||
+ | |||
+ | {{ScriptFunction|SQuaternion|__new|(SVector forward)|Creates a quaternion a forward vector; presuming up is (0,1,0)|5= | ||
+ | local newQuat = '''Quaternion.LookRotation'''(Vector.Forward);}} | ||
+ | |||
+ | {{ScriptFunction|SQuaternion|__new|(SVector forward, SVector up)|Creates a quaternion a forward and up vector pair|5= | ||
+ | local newQuat = '''Quaternion.LookRotation'''(Vector.Forward, Vector.Up);}} | ||
==Members== | ==Members== | ||
Note: Add/Scale/Divide are also implemented as operators (e.g. A + B, A += B) | Note: Add/Scale/Divide are also implemented as operators (e.g. A + B, A += B) | ||
− | {{ScriptFunction|SVector|EulerAngles|{ get; }|Returns the Euler rotation for this Quaternion}} | + | {{ScriptFunction|SVector|EulerAngles|{ get; }|Returns the Euler rotation for this Quaternion|5= |
− | {{ScriptFunction|SVector|OVERLOAD|*(SQuaternion, SVector)|Rotates a vector by a quaternion}} | + | local newQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707); |
− | {{ScriptFunction|SQuaternion|OVERLOAD|*(SQuaternion, SQuaternion)|Rotates a quaternion by a quaternion}} | + | local euler = newQuat.'''EulerAngles''';<br> |
− | {{ScriptFunction|float|Angle|(SQuaternion other);|Returns the angle between two quaternions}} | + | Space.Log(euler);<br> |
− | {{ScriptFunction|SQuaternion|Lerp|(SQuaternion other, float t);|Linearly interpolates between this and other quaternion, by factor t and returns the result}} | + | ''-- prints [0, 90, 0]''}} |
− | {{ScriptFunction|SQuaternion|Slerp|(SQuaternion other, float t);|Spherically interpolates between this and other quaternion, by factor t and returns the result}} | + | |
− | {{ScriptFunction|SQuaternion|RotateTowards|(SQuaternion other, float t);|Rotates this towards other, by no more than t degrees}} | + | {{ScriptFunction|SVector|OVERLOAD|*(SQuaternion, SVector)|Rotates a vector by a quaternion|5= |
− | {{ScriptFunction|float|Dot|(SQuaternion other);|Returns the dot product of this and another quaternion}} | + | local newQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0); |
− | {{ScriptFunction|SQuaternion|Inverse|{ get; }|Returns the inverse of this quaternion}} | + | local newVector = Vector.Forward;<br> |
+ | rotatedVector = newQuat '''*''' newVector;<br><br> | ||
+ | |||
+ | Space.Log(rotatedVector);<br> | ||
+ | ''-- prints [0, 0, -1]''}} | ||
+ | |||
+ | {{ScriptFunction|SQuaternion|OVERLOAD|*(SQuaternion, SQuaternion)|Rotates a quaternion by a quaternion|5= | ||
+ | local newQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707); | ||
+ | local newVector = Vector.New(0.0, 0.0, 0.0);<br> | ||
+ | rotatedVector = newQuat '''*''' newQuat;<br><br> | ||
+ | |||
+ | ''-- rotatedVector is a quaternion with value [0.0, 1.0, 0.0, 0.0]''<br> | ||
+ | ''-- which is [0.0, 180.0, 0.0] Euler angles''}} | ||
+ | |||
+ | {{ScriptFunction|float|Angle|(SQuaternion other);|Returns the angle between two quaternions|5= | ||
+ | local newQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707); | ||
+ | local otherQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0);<br> | ||
+ | angle = newQuat.'''Angle'''(otherQuat);<br><br> | ||
+ | |||
+ | Space.Log(angle);<br> | ||
+ | ''-- prints 90.0173034667969''}} | ||
+ | |||
+ | {{ScriptFunction|SQuaternion|Lerp|(SQuaternion other, float t);|Linearly interpolates between this and other quaternion, by factor t and returns the result|5= | ||
+ | ''-- Lua Translation of Unity C# Documentation'' | ||
+ | ''-- Attach this script to a cube or any object.''<br><br> | ||
+ | |||
+ | local cube = Space.Host.ExecutingObject;<br> | ||
+ | cube.SubscribeToEvents();<br><br> | ||
+ | |||
+ | local fromQuat = cube.LocalRotation; <br> | ||
+ | local toQuat = Quaternion.New(0.0, 0.707, 0.0, 0.707);<br> | ||
+ | local speed = 0.1;<br><br> | ||
+ | |||
+ | ''-- The cube will rotate 90 degrees from current rotation by speed amount.''<br> | ||
+ | local moveCube = function()<br> | ||
+ | cube.LocalRotation = fromQuat.'''Lerp'''(toQuat, Space.Time * speed);<br> | ||
+ | end<br><br> | ||
+ | |||
+ | cube.OnUpdate(moveCube);}} | ||
+ | |||
+ | {{ScriptFunction|SQuaternion|Slerp|(SQuaternion other, float t);|Spherically interpolates between this and other quaternion, by factor t and returns the result|5= | ||
+ | ''-- Lua Translation of Unity C# Documentation'' | ||
+ | ''-- Attach this script to a cube or any object.''<br><br> | ||
+ | |||
+ | local cube = Space.Host.ExecutingObject;<br> | ||
+ | cube.SubscribeToEvents();<br><br> | ||
+ | |||
+ | local fromQuat = cube.LocalRotation; <br> | ||
+ | local toQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0);<br> | ||
+ | local speed = 0.1;<br><br> | ||
+ | |||
+ | ''-- The cube will rotate 180 degrees from current rotation by speed amount.''<br> | ||
+ | local moveCube = function()<br> | ||
+ | cube.LocalRotation = fromQuat.'''Slerp'''(toQuat, Space.Time * speed);<br> | ||
+ | end<br><br> | ||
+ | |||
+ | cube.OnUpdate(moveCube);}} | ||
+ | |||
+ | {{ScriptFunction|SQuaternion|RotateTowards|(SQuaternion other, float t);|Rotates this towards other, by no more than t degrees|5= | ||
+ | ''-- Lua Translation of Unity C# Documentation'' | ||
+ | ''-- Attach this script to a cube or any object.''<br><br> | ||
+ | |||
+ | local cube = Space.Host.ExecutingObject;<br> | ||
+ | cube.SubscribeToEvents();<br><br> | ||
+ | |||
+ | local fromQuat = cube.LocalRotation; <br> | ||
+ | local target = Quaternion.New(0.0, 0.707, 0.0, 0.707);<br> | ||
+ | local speed = 10.0;<br><br> | ||
+ | |||
+ | ''-- The cube will rotate 90 degrees from current rotation by step amount.''<br> | ||
+ | local moveCube = function()<br> | ||
+ | local step = speed * Space.Time;<br> | ||
+ | cube.LocalRotation = fromQuat.'''RotateTowards'''(target, step);<br> | ||
+ | end<br><br> | ||
+ | |||
+ | cube.OnUpdate(moveCube);}} | ||
+ | |||
+ | {{ScriptFunction|float|Dot|(SQuaternion other);|Returns the dot product of this and another quaternion|5= | ||
+ | local quat = Quaternion.New(0.0, 0.707, 0.0, 0.707); | ||
+ | local quatOther = Quaternion.New(0.0, 0.0, 0.0, 1.0);<br> | ||
+ | Space.Log(quat.'''Dot'''(quatOther));<br> | ||
+ | ''-- prints 0.707000017166138''}} | ||
+ | |||
+ | {{ScriptFunction|SQuaternion|Inverse|{ get; }|Returns the inverse of this quaternion|5= | ||
+ | local quat = Quaternion.New(0.0, 0.707, 0.0, 0.707); | ||
+ | local inverseQuat = quat.'''Inverse''';<br> | ||
+ | ''-- inverseQuat is a quaternion with value [0.0, -0.707, 0.0, 0.707]''}} | ||
==Static Members== | ==Static Members== | ||
− | {{ScriptFunction|SQuaternion|Identity|{ get; }|Equivalent of new SQuaternion(0,0,0,1)}} | + | {{ScriptFunction|SQuaternion|Identity|{ get; }|Equivalent of new SQuaternion(0,0,0,1)|5= |
+ | local identity = '''Quaternion.Identity''';<br> | ||
+ | |||
+ | ''-- identity is a quaternion with value [0, 0, 0, 1]''}} | ||
{{Scripting Navbox}} | {{Scripting Navbox}} |
The SQuaternion struct contains a simple 4D vector of X, Y, Z and W floats designed to represent rotations with orientation.
X axis
local originalRot = obj.LocalRotation;
obj.SubscribeToEvents();
local 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
Y axis
local originalRot = obj.LocalRotation;
obj.SubscribeToEvents();
local 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
Z axis
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
W axis
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
Initialises quaternion from four floats
-- creates a new quaternion with value [0.0, 0.707, 0.0, 0.707]
Creates a quaternion from 3 Euler floats (i.e. 3x 0-360' angles)
-- creates a new quaternion with value [0.0, 0.707, 0.0, 0.707]
Creates a quaternion from a Angle / Axis pair
local newQuat = Quaternion.AngleAxis(newVector, 90.0);
Creates a quaternion a forward vector; presuming up is (0,1,0)
Creates a quaternion a forward and up vector pair
Note: Add/Scale/Divide are also implemented as operators (e.g. A + B, A += B)
Returns the Euler rotation for this Quaternion
local euler = newQuat.EulerAngles;
Space.Log(euler);
Rotates a vector by a quaternion
local newVector = Vector.Forward;
rotatedVector = newQuat * newVector;
Space.Log(rotatedVector);
Rotates a quaternion by a quaternion
local newVector = Vector.New(0.0, 0.0, 0.0);
rotatedVector = newQuat * newQuat;
-- rotatedVector is a quaternion with value [0.0, 1.0, 0.0, 0.0]
Returns the angle between two quaternions
local otherQuat = Quaternion.New(0.0, 1.0, 0.0, 0.0);
angle = newQuat.Angle(otherQuat);
Space.Log(angle);
Linearly interpolates between this and other quaternion, by factor t and returns the result
-- Attach this script to a cube or any object.
local cube = Space.Host.ExecutingObject;
cube.SubscribeToEvents();
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
Spherically interpolates between this and other quaternion, by factor t and returns the result
-- Attach this script to a cube or any object.
local cube = Space.Host.ExecutingObject;
cube.SubscribeToEvents();
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
Rotates this towards other, by no more than t degrees
-- Attach this script to a cube or any object.
local cube = Space.Host.ExecutingObject;
cube.SubscribeToEvents();
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
Returns the dot product of this and another quaternion
local quatOther = Quaternion.New(0.0, 0.0, 0.0, 1.0);
Space.Log(quat.Dot(quatOther));
Returns the inverse of this quaternion
local inverseQuat = quat.Inverse;
Equivalent of new SQuaternion(0,0,0,1)
|