-
Notifications
You must be signed in to change notification settings - Fork 3
Débuter
Si vous n'avez pas encore ajouté la librairie à vos dépendances, référez vous au README
L'objet courant de la librairie est MaskExpression
. Il s'agit d'une classe muable qui stocke :
- une expression mathématique sous forme de chaîne de caractères (String)
- les variables de l'expression sous forme de tableau de caractères (char[])
Pour effectuer des opérations avec un object de type MaskExpression
, la classe MaskOperator
sera nécessaire. L'opérateur se récupère avec la méthode statique begin()
ou begin(MaskExpression)
. Pour chaque calcul, l'opérateur aura besoin de :
- Un objet
MaskExpression
, objet sur lequel l'opérateur va se baser (= in) - Un objet
MaskExpression
, objet dans lequel le résultat sera écrit (= out) - Un boolean, qui définit si
out
sera utilisé comme prochainin
par défaut, lors du prochain calcul. Utile uniquement pour l'enchaînement de calculs. Par exemple, pour calculer la dérivée seconde d'un polynôme, le boolean doit être àtrue
: c'est le résultat de la dérivée qui doit être dérivé à nouveau. Définir le boolean àfalse
dériverait le polynôme une première fois, puis dériverait à nouveau ce même polynôme de départ. Un autre exemple est le calcul d'images d'une fonction. Le boolean doit être àfalse
, pour qu'une fois une première image calculée, la deuxième image soit calculée à partir de la fonction de départ, et non du résultat du premier calcul d'image.
Note : Si la méthode begin(MaskExpression) est utilisée, les paramètres
in
etout
pourront être ignorés, le mask spécifié dans l'appel de la méthode sera utilisé commein
etout
. Le boolean n'a donc aucune importance.
Voici un exemple (pseudo code) :
MaskExpression exp = new MaskExpression("4x+5");
MaskExpression vide = new MaskExpression();
/* écrit le résultat de l'opération faite à partir de `4x+5` dans `empty`. Comme le boolean est sur `false`, le prochain
calcul sera fait à partir de `exp` (si la valeur `in` est laissée pour vide). S'il était sur `true`, le prochain calcul
aurait été fait à partir du résultat du premier calcul */
MaskOperator.begin().faireUneOperation(exp, vide, false);
Pour des exemples concrets, référez vous aux autres pages du wiki qui traitent des calculs spécifiques.
Il peut arriver qu'un calcul doit être fait, et que le mask spécifié dans out
est inutile, car seul le résultat du calcul est voulu. On pourrait donc simplement créer un objet out
à chaque calcul et ne jamais l'utiliser. En revanche, cela peut causer des pertes de performances remarquables. Pour éviter cela, MaskExpression
contient une variable de type MaskExpression
dite temporaire
, qui est supposée "subir" les calculs, pour pouvoir ensuite appeler une autre opération sans retenir le mask. Voici un exemple d'utilisation de la variable temporaire :
package test;
import net.akami.mask.math.*;
public class MainTester {
public static void main(String... args) {
// On cherche à calculer des images de cette fonction, de x=0 à x=50
MaskExpression courbe = new MaskExpression("x^2 -6x -4");
MaskOperator op = MaskOperator.begin();
for(int i = 0; i <= 50; i++) {
op.imageFor(courbe, MaskExpression.TEMP, false, r -> System.out.println(op.asInt(r)), String.valueOf(i));
/* Est l'équivalent de :
op.imageFor(courbe, MaskExpression.TEMP, false, String.valueOf(i));
System.out.println(op.asInt(MaskExpression.TEMP)); */
}
}
}
Note : Dans la suite du wiki, le terme
Mask
tout court peut être utilisé. Il s'agit bien d'un abus de langage pour direMaskExpression