sgdk: maths.h File Reference

sgdk

- Main Page
- Related Pages
- Classes
- Files

- File List
- File Members

Classes | Defines | Typedefs | Functions | Variables
maths.h File Reference

Mathematical methods. More...

Go to the source code of this file.

## Classes

struct | Vect2D_u16
| 2D Vector structure - u16 type. More...
struct | Vect2D_s16
| 2D Vector structure - s16 type. More...
struct | Vect2D_u32
| 2D Vector structure - u32 type. More...
struct | Vect2D_s32
| 2D Vector structure - s32 type. More...
struct | Vect2D_f16
| 2D Vector structure - f16 (fix16) type. More...
struct | Vect2D_f32
| 2D Vector structure - f32 (fix32) type. More...
struct | Mat2D_f16
| 2x2 Matrice structure - f16 (fix16) type. Internally uses 2 2D vectors. More...
struct | Mat2D_f32
| 2x2 Matrice structure - f32 (fix32) type. Internally uses 2 2D vectors. More...
struct | Vect3D_u16
| 3D Vector structure - u16 type. More...
struct | Vect3D_s16
| 3D Vector structure - s16 type. More...
struct | Vect3D_u32
| 3D Vector structure - u32 type. More...
struct | Vect3D_s32
| 3D Vector structure - s32 type. More...
struct | Vect3D_f16
| 3D Vector structure - f16 (fix16) type. More...
struct | Vect3D_f32
| 3D Vector structure - f32 (fix32) type. More...
struct | Mat3D_f16
| 3x3 Matrice structure - f16 (fix16) type. Internally uses 3 3D vectors. More...
struct | Mat3D_f32
| 3x3 Matrice structure - f32 (fix32) type. Internally uses 3 3D vectors. More...
struct | Vect4D_f16
| 4D Vector structure - f16 (fix16) type. More...
struct | Vect4D_f32
| 4D Vector structure - f32 (fix32) type. More...
struct | Mat4D_f16
| 4x4 Matrice structure - f16 (fix16) type. Internally uses 4 4D vectors. More...
struct | Mat4D_f32
| 4x4 Matrice structure - f32 (fix32) type. Internally uses 4 4D vectors. More...

## Defines

