# `ExpressionMath` (C++)¶

group FnExpressionMath
class FnExpressionMath
#include <FnExpressionMath.h>

Class providing range common utility functions used in expression math.

Public Types

enum RetimeHoldMode

Values:

enumerator RETIME_FREEZE
enumerator RETIME_REPEAT
enumerator RETIME_MIRROR

Public Static Functions

static int clamp(int value, int a, int b)

Clamp the value between `a` and `b`. This function works for a>b and a<b.

Parameters:
• value – the value to be clamped

• a – lower bound to clamp `value` to

• b – upper bound to clamp `value` to.

Returns:

`a` if `value` is less than `a`, `b` if `value` is greater than `value` else `value`.

static float clamp(float value, float a, float b)
static double clamp(double value, double a, double b)
static float lerp(float mix, float a, float b)

Linearly interpolate between `a` and `b` using the specified mix Mix values outside of [0,1] are not clamped. Mix value of zero returns ‘a’. This argument order is such to make it similar to fit and cfit

Returns:

the value between a and b, using the specified mix

static double lerp(double mix, double a, double b)
static float smoothstep(float t)

Compute a smoothstep (ease in, ease out) version of t: [0,1] This will clamp the output to between 0 and 1

static double smoothstep(double t)
static float fit(float value, float oldmin, float oldmax, float newmin, float newmax)

Example:

```fit(0.8, 0, 1, 0, 255) = 204.
fit(3,1,4,5,20) = 15
```

Returns:

a number between `newmin` and `newmax`, which is relative to `val` in the range between `oldmin` and `oldmax`.

static double fit(double value, double oldmin, double oldmax, double newmin, double newmax)
static float cfit(float value, float oldmin, float oldmax, float newmin, float newmax)

Same as fit(), but clamps to new borders, works on both increasing / decreasing segments

See also

fit()

static double cfit(double value, double oldmin, double oldmax, double newmin, double newmax)
static float softcfit(float value, float oldmin, float oldmax, float newmin, float newmax)

Like regular cfit(), only softer, specifically, uses SmoothStep to ease in and out of the fit.

See also

static double softcfit(double value, double oldmin, double oldmax, double newmin, double newmax)
static double retime(double frame, double start, double end, RetimeHoldMode inMode, RetimeHoldMode outMode)
static float randval(float min, float max, int seed)
Returns:

a random value between [min,max]

static double randval(double min, double max, int seed)
static float noise(float x)

Improved Perlin noise (Siggraph 2002) Ranges from [0,1]

static float noise(float x, float y)
static float noise(float x, float y, float z)
static float noise(float x, float y, float z, float w)
static float snoise(float x)

Signed Improved Perlin noise (Siggraph 2002) Ranges from [-1,1] Results are just a rescaled version of noise

static float snoise(float x, float y)
static float snoise(float x, float y, float z)
static float snoise(float x, float y, float z, float w)
static int32_t stablehash(const std::string &cacheID)

We always return a 32-bit integer, no matter which architecture we’re on.

Note

Uses MD5 internally.