SMath

Index

Static Functions Index

Function Name

Static Attributes Index

Property Name

Static Functions

Random

static float Random ()

Returns a random float between 0 and 1 (inclusive)

local randomNumber = Space.Math.Random();
Space.Log(randomNumber);
-- prints 0.689094245433807

RandomRange

static float RandomRange (float min, float max)

Returns a random float between min and max (inclusive)

Parameter
Type
Description

local min = 100.0;
local max = 500.0;
local randomNumber = Space.Math.RandomRange(min, max );
Space.Log(randomNumber);
-- prints 0206.659149169922

RandomInteger

static int RandomInteger (int min, int max)

Returns a random float between min (inclusive) and max (exclusive)

Parameter
Type
Description

local min = 50;
local max = 75;
local randomInteger = Space.Math.RandomInteger(min, max);
Space.Log(randomInteger);
-- prints 52

Abs

static float Abs (float v) static int Abs (int v)

Returns the absolute value of 'val'

Parameter
Type
Description

local value = -4.2
local absoluteNum = Space.Math.Abs(value);
Space.Log(absoluteNum);
-- prints 4 [BUG] should be 4.2

Acos

static float Acos (float v)

Returns the arc cosine value of 'val'

Parameter
Type
Description

local value = 0.5;
local arcCosine = Space.Math.Acos(value);
Space.Log(arcCosine);
-- prints 1.04719758033752 (radians) which is 60 degrees

Approximately

static bool Approximately (float a, float b)

True if the difference between a and b is less than epsilon

Parameter
Type
Description

local a = 5.0;
local b = 5;
local approx1 = Space.Math.Approximately(a, b);
Space.Log(approx1);
-- prints true

local a = 5.01;
local b = 5.0;
local approx2 = Space.Math.Approximately(a, b);
Space.Log(approx2);
-- prints false

local a = 5.01;
local b = 5.0;
local approx3 = Space.Math.Approximately(a, b);
Space.Log(approx3);
-- prints false

Asin

static float Asin (float v)

Returns the arc sine value of 'val'

Parameter
Type
Description

local value = 0.5;
local arcSine = Space.Math.Asin(value);
Space.Log(arcSine);
-- prints 0.523598790168762 (radians) which is 30 degrees

Atan

static float Atan (float v)

Returns the arc tangent value of 'val'

Parameter
Type
Description

local value = 1.732050808;
local arcTangent = Space.Math.Atan(value);
Space.Log(arcTangent);
-- prints 1.04719758033752 (radians) which is 60 degrees

Atan2

static float Atan2 (float y, float x)

Returns the arc tangent of y/x

Parameter
Type
Description

local x = 0.5;
local y = 0.5;
local arcTangent = Space.Math.Atan2(y, x);
Space.Log(arcTangent);
-- prints 0.785398185253143

Ceil

static int Ceil (float v)

Returns the ceil value of 'val' as an integer

Parameter
Type
Description

Space.Log(Space.Math.Ceil(4.0));
-- prints 4

Space.Log(Space.Math.Ceil(4.2));
-- prints 5

Space.Log(Space.Math.Ceil(-4.2));
-- prints -4

Clamp

static float Clamp (float v, float min, float max)

Clamps val between min and max, and returns the result

Parameter
Type
Description

local value = 100.0;
local min = 20.0;
local max = 82.0;

local clampedValue = Space.Math.Clamp(value, min, max);
Space.Log(clampedValue);
-- prints 82

Clamp01

static float Clamp01 (float v)

Clamps val between 0 and 1, and returns the result

Parameter
Type
Description

local value = -1.0;

local clampedValue = Space.Math.Clamp01(value);
Space.Log(clampedValue);
-- prints 0

ClosestPowerOfTwo

static int ClosestPowerOfTwo (int v)

Returns the closest power of two to val

Parameter
Type
Description

local value = 33;

local powerOfTwo = Space.Math.ClosestPowerOfTwo(value);
Space.Log(powerOfTwo);
-- prints 32

Cos

static float Cos (float v)

Returns the cosine of val

Parameter
Type
Description