#define | min(X, Y) (((X) < (Y))?(X):(Y))
| Returns the lowest value between X an Y.
#define | max(X, Y) (((X) > (Y))?(X):(Y))
| Returns the highest value between X an Y.
#define | clamp(X, L, H) (min(max((X), (L)), (H)))
| Returns L if X is less than L, H if X is greater than H or X if in between L and H.
#define | abs(X) (((X) < 0)?-(X):(X))
| Returns the absolute value of X.
#define | PI 3.14159265358979323846
| PI number (3,1415..)
#define | FIX32_INT_BITS 22
#define | FIX32_FRAC_BITS (32 - FIX32_INT_BITS)
#define | FIX32_INT_MASK (((1 << FIX32_INT_BITS) - 1) << FIX32_FRAC_BITS)
#define | FIX32_FRAC_MASK ((1 << FIX32_FRAC_BITS) - 1)
#define | FIX32(value) ((fix32) ((value) * (1 << FIX32_FRAC_BITS)))
| Convert specified value to fix32.
#define | intToFix32(value) ((value) << FIX32_FRAC_BITS)
| Convert integer to fix32.
#define | fix32ToInt(value) ((value) >> FIX32_FRAC_BITS)
| Convert fix32 to integer.
#define | fix32Round(value) ((fix32Frac(value) > FIX32(0.5))?fix32Int(value + FIX32(1)) + 1:fix32Int(value))
| Round the specified value to nearest integer (fix32).
#define | fix32ToRoundedInt(value) ((fix32Frac(value) > FIX32(0.5))?fix32ToInt(value) + 1:fix32ToInt(value))
| Round and convert the specified fix32 value to integer.
#define | fix32Frac(value) ((value) & FIX32_FRAC_MASK)
| Return fractional part of the specified value (fix32).
#define | fix32Int(value) ((value) & FIX32_INT_MASK)
| Return integer part of the specified value (fix32).
#define | fix32Add(val1, val2) ((val1) + (val2))
| Compute and return the result of the addition of val1 and val2 (fix32).
#define | fix32Sub(val1, val2) ((val1) - (val2))
| Compute and return the result of the substraction of val2 from val1 (fix32).
#define | fix32Neg(value) (0 - (value))
| Return negate of specified value (fix32).
#define | fix32Mul(val1, val2) (((val1) >> (FIX32_FRAC_BITS / 2)) * ((val2) >> (FIX32_FRAC_BITS / 2)))
| Compute and return the result of the multiplication of val1 and val2 (fix32). WARNING: result can easily overflow so its recommended to stick with fix16 type for mul and div operations.
#define | fix32Div(val1, val2) (((val1) << (FIX32_FRAC_BITS / 2)) / ((val2) >> (FIX32_FRAC_BITS / 2)))
| Compute and return the result of the division of val1 by val2 (fix32). WARNING: result can easily overflow so its recommended to stick with fix16 type for mul and div operations.
#define | fix32Avg(val1, val2) (((val1) + (val2)) >> 1)
| Compute and return the result of the average of val1 by val2 (fix32).
#define | FIX16_INT_BITS 10
#define | FIX16_FRAC_BITS (16 - FIX16_INT_BITS)
#define | FIX16_INT_MASK (((1 << FIX16_INT_BITS) - 1) << FIX16_FRAC_BITS)
#define | FIX16_FRAC_MASK ((1 << FIX16_FRAC_BITS) - 1)
#define | FIX16(value) ((fix16) ((value) * (1 << FIX16_FRAC_BITS)))
| Convert specified value to fix16.
#define | intToFix16(value) ((value) << FIX16_FRAC_BITS)
| Convert integer to fix16.
#define | fix16ToInt(value) ((value) >> FIX16_FRAC_BITS)
| Convert fix16 to integer.
#define | fix16Round(value) ((fix16Frac(value) > FIX16(0.5))?fix16Int(value + FIX16(1)) + 1:fix16Int(value))
| Round the specified value to nearest integer (fix16).
#define | fix16ToRoundedInt(value) ((fix16Frac(value) > FIX16(0.5))?fix16ToInt(value) + 1:fix16ToInt(value))
| Round and convert the specified fix16 value to integer.
#define | fix16Frac(value) ((value) & FIX16_FRAC_MASK)
| Return fractional part of the specified value (fix16).
#define | fix16Int(value) ((value) & FIX16_INT_MASK)
| Return integer part of the specified value (fix16).
#define | fix16Add(val1, val2) ((val1) + (val2))
| Compute and return the result of the addition of val1 and val2 (fix16).
#define | fix16Sub(val1, val2) ((val1) - (val2))
| Compute and return the result of the substraction of val2 from val1 (fix16).
#define | fix16Neg(value) (0 - (value))
| Return negate of specified value (fix16).
#define | fix16Mul(val1, val2) (muls(val1, val2) >> FIX16_FRAC_BITS)
| Compute and return the result of the multiplication of val1 and val2 (fix16).
#define | fix16Div(val1, val2) (divs(val1 << FIX16_FRAC_BITS, val2))
| Compute and return the result of the division of val1 by val2 (fix16).
#define | fix16Avg(val1, val2) (((val1) + (val2)) >> 1)
| Compute and return the result of the average of val1 by val2 (fix16).
#define | fix16Log2(v) log2tab16[v]
| Compute and return the result of the Log2 of specified value (fix16).
#define | fix16Log10(v) log10tab16[v]
| Compute and return the result of the Log10 of specified value (fix16).
#define | fix16Sqrt(v) sqrttab16[v]
| Compute and return the result of the root square of specified value (fix16).
#define | fix32ToFix16(value) (((value) << FIX16_FRAC_BITS) >> FIX32_FRAC_BITS)
| Convert specified fix32 value to fix16.
#define | fix16ToFix32(value) (((value) << FIX32_FRAC_BITS) >> FIX16_FRAC_BITS)
| Convert specified fix16 value to fix32.
#define | sinFix32(value) sintab32[(value) & 1023]
| Compute sinus of specified value and return it as fix32. The input value is an integer defined as [0..1024] range corresponding to radian [0..2PI] range.
#define | cosFix32(value) sintab32[((value) + 256) & 1023]
| Compute cosinus of specified value and return it as fix32. The input value is an integer defined as [0..1024] range corresponding to radian [0..2PI] range.
#define | sinFix16(value) sintab16[(value) & 1023]
| Compute sinus of specified value and return it as fix16. The input value is an integer defined as [0..1024] range corresponding to radian [0..2PI] range.
#define | cosFix16(value) sintab16[((value) + 256) & 1023]
| Compute cosinus of specified value and return it as fix16. The input value is an integer defined as [0..1024] range corresponding to radian [0..2PI] range.

