Math module
Math related stuff.
Files
- file bn_fixed.h
- file bn_fixed_fwd.h
- file bn_fixed_point.h
- file bn_fixed_point_fwd.h
- file bn_fixed_rect.h
- file bn_fixed_rect_fwd.h
- file bn_fixed_size.h
- file bn_fixed_size_fwd.h
- file bn_math.h
- file bn_point.h
- file bn_power_of_two.h
- file bn_reciprocal_lut.h
- file bn_rect.h
- file bn_rule_of_three_approximation.h
- file bn_sin_lut.h
- file bn_size.h
- file bn_top_left_fixed_rect.h
- file bn_top_left_fixed_rect_fwd.h
- file bn_top_left_rect.h
Classes
-
template<int Precision>struct bn::hash<fixed_t<Precision>>
- Hash support for fixed_
t. -
template<int Precision>class bn::fixed_t
- Poor man's float.
-
template<int Precision>struct bn::hash<fixed_point_t<Precision>>
- Hash support for fixed_
point_ t. -
template<int Precision>class bn::fixed_point_t
- Defines a two-dimensional point using fixed point precision.
-
template<int Precision>struct bn::hash<fixed_rect_t<Precision>>
- Hash support for fixed_
rect_ t. -
template<int Precision>class bn::fixed_rect_t
- Defines a two-dimensional rectangle using fixed point precision and a center point as position.
-
template<int Precision>struct bn::hash<fixed_size_t<Precision>>
- Hash support for fixed_
size_ t. -
template<int Precision>class bn::fixed_size_t
- Defines the size of a two-dimensional object using fixed point precision.
- class bn::point
- Defines a two-dimensional point using integer precision.
-
template<>struct bn::hash<point>
- Hash support for point.
- class bn::rect
- Defines a two-dimensional rectangle using integer precision and a center point as position.
-
template<>struct bn::hash<rect>
- Hash support for rect.
- class bn::rule_of_three_approximation
- Approximates a rule of three cross-multiplication (x = (value * multiplier) / divisor).
- class bn::size
- Defines the size of a two-dimensional object using integer precision.
-
template<>struct bn::hash<size>
- Hash support for size.
-
template<int Precision>struct bn::hash<top_left_fixed_rect_t<Precision>>
- Hash support for top_
left_ fixed_ rect_ t. -
template<int Precision>class bn::top_left_fixed_rect_t
- Defines a two-dimensional rectangle using fixed point precision and a top-left point as position.
- class bn::top_left_rect
- Defines a two-dimensional rectangle using integer precision and a top-left point as position.
-
template<>struct bn::hash<top_left_rect>
- Hash support for top_
left_ rect.
Functions
-
template<typename Type>auto abs(Type value) -> Type constexpr
- Returns the absolute value of the given value.
-
auto sqrt(int value) -> BN_
CONST constexpr int constexpr - Returns the integer square root of the given value.
-
template<int Precision>auto sqrt(fixed_t<Precision> value) -> BN_
CONST constexpr fixed_t<(Precision+1)/2> constexpr - Returns the fixed point square root of the given value.
-
template<int Precision>auto unsafe_sqrt(fixed_t<Precision> value) -> BN_
CONST constexpr fixed_t<Precision> constexpr - Returns the fixed point square root of the given value without trying to avoid overflow.
- auto safe_degrees_angle(fixed degrees_angle) -> fixed constexpr
- Returns an angle in degrees in the range [0..360) from the given angle in degrees in any range.
- auto sin(fixed_t<16> angle) -> fixed constexpr
- Calculates the sine value of an angle.
- auto degrees_sin(fixed degrees_angle) -> fixed constexpr
- Calculates the sine value of an angle in degrees.
- auto lut_sin(int lut_angle) -> fixed constexpr
- Calculates the sine value of an angle using a LUT.
- auto degrees_lut_sin(fixed degrees_angle) -> fixed constexpr
- Calculates the sine value of an angle in degrees using a LUT.
- auto degrees_lut_sin_safe(fixed degrees_angle) -> fixed constexpr
- Calculates the sine value of an angle in degrees in any range using a LUT.
- auto cos(fixed_t<16> angle) -> fixed constexpr
- Calculates the cosine value of an angle.
- auto degrees_cos(fixed degrees_angle) -> fixed constexpr
- Calculates the cosine value of an angle in degrees.
- auto lut_cos(int lut_angle) -> fixed constexpr
- Calculates the cosine value of an angle using a LUT.
- auto degrees_lut_cos(fixed degrees_angle) -> fixed constexpr
- Calculates the cosine value of an angle in degrees using a LUT.
- auto degrees_lut_cos_safe(fixed degrees_angle) -> fixed constexpr
- Calculates the cosine value of an angle in degrees in any range using a LUT.
- auto sin_and_cos(fixed_t<16> angle) -> pair<fixed, fixed> constexpr
- Calculates the sine and the cosine values of an angle.
- auto degrees_sin_and_cos(fixed degrees_angle) -> pair<fixed, fixed> constexpr
- Calculates the sine and the cosine values of an angle in degrees.
- auto lut_sin_and_cos(int lut_angle) -> pair<fixed, fixed> constexpr
- Calculates the sine and the cosine values value of an angle using a LUT.
- auto degrees_lut_sin_and_cos(fixed degrees_angle) -> pair<fixed, fixed> constexpr
- Calculates the sine and the cosine values of an angle in degrees using a LUT.
- auto degrees_lut_sin_and_cos_safe(fixed degrees_angle) -> pair<fixed, fixed> constexpr
- Calculates the sine and the cosine values of an angle in degrees in any range using a LUT.
-
auto atan2(int y,
int x) -> BN_
CONST fixed_t<16> - Computes the arc tangent of y/x using the signs of arguments to determine the correct quadrant.
-
auto degrees_atan2(int y,
int x) -> BN_
CONST fixed - Computes the arc tangent of y/x using the signs of arguments to determine the correct quadrant.
- auto diamond_angle(int y, int x) -> fixed_t<16> constexpr
- Computes an approximation of the arc tangent of y/x using the signs of arguments to determine the correct quadrant.
- auto degrees_diamond_angle(int y, int x) -> fixed constexpr
- Computes an approximation of the arc tangent of y/x using the signs of arguments to determine the correct quadrant.
- auto lut_reciprocal(int lut_value) -> fixed_t<20> constexpr
- Calculates the reciprocal of a value using a LUT.
-
template<typename Type>auto power_of_two(Type value) -> bool constexpr
- Indicates if the given value is a power of two or not.
-
template<int Precision = 20>auto calculate_reciprocal_lut_value(int lut_value) -> fixed_t<Precision> constexpr
- Calculates the value to store in a reciprocal LUT for the given value.
- auto calculate_sin_lut_value(int lut_angle) -> int constexpr
- Calculates the value to store in sin_lut for the given angle.
Variables
- int reciprocal_lut_size constexpr
- Reciprocal 20bit LUT size.
- const array<fixed_t<20>, reciprocal_lut_size>& reciprocal_lut
- Reciprocal 20bit LUT.
- int reciprocal_16_lut_size constexpr
- Reciprocal 16bit LUT size.
- const array<uint16_t, reciprocal_16_lut_size>& reciprocal_16_lut
- Reciprocal 16bit LUT.
- int sin_lut_size constexpr
- Size of the sine LUT of 16bit values in 4.12 format.
- const array<int16_t, sin_lut_size>& sin_lut
- Sine LUT of 16bit values in 4.12 format.
Function documentation
#include <bn_math.h>
template<typename Type>
Type abs(Type value) constexpr
Returns the absolute value of the given value.
BN_ CONST constexpr int sqrt(int value) constexpr
#include <bn_math.h>
Returns the integer square root of the given value.
#include <bn_math.h>
template<int Precision>
BN_ CONST constexpr fixed_t<(Precision+1)/2> sqrt(fixed_t<Precision> value) constexpr
Returns the fixed point square root of the given value.
See https:/
#include <bn_math.h>
template<int Precision>
BN_ CONST constexpr fixed_t<Precision> unsafe_sqrt(fixed_t<Precision> value) constexpr
Returns the fixed point square root of the given value without trying to avoid overflow.
See https:/
fixed safe_degrees_angle(fixed degrees_angle) constexpr
#include <bn_math.h>
Returns an angle in degrees in the range [0..360) from the given angle in degrees in any range.
fixed sin(fixed_t<16> angle) constexpr
#include <bn_math.h>
Calculates the sine value of an angle.
Parameters | |
---|---|
angle | Angle (2π = 1). |
Returns | Sine value in the range [-1..1]. |
fixed degrees_sin(fixed degrees_angle) constexpr
#include <bn_math.h>
Calculates the sine value of an angle in degrees.
Parameters | |
---|---|
degrees_angle | Angle in degrees. |
Returns | Sine value in the range [-1..1]. |
fixed lut_sin(int lut_angle) constexpr
#include <bn_math.h>
Calculates the sine value of an angle using a LUT.
Parameters | |
---|---|
lut_angle | Angle in the range [0..2048]. |
Returns | Sine value in the range [-1..1]. |
fixed degrees_lut_sin(fixed degrees_angle) constexpr
#include <bn_math.h>
Calculates the sine value of an angle in degrees using a LUT.
Parameters | |
---|---|
degrees_angle | Angle in degrees in the range [0..360]. |
Returns | Sine value in the range [-1..1]. |
fixed degrees_lut_sin_safe(fixed degrees_angle) constexpr
#include <bn_math.h>
Calculates the sine value of an angle in degrees in any range using a LUT.
Parameters | |
---|---|
degrees_angle | Angle in degrees in any range. |
Returns | Sine value in the range [-1..1]. |
fixed cos(fixed_t<16> angle) constexpr
#include <bn_math.h>
Calculates the cosine value of an angle.
Parameters | |
---|---|
angle | Angle (2π = 1). |
Returns | Cosine value in the range [-1..1]. |
fixed degrees_cos(fixed degrees_angle) constexpr
#include <bn_math.h>
Calculates the cosine value of an angle in degrees.
Parameters | |
---|---|
degrees_angle | Angle in degrees. |
Returns | Cosine value in the range [-1..1]. |
fixed lut_cos(int lut_angle) constexpr
#include <bn_math.h>
Calculates the cosine value of an angle using a LUT.
Parameters | |
---|---|
lut_angle | Angle in the range [0..2048]. |
Returns | Cosine value in the range [-1..1]. |
fixed degrees_lut_cos(fixed degrees_angle) constexpr
#include <bn_math.h>
Calculates the cosine value of an angle in degrees using a LUT.
Parameters | |
---|---|
degrees_angle | Angle in degrees in the range [0..360]. |
Returns | Cosine value in the range [-1..1]. |
fixed degrees_lut_cos_safe(fixed degrees_angle) constexpr
#include <bn_math.h>
Calculates the cosine value of an angle in degrees in any range using a LUT.
Parameters | |
---|---|
degrees_angle | Angle in degrees in any range. |
Returns | Cosine value in the range [-1..1]. |
pair<fixed, fixed> sin_and_cos(fixed_t<16> angle) constexpr
#include <bn_math.h>
Calculates the sine and the cosine values of an angle.
Parameters | |
---|---|
angle | Angle (2π = 1). |
Returns | Sine and cosine values in the range [-1..1]. |
pair<fixed, fixed> degrees_sin_and_cos(fixed degrees_angle) constexpr
#include <bn_math.h>
Calculates the sine and the cosine values of an angle in degrees.
Parameters | |
---|---|
degrees_angle | Angle in degrees. |
Returns | Sine and cosine values in the range [-1..1]. |
pair<fixed, fixed> lut_sin_and_cos(int lut_angle) constexpr
#include <bn_math.h>
Calculates the sine and the cosine values value of an angle using a LUT.
Parameters | |
---|---|
lut_angle | Angle in the range [0..2048]. |
Returns | Sine and cosine values in the range [-1..1]. |
pair<fixed, fixed> degrees_lut_sin_and_cos(fixed degrees_angle) constexpr
#include <bn_math.h>
Calculates the sine and the cosine values of an angle in degrees using a LUT.
Parameters | |
---|---|
degrees_angle | Angle in degrees in the range [0..360]. |
Returns | Sine and cosine values in the range [-1..1]. |
pair<fixed, fixed> degrees_lut_sin_and_cos_safe(fixed degrees_angle) constexpr
#include <bn_math.h>
Calculates the sine and the cosine values of an angle in degrees in any range using a LUT.
Parameters | |
---|---|
degrees_angle | Angle in degrees in any range. |
Returns | Sine and cosine values in the range [-1..1]. |
BN_ CONST fixed_t<16> atan2(int y,
int x)
#include <bn_math.h>
Computes the arc tangent of y/x using the signs of arguments to determine the correct quadrant.
Parameters | |
---|---|
y | Vertical value in the range [-32767..32767]. |
x | Horizontal value in the range [-32767..32767]. |
Returns | Arc tangent of y/x in the range [-0.5..0.5] (2π = 1). |
BN_ CONST fixed degrees_atan2(int y,
int x)
#include <bn_math.h>
Computes the arc tangent of y/x using the signs of arguments to determine the correct quadrant.
Parameters | |
---|---|
y | Vertical value in the range [-32767..32767]. |
x | Horizontal value in the range [-32767..32767]. |
Returns | Arc tangent of y/x in degrees in the range [-180..180]. |
fixed_t<16> diamond_angle(int y,
int x) constexpr
#include <bn_math.h>
Computes an approximation of the arc tangent of y/x using the signs of arguments to determine the correct quadrant.
Parameters | |
---|---|
y | Vertical value in the range [-131072..131071]. |
x | Horizontal value in the range [-131072..131071]. |
Returns | Arc tangent of y/x in the range [-0.5..0.5] (2π = 1). |
https:/
fixed degrees_diamond_angle(int y,
int x) constexpr
#include <bn_math.h>
Computes an approximation of the arc tangent of y/x using the signs of arguments to determine the correct quadrant.
Parameters | |
---|---|
y | Vertical value in the range [-131072..131071]. |
x | Horizontal value in the range [-131072..131071]. |
Returns | Arc tangent of y/x in degrees in the range [-180..180]. |
https:/
fixed_t<20> lut_reciprocal(int lut_value) constexpr
#include <bn_math.h>
Calculates the reciprocal of a value using a LUT.
Parameters | |
---|---|
lut_value | Value in the range [1..1024]. |
Returns | Reciprocal of the given value (1 / value). |
#include <bn_power_of_two.h>
template<typename Type>
bool power_of_two(Type value) constexpr
Indicates if the given value is a power of two or not.
#include <bn_reciprocal_lut.h>
template<int Precision = 20>
fixed_t<Precision> calculate_reciprocal_lut_value(int lut_value) constexpr
Calculates the value to store in a reciprocal LUT for the given value.
Template parameters | |
---|---|
Precision | Number of bits used for the fractional part of the reciprocal value. |
Parameters | |
lut_value | Value in the range (>= 1). |
Returns | Reciprocal of the given value (1 / value). |
int calculate_sin_lut_value(int lut_angle) constexpr
#include <bn_sin_lut.h>
Calculates the value to store in sin_lut for the given angle.
Parameters | |
---|---|
lut_angle | sin_lut angle (360 degrees = 65536). |
Returns | Sine value in the range [-4096, 4096]. |
Variable documentation
int reciprocal_lut_size constexpr
#include <bn_reciprocal_lut.h>
Reciprocal 20bit LUT size.
const array<fixed_t<20>, reciprocal_lut_size>& reciprocal_lut
#include <bn_reciprocal_lut.h>
Reciprocal 20bit LUT.
int reciprocal_16_lut_size constexpr
#include <bn_reciprocal_lut.h>
Reciprocal 16bit LUT size.
const array<uint16_t, reciprocal_16_lut_size>& reciprocal_16_lut
#include <bn_reciprocal_lut.h>
Reciprocal 16bit LUT.
int sin_lut_size constexpr
#include <bn_sin_lut.h>
Size of the sine LUT of 16bit values in 4.12 format.
const array<int16_t, sin_lut_size>& sin_lut
#include <bn_sin_lut.h>
Sine LUT of 16bit values in 4.12 format.