Mathematical Functions

The MAXON API contains mathematical constants and functions that can be used with the basic data types. These constants and functions are defined in the general_math.h and lib_math.h header files. See also Basic Data Types.

# Constants

Generic constants are:

Note
If an error occurs in a function, this function should return a proper error object. See Error Handling.

Mathematical floating point constants are:

For values and limits of data types see Basic Data Types.

// This example calculates the area of a circle of the given radius.
const maxon::Float area = maxon::PI * maxon::Sqr(radius);

# Template Functions

These template functions can be used with any data type that supports the required operations:

// This example template function clamps the given values and returned a mixed result.
// It uses template sub-functions.
template <typename T> static T ClampAndBlend(T a, T b, T min, T max, T blend)
{
a = maxon::ClampValue(a, min, max);
b = maxon::ClampValue(b, min, max);
return maxon::Blend(a, b, blend);
}

# Exponent

These exponential functions are available for maxon::Float32 and maxon::Float64 values:

# Trigonometry

These trigonometric functions are available for maxon::Float32 and maxon::Float64 values:

// This example calculates coordinates along a circle.
const maxon::Int count = 100;
const maxon::Float countF = maxon::Float(count);
const maxon::Float step = maxon::PI2 / countF;
maxon::Float angle = 0.0;
for (maxon::Int i = 0; i < count; ++i)
{
maxon::SinCos(angle, sin, cos);
// output
const maxon::String result = FormatString("Pos X: @, Y: @, at @ degree.", sin, cos, degree);
// next angle
angle += step;
}

# Limit

These functions are available for maxon::Float32 and maxon::Float64 values:

• maxon::Clamp01(): Clips a the given value against the lower limit 0 and the upper limit 1.
• maxon::Floor(): Calculates the largest previous integer number.
• maxon::Ceil(): Calculates the smallest following integer number.
• maxon::SmoothStep(): Returns 0.0 if the given value is less than a and 1.0 if the value is greater than b, else returns the value mapped by a smooth curve on the range [a,b].
• maxon::BoxStep(): Returns 0.0 if the given value is less than a and 1.0 if the value is greater than b, else returns the value mapped on the range [a,b].
// This example calculates the previous and following integer numbers for the given float value.
const maxon::Float value = 1.23;
const maxon::Float previousInt = maxon::Floor(value);
const maxon::Float nextInt = maxon::Ceil(value);

# Iterables

These template functions work with all values stored in the given iterable e.g. a maxon::BaseArray:

// This example gets the sum and average value of all elements stored in the BaseArray.
baseArray.Append(1.0) iferr_return;
baseArray.Append(2.0) iferr_return;
baseArray.Append(3.0) iferr_return;
const maxon::Float sum = maxon::GetSum(baseArray);
const maxon::Float average = maxon::GetAverage(baseArray);

# Miscellaneous

These mathematical utility functions are available for maxon::Float32 and maxon::Float64 values:

• maxon::Abs(): Calculates the absolute value of a floating point number.
• maxon::Inverse(): Calculates the reciprocal value (multiplicative inverse).
• maxon::Bias(): Returns the bias as the defined in the book "Texturing and Modeling" by Ebert.
• maxon::Truncate(): Returns the next integer value towards zero.

Special maxon::UInt functions are:

• maxon::LessThan(): Returns true if the product of the first two arguments is less than the product of the second two arguments.
• maxon::IsPowerOfTwo(): Returns true if the given value is a power of 2.

This modulo operation is defined for maxon::Int32, maxon::Int64, maxon::Float32 and maxon::Float64.

maxon::GetAverage
MAXON_ATTRIBUTE_FORCE_INLINE std::remove_reference< ITERABLETYPE >::type::ValueType GetAverage(ITERABLETYPE &&array)
Returns the average of all elements.
Definition: lib_math.h:273
maxon::ClampValue
MAXON_ATTRIBUTE_FORCE_INLINE X ClampValue(X value, X lowerLimit, X upperLimit)
Clips a value against a lower and upper limit. The new value is returned.
Definition: apibasemath.h:372
maxon::Blend
MAXON_ATTRIBUTE_FORCE_INLINE X Blend(const X &value1, const X &value2, Y blendValue)
Blends two values. If blendValue is 0.0 value1 is returned, if blendValue is 1.0 value2 is returned....
Definition: apibasemath.h:379
maxon::String
Definition: string.h:1197
maxon::SinCos
MAXON_ATTRIBUTE_FORCE_INLINE void SinCos(Float32 val, Float32 &sn, Float32 &cs)
Calculates both sine and cosine of a value.
Definition: apibasemath.h:495
iferr_return
#define iferr_return
Definition: resultbase.h:1434
maxon::Float
Float64 Float
Definition: apibase.h:188
maxon::BaseArray
Definition: basearray.h:366
DiagnosticOutput
#define DiagnosticOutput(formatString,...)
Definition: debugdiagnostics.h:168
maxon::PI
static const Float64 PI
floating point constant: PI
Definition: apibasemath.h:156
maxon::GetSum
MAXON_ATTRIBUTE_FORCE_INLINE std::remove_reference< ITERABLETYPE >::type::ValueType GetSum(ITERABLETYPE &&array)
Returns the sum of all elements.
Definition: lib_math.h:260
maxon::BaseArray::Append
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > Append()
Definition: basearray.h:569
maxon::Int
Int64 Int
signed 32/64 bit int, size depends on the platform
Definition: apibase.h:179
maxon::Ceil
MAXON_ATTRIBUTE_FORCE_INLINE Float32 Ceil(Float32 val)
Rounds to the smallest following integer number.
Definition: apibasemath.h:292
FormatString
#define FormatString(...)
Definition: string.h:2031
maxon::Floor
MAXON_ATTRIBUTE_FORCE_INLINE Float32 Floor(Float32 val)
Rounds to the largest previous integer number.
Definition: apibasemath.h:286
maxon::Sqr
MAXON_ATTRIBUTE_FORCE_INLINE X Sqr(X a, X b)
Calculates square difference of two values.
Definition: apibasemath.h:382