local angle = 1.04719758033752; -- converts to 60 degrees
local cosine = Space.Math.Cos(angle);
Space.Log(cosine);
-- prints 0.499999970197678

local angle2 = Space.Math.Pi/3; -- converts to 60 degrees
local cosine2 = Space.Math.Cos(angle2);
Space.Log(cosine2);
-- prints 0.499999970197678

DeltaAngle

static float DeltaAngle (float current, float target)

_Returns the difference in degrees between two values (e.g. 350' and 17' returns 27') _

Parameter
Type
Description

Space.Log(Space.Math.DeltaAngle(350.0, 17.0));
-- prints 27

Exp

static float Exp (float v)

Returns e raised to val power.

Parameter
Type
Description

Space.Log(Space.Math.Exp(3.0));
-- prints 20.0855369567871

Floor

static int Floor (float v)

Returns floor of val, converted to an int

Parameter
Type
Description

Space.Log(Space.Math.Floor(4.0));
-- prints 4

Space.Log(Space.Math.Floor(4.2));
-- prints 4

Space.Log(Space.Math.Floor(-4.2));
-- prints -5

GammaToLinearSpace

static float GammaToLinearSpace (float v)

Converts a colour value from Gamma to Linear Space (Pow 2.2)

Parameter
Type
Description

Space.Log(Space.Math.GammaToLinearSpace(0.5));
-- prints 0.214041143655777

InverseLerp

static float InverseLerp (float a, float b, float value)

Returns the percentage between a and b that 'val' is on a line (opposite of Lerp)

Parameter
Type
Description

local sliderStart = 0.0;
local sliderStop = 100.0;
local currentSliderPos = 75.0;

local percentage = Space.Math.InverseLerp(sliderStart, sliderStop, currentSliderPos);
Space.Log(percentage);
-- prints 0.75

IsPowerOfTwo

static bool IsPowerOfTwo (int v)

Returns true if val is a power of two

Parameter
Type
Description

Space.Log(Space.Math.IsPowerOfTwo(55));
-- prints False

Space.Log(Space.Math.IsPowerOfTwo(32));
-- prints True

Lerp

static float Lerp (float a, float b, float v)

Interpolates between 'a' and 'b' based on 'val', assuming 'val' is between 0 and 1

Parameter
Type
Description

local sliderStart = 0.0;
local sliderStop = 100.0;
local percentage = 0.75;

local currentSliderPos = Space.Math.Lerp(sliderStart, sliderStop, percentage);
Space.Log(currentSliderPos);
-- prints 75

LerpAngle

static float LerpAngle (float a, float b, float v)

Interpolates between angles 'a' and 'b' based on 'val', assuming 'val' is between 0 and 1

Parameter
Type
Description

local sliderStartAngle = 0.0;
local sliderStopAngle = Space.Math.Pi;-- 180 degrees
local percentage = 0.50;

local currentSliderPos = Space.Math.LerpAngle(sliderStartAngle, sliderStopAngle, percentage);
Space.Log(currentSliderPos);
-- prints 1.57079637050629 (90 degrees)

LerpUnclamped

static float LerpUnclamped (float a, float b, float v)

Interpolates between 'a' and 'b' based on 'val', assuming 'val' is between 0 and 1, but unbounded (allowing higher/lower values)

Parameter
Type
Description

local sliderStart = 0.0;
local sliderStop = 100.0;
local percentage = 2.0;

local currentSliderPos = Space.Math.LerpUnclamped(sliderStart, sliderStop, percentage);
Space.Log(currentSliderPos);
-- prints 200

LinearToGammaSpace

static float LinearToGammaSpace (float v)

Converts a colour value from Linear to Gamma Space (Pow 1/2.2)

Parameter
Type
Description

Space.Log(Space.Math.LinearToGammaSpace(0.214041143655777));
-- prints 0.5

Log

static float Log (float v) static float Log (float v, float p)

Returns the natural logarithm for 'val'

Parameter
Type
Description

Space.Log(Space.Math.Log(30.0));
-- prints 3.40119743347168

Space.Log(Space.Math.Log(4.0, 2.0));
-- prints 2

Log10

static float Log10 (float v)

Returns the Log10 value for 'val'

Parameter
Type
Description

Space.Log(Space.Math.Log10(100.0));
-- prints 2

Max

static float Max (float a, float b)

Returns higher of 'a' or 'b'

Parameter
Type
Description

Space.Log(Space.Math.Max(20.0, 100.0));
-- prints 100

Min

static float Min (float a, float b)

Returns lower of 'a' or 'b'

Parameter
Type
Description

Space.Log(Space.Math.Min(20.0, 100.0));
-- prints 20

MoveTowards

static float MoveTowards (float value, float target, float delta)

Move value to target, but by no more than delta

Parameter
Type
Description

local sliderStart = 5.0;
local sliderStop = 10.0;
local deltaChange = 1.0;

local currentSliderPos = Space.Math.MoveTowards(sliderStart, sliderStop, deltaChange);
Space.Log(currentSliderPos);
-- prints 6 (moves forward 1)


local sliderStart = 5.0;
local sliderStop = 10.0;
local deltaChange = 7.0;

local currentSliderPos = Space.Math.MoveTowards(sliderStart, sliderStop, deltaChange);
Space.Log(currentSliderPos); -- prints 10 (caps out at at the target value)

-- NOTE: Use negative delta to move away from target.

MoveTowardsAngle

static float MoveTowardsAngle (float value, float target, float delta)

Move angle value to target, but by no more than delta

Parameter
Type
Description

local sliderStartAngle = Space.Math.Pi/2; -- 90 degrees
local sliderStopAngle = Space.Math.Pi; -- 180 degrees
local deltaChange = Space.Math.Pi/6; -- 30 degrees

local currentSliderPos = Space.Math.MoveTowardsAngle(sliderStartAngle, sliderStopAngle, deltaChange);
Space.Log(currentSliderPos);
-- prints 2.09439516067505 (moves forward 30 degrees to 120 degrees)

-- NOTE: Add 180 degrees (Space.Math.Pi) to move away from target.

NextPowerOfTwo

static int NextPowerOfTwo (int v)

Return the next power of two larger or equal to val

Parameter
Type
Description

Space.Log(Space.Math.NextPowerOfTwo(16));
-- prints 16

Space.Log(Space.Math.NextPowerOfTwo(17));
-- prints 32

PerlinNoise

static float PerlinNoise (float x, float y)

Return 2D Perlin noise for coordinates x and y

Parameter
Type
Description

-- Lua Translation of Unity C# Documentation

local ball = Space.Host.ExecutingObject;
ball.SubscribeToEvents();

-- animates this object to move upwards on the y axis with slight random movement
local animateBall = function()
  local heightScale = 0.1; -- controls speed of movement
  local xScale = 1.0; -- shifts x position on perlin noise plane

  local height = heightScale * Space.Math.PerlinNoise(Space.Time * xScale, 0.0);
  local pos = ball.LocalPosition;
  pos.y = pos.y + height;
  ball.LocalPosition = pos;
  Space.Log(pos.y);
end

ball.OnUpdate(animateBall);

-- NOTE: If you need a guaranteed range of [0,1], make sure to clamp the value with Space.Math.Clamp01.

PingPong

static float PingPong (float t, float length)

Return a value between 0 and length that oscillates upwards and back based on the position of 'val'

Parameter
Type
Description

--[[ In this example, if you traced the output of Space.Math.PingPong(value, length),
the return values would cycle forward through the range [0,5] then cycle backwards through the range [5,0] in order. --]]

local ball = Space.Host.ExecutingObject;
local originalPos = ball.LocalPosition;
ball.SubscribeToEvents();

-- The ball object oscillates back and forth on the x-axis.
local animateBall = function()
  local value = Space.Time;
  local length = 5.0;

  local newPos = Vector.New(Space.Math.PingPong(value, length) + originalPos.x, originalPos.y, originalPos.z);
  ball.LocalPosition = newPos;
end

ball.OnUpdate(animateBall);

Pow

static float Pow (float value, float pow)

Return x raised to y power

Parameter
Type
Description

Space.Log(Space.Math.Pow(2, 4));
-- prints 16

Repeat

static float Repeat (float value, float length)

Return a value between 0 and length that returns to 0 after exceeding length based on 'val'

Parameter
Type
Description

--[[ In this example, if you traced the output of Space.Math.Repeat(value, length),
the return values would cycle forward through the range [0,5]. The cycle is repeated again from 0.--]]

local ball = Space.Host.ExecutingObject;
local originalPos = ball.LocalPosition;
ball.SubscribeToEvents();

-- The ball object moves forward on the x-axis.
-- Then, it repeats the same motion again from the beginning.
local animateBall = function()
  local value = Space.Time;
  local length = 5.0;

  local newPos = Vector.New(Space.Math.Repeat(value, length) + originalPos.x, originalPos.y, originalPos.z);
  ball.LocalPosition = newPos;
end

ball.OnUpdate(animateBall);

Round

static int Round (float value)

Returns the nearest integer value to val

Parameter
Type
Description

Space.Log(Space.Math.Round(4.0));
-- prints 4

Space.Log(Space.Math.Round(4.2));
-- prints 4

Space.Log(Space.Math.Round(4.5));
-- prints 4

Space.Log(Space.Math.Round(4.55));
-- prints 5

Space.Log(Space.Math.Round(4.8));
-- prints 5

Space.Log(Space.Math.Round(-4.2));
-- prints -4

Space.Log(Space.Math.Round(-4.8));

-- prints -5

Sign

static float Sign (float value)

Returns either 1 or -1 based on the sign of 'val'

Parameter
Type
Description

Space.Log(Space.Math.Sign(4.2));
-- prints 1

Space.Log(Space.Math.Sign(-4.2));
-- prints -1

Sin

static float Sin (float value)

Returns the sine of val

Parameter
Type
Description

local angle = 1.04719758033752; -- converts to 60 degrees
local sine = Space.Math.Sin(angle);
Space.Log(sine);
-- prints 0.866025447845459

local angle2 = Space.Math.Pi/3; -- converts to 60 degrees
local sine2 = Space.Math.Sin(angle2);
Space.Log(sine2);
-- prints 0.866025447845459

SmoothStep

static float SmoothStep (float from, float to, float t)

Similar to Lerp but moves slowly closer to the edges ('Spherical Lerp')

Parameter
Type
Description

-- Lua Translation of Unity C# Documentation

--[[ In this example, Space.Math.SmoothStep(min, max, time) returns values in the range [1,10] in order.
As values approach 10, the interpolation slows down. --]]

local ball = Space.Host.ExecutingObject;
local originalPos = ball.LocalPosition;
local min = 1.0;
local max = 10.0;
local duration = 5.0; --lower value to speed up; raise to slow down
local startTime;
ball.SubscribeToEvents();

local initStartTime = function()
  startTime = Space.Time;
end

-- The ball jumps to min + originalPos, then it moves towards
-- max + originalPos while slowing down at the end.
local animateBall = function()
  local time = (Space.Time - startTime) / duration;
  local newPos = Vector.New(Space.Math.SmoothStep(min, max, time)
        + originalPos.x, originalPos.y, originalPos.z);
  ball.LocalPosition = newPos;
end

ball.OnStart(initStartTime);
ball.OnUpdate(animateBall);

Sqrt

static float Sqrt (float value)

Returns the square root of val

Parameter
Type
Description

Space.Log(Space.Math.Sqrt(16));
-- prints 4

Space.Log(Space.Math.Sqrt(-16));
-- prints NaN

Tan

static float Tan (float value)

Returns the tangent value of 'val'

Parameter
Type
Description

local angle = 1.04719758033752; -- converts to 60 degrees
local tangent = Space.Math.Tan(angle);
Space.Log(tangent);
-- prints 1.73205089569092

local angle2 = Space.Math.Pi/3; -- converts to 60 degrees
local tangent2 = Space.Math.Tan(angle2);
Space.Log(tangent2);
-- prints 1.73205089569092

Static Attributes

Pi

static readonly float Pi = 3.14159265358979f

Returns the constant value of Π.

Space.Log(Space.Math.Pi);
-- prints 3.14159274101257

Last updated

Sinespace® is a registered trademark of Sine Wave Entertainment Ltd, All Rights Reserved.