## Typedefs

typedef Vect2D_u16 | V2u16
| alias for Vect2D_u16
typedef Vect2D_s16 | V2s16
| alias for Vect2D_s16
typedef Vect2D_u32 | V2u32
| alias for Vect2D_u32
typedef Vect2D_s32 | V2s32
| alias for Vect2D_s32
typedef Vect2D_f16 | V2f16
| alias for Vect2D_f16
typedef Vect2D_f32 | V2f32
| alias for Vect2D_f32
typedef Vect3D_u16 | V3u16
| alias for Vect3D_u16
typedef Vect3D_s16 | V3s16
| alias for Vect3D_s16
typedef Vect3D_u32 | V3u32
| alias for Vect3D_u32
typedef Vect3D_s32 | V3s32
| alias for Vect3D_s32
typedef Vect3D_f16 | V3f16
| alias for Vect3D_f16
typedef Vect3D_f32 | V3f32
| alias for Vect3D_f32
typedef Vect4D_f16 | V4f16
| alias for Vect4D_f16
typedef Vect4D_f32 | V4f32
| alias for Vect4D_f32
typedef Mat2D_f16 | M2f16
| alias for Mat2D_f16
typedef Mat2D_f32 | M2f32
| alias for Mat2D_f32
typedef Mat3D_f16 | M3f16
| alias for Mat3D_f16
typedef Mat3D_f32 | M3f32
| alias for Mat3D_f32
typedef Mat4D_f16 | M4f16
| alias for Mat4D_f16
typedef Mat4D_f32 | M4f32
| alias for Mat4D_f32

## Functions

u32 | mulu (u16 op1, u16 op2)
| 16x16=32 unsigned multiplication. Force GCC to use proper 68000 mulu instruction.
s32 | muls (s16 op1, s16 op2)
| 16x16=32 signed multiplication. Force GCC to use proper 68000 muls instruction.
u16 | divu (u32 op1, u16 op2)
| Direct divu instruction (unsigned 32/16=16:16) access using inline assembly to process op1/op2 operation.
s16 | divs (s32 op1, s16 op2)
| Direct divs instruction (signed 32/16=16:16) access using inline assembly to process op1/op2 operation.
u16 | modu (u32 op1, u16 op2)
| Direct divu instruction (unsigned 32/16=16:16) access using inline assembly.
s16 | mods (s32 op1, s16 op2)
| Direct divs instruction (signed 32/16=16:16) access using inline assembly.
u32 | divmodu (u32 op1, u16 op2)
| Direct divu instruction (unsigned 32/16=16:16) access using inline assembly to process op1/op2 operation and op1op2 at same time.
s32 | divmods (s32 op1, s16 op2)
| Direct divs instruction (signed 32/16=16:16) access using inline assembly to process op1/op2 operation and op1op2 at same time.
u32 | intToBCD (u32 value)
| Binary to Decimal conversion.
u32 | distance_approx (s32 dx, s32 dy)
u32 | getApproximatedDistance (s32 dx, s32 dy)
| Return euclidean distance approximation for specified vector. The returned distance is not 100% perfect but calculation is fast.
s32 | getApproximatedLog2 (s32 value)
| Return 16.16 fixed point *approximation* of log2 of the specified 16.16 fixed point value. Ex: getLog2(1 << 16) = 0 getLog2(12345 << 16) = ~9.5 (real value = ~13.6)
u16 | getLog2Int (u32 value)
| Return integer log2 of specified 32 bits unsigned value. Ex: getLog2Int(1024) = 10 getLog2Int(12345) = 13

## Variables

const fix32 | sintab32 [1024]
const fix16 | sintab16 [1024]
const fix16 | log2tab16 [0x10000]
const fix16 | log10tab16 [0x10000]
const fix16 | sqrttab16 [0x10000]

## Detailed Description

Mathematical methods.

Author:
  Stephane Dallongeville

Date:
  08/2011

This unit provides basic maths methods.
You can find a tutorial about how use maths with SGDK here.

## Define Documentation

