Développer en Amateur sur Nintendo DS

Mathématiques

Les nombres décimaux

Le processeur principal de la Nintendo DS n'est pas très performant sur les calculs utilisant des nombres décimaux. Les utiliser peut donc ralentir concidérablement une application. Heureusement, il existe un moyen pour contourner ce problème : utiliser des nombres décimaux à virgule fixe ("fixed point").

Le principe est simple, on partage les 32 bits d'un entier en 2 parties : la partie entière (sur 24 bits) et la partie décimale (sur 8 bits). Cela se traduit par l'idée suivante : on représente tous les nombres comme étant des fractions de 256. C'est à dire que pour représenter la valeur 1, on utilise la valeur 256 (car 256/256 = 1), pour représenter 0.5, on utilise 128 (car 128/256 = 0.5) et ainsi de suite.

Dans la pratique, calculer en fixed point revient à faire des opérations de décalage de bits. Multiplier par 256 est un décalage de 8 bits vers la gauche et diviser par 256 est un décalage de 8 bits vers la droite.

Un exemple, nous allons déplacer 3 lettres à des vitesses différentes.

#include <PA9.h>

int main(int argc, char ** argv) {
  // Speeds
  s32 fast_speed = 256; // 1 step per frame
  s32 avrg_speed = 128; // 0.5 step per frame
  s32 slow_speed = 64// 0.25 step per frame

  // Initials positions
  s32 fast_x = 0;
  s32 avrg_x = 0;
  s32 slow_x = 0;

  // System initialization
  PA_Init();
  PA_InitVBL();
  PA_InitText(0, 0);

  while(1) {
    // Display the text
    PA_OutputSimpleText(0, fast_x >> 8, 1, " F");
    PA_OutputSimpleText(0, avrg_x >> 8, 3, " A");
    PA_OutputSimpleText(0, slow_x >> 8, 5, " S");

    // Move the text
    fast_x += fast_speed;
    avrg_x += avrg_speed;
    slow_x += slow_speed;

    // If a letter arrive at the end of the screen, make it appear at the other side
    if((fast_x >> 8) == 31)
      fast_x = 0;

    if((avrg_x >> 8) == 31)
      avrg_x = 0;

    if((slow_x >> 8) == 31)
      slow_x = 0;

    PA_WaitForVBL();
  }
  return 0;
}

Les angles

La PALib calcule les angles suivant le schéma suivant :

Cercle des angles

Comme on peut le voir, les angles varient de 0 à 511, l'angle de 0° pointant vers l'Est.