#define FIX16 | ( |  | value | ) | ((fix16) ((value) * (1 << FIX16_FRAC_BITS)))

Convert specified value to fix16.

EX:
f16 v = FIX16(-27.12);

#define FIX32 | ( |  | value | ) | ((fix32) ((value) * (1 << FIX32_FRAC_BITS)))

Convert specified value to fix32.

EX:
f32 v = FIX32(34.567);

## Function Documentation

u32 distance_approx | ( | s32 | dx,
|  | s32 | dy
| ) |  |

Deprecated:
  Use getApproximatedDistance(..) instead.

s32 divmods | ( | s32 | op1,
|  | s16 | op2
| ) |  |

Direct divs instruction (signed 32/16=16:16) access using inline assembly to process op1/op2 operation and op1op2 at same time.

Parameters:

  op1 | first operand - dividende (32 bit)
  op2 | second operand - divisor (16 bit)

Returns:
  16 bit (signed) result of the division in low 16 bit (0-15) and 16 bit (signed) result of the modulo operation in high 16 bit (16-31)

u32 divmodu | ( | u32 | op1,
|  | u16 | op2
| ) |  |

Direct divu instruction (unsigned 32/16=16:16) access using inline assembly to process op1/op2 operation and op1op2 at same time.

Parameters:

  op1 | first operand - dividende (32 bit)
  op2 | second operand - divisor (16 bit)

Returns:
  16 bit (unsigned) result of the division in low 16 bit (0-15) and 16 bit (unsigned) result of the modulo operation in high 16 bit (16-31)

s16 divs | ( | s32 | op1,
|  | s16 | op2
| ) |  |

Direct divs instruction (signed 32/16=16:16) access using inline assembly to process op1/op2 operation.

Parameters:

  op1 | first operand (32 bit)
  op2 | second operand (16 bit)

Returns:
  16 bit (signed) result of the division

u16 divu | ( | u32 | op1,
|  | u16 | op2
| ) |  |

Direct divu instruction (unsigned 32/16=16:16) access using inline assembly to process op1/op2 operation.

Parameters:

  op1 | first operand - dividende (32 bit)
  op2 | second operand - divisor (16 bit)

Returns:
  16 bit (unsigned) result of the division

u32 getApproximatedDistance | ( | s32 | dx,
|  | s32 | dy
| ) |  |

Return euclidean distance approximation for specified vector.
The returned distance is not 100% perfect but calculation is fast.

Parameters:

  dx | delta X.
  dy | delta Y.

s32 getApproximatedLog2 | ( | s32 | value | ) |

Return 16.16 fixed point *approximation* of log2 of the specified 16.16 fixed point value. Ex:
getLog2(1 << 16) = 0
getLog2(12345 << 16) = ~9.5 (real value = ~13.6)

Parameters:

  value | 16.16 fixed point value to return log2 of

u16 getLog2Int | ( | u32 | value | ) |

Return integer log2 of specified 32 bits unsigned value. Ex:
getLog2Int(1024) = 10
getLog2Int(12345) = 13

Parameters:

  value | value to return log2 of

u32 intToBCD | ( | u32 | value | ) |

Binary to Decimal conversion.

Parameters:

  value | Value to convert.

s16 mods | ( | s32 | op1,
|  | s16 | op2
| ) |  |

Direct divs instruction (signed 32/16=16:16) access using inline assembly.

Parameters:

  op1 | first operand (32 bit)
  op2 | second operand (16 bit)

Returns:
  16 bit (signed) modulo result of the division

u16 modu | ( | u32 | op1,
|  | u16 | op2
| ) |  |

Direct divu instruction (unsigned 32/16=16:16) access using inline assembly.

Parameters:

  op1 | first operand (32 bit)
  op2 | second operand (16 bit)

Returns:
  16 bit (unsigned) modulo result of the division

s32 muls | ( | s16 | op1,
|  | s16 | op2
| ) |  |

16x16=32 signed multiplication. Force GCC to use proper 68000 muls instruction.

Parameters:

  op1 | first operand
  op2 | second operand

Returns:
  32 bit (signed) result of multiply

u32 mulu | ( | u16 | op1,
|  | u16 | op2
| ) |  |

16x16=32 unsigned multiplication. Force GCC to use proper 68000 mulu instruction.

Parameters:

  op1 | first operand
  op2 | second operand

Returns:
  32 bit (unsigned) result of multiply

All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines