Manuel de Calcul Matriciel et 3D




Introduction

Fonctionnement global

Aspect visuel du programme
Ligne de commande

Fonctionnement détaillé

Fonctionnement de la pile
Saisie dans la ligne de commande
Syntaxe des différents des objets de la pile
Les commandes
Visualisation d'objets en 3D
Format des fichiers
Gestion des erreurs




Introduction

Calcul Matriciel et 3D (CM3D) a été programmé à l'origine en C++ sur des stations de travail sous UNIX dans le cadre d'un projet informatique à mon école, l'ESIEE. J'ai ensuite effectué la traduction en Java.

CM3D permet de faire du calcul sur des réels et des matrices de réels, et d'utiliser ces opérations pour l'affichage d'objets en 3D. Il permet de réaliser les différents calculs mathématiques précisés par la suite. Le programme fonctionne à la manière d'une calculatrice de type HP, c'est à dire en utilisant la notation dite " polonaise inverse " grâce à une pile et à la syntaxe précisée par la suite.




Fonctionnement global

Aspect visuel du programme

Le programme se présentera sous la forme d'une fenêtre séparée en quatre " window " différentes :

  • une qui contient seulement une ligne de commande dans laquelle l'utilisateur tape les différentes instructions,
  • une qui affiche les derniers termes de la pile,
  • une qui affiche le dernier terme de la pile en totalité si possible,
  • une qui affiche les éventuels messages d'erreurs.

Pile

La pile peut contenir trois types d'objets :

  1. des scalaires,
  2. des matrices,
  3. des chaînes de caractères pour les noms de variables.

Ligne de commande

Dans la ligne de commande, l'utilisateur entrera soit un objet parmi les trois types (scalaires, matrices et chaînes de caractères) que peut contenir la pile, soit un nom d'instruction à exécuter sous la forme d'une chaîne de caractères réservée.


Fonctionnement détaillé

Fonctionnement de la pile

On rappelle les trois types d'objets que peut contenir la pile :

  1. des scalaires,
  2. des matrices,
  3. des chaînes de caractères pour les noms de variables.

L'affichage de ces différents objets est précisé dans les paragraphes expliquant la syntaxe de ces objets.

Afin de faciliter les explications par la suite, on utilisera la notation suivante pour représenter les objets dans pile :

P(1) sera le 1er objet de la pile,

P(i) sera le iéme objet de la pile.

De plus, dire " mettre X en 2 " signifie que l'objet P(2) sera X. Dans ce cas là, tous les objets au-dessus de 2 dans la pile sont décalés vers le haut.


Saisie dans la ligne de commande

L'utilisateur ne peut saisir dans la ligne de commande qu'un seul objet ou une seule commande à la fois. Il doit valider sa saisie en appuyant sur ENTER.

Si un objet a été saisi, celui-ci est placée dans la pile. Si une commande a été tapée, celle-ci est exécutée.

Syntaxe des différents des objets de la pile

Syntaxe des matrices

Lorsque l'utilisateur entre la commande MAT, le programme demande d'entrer les coefficients ligne par ligne. Dans la fenêtre de messages s'affichent les indices du coefficient à entrer, sous la forme :

( i , j )

où i est l'indice de ligne et j l'indice de colonne.

L'utilisateur passe d'un coefficient à l'autre en appuyant sur ENTER

Exemple : ( 1 , 2 )

L'affichage des matrices se fait dans la pile. Si la taille de la matrice dépasse la taille de la fenêtre, elle est tronquée.

Syntaxe des noms de variables

Les noms de variables seront des chaînes de 20 caractères maximum parmi les 26 lettres de l'alphabet et les 10 chiffres. Les majuscules et minuscules seront distinguées, mais il sera possible affecter un objet quelconque (scalaire, matrice) à tous types de caractères, majuscule ou minuscule.

Un nom de variable devra impérativement commencer par une lettre.

Il est interdit d'affecter une variable à une autre variable, c'est à dire une chaîne de caractère à une variable.

Par défaut, lorsqu'une variable est mise dans la pile, elle reste sous la forme d'une chaîne de caractères et elle n'est évaluée (c'est à dire remplacée par sa valeur) que lorsque l'utilisateur le commande avec l'instruction EVAL. Lorsque l'utilisateur appelle un calcul avec des variables, celles-ci sont évaluées et le calcul effectué, le résultat étant un objet (et non une variable).

Les commandes

Toutes les paramètres des commandes, lorsque ce sont des scalaires ou des matrices, peuvent être soit des variables contenant les objets (matrices ou scalaires), soit directement des objets.

Syntaxe

Les commandes auront deux syntaxes possibles :

  1. un des 4 caractères suivant pour l'addition, la soustraction, la multiplication et la division des scalaires ou l'addition, la soustraction et la multiplication des matrices :

+ - * /
  1. des chaînes de caractères pour les autres commandes. Ces commandes pourront être tapées en majuscules ou en minuscules.

Liste des commandes

Le tableau suivant résume les différentes commandes avec leur syntaxe et leur signification.

CommandeSIGNIFICATION
quitQuitte le programme
exitQuitte le programme
Création des matrices
matLancement de la création d'une matrice de scalaires de P(2) lignes et de P(1) colonnes.

Sort P(1) et P(2) de la pile. La matrice créée est mise en 1.

Voir 4.3.3.3 pour le syntaxe des matrices.

idCrée la matrice identité de dimension P(1), entier supérieur à 1.

Sort P(1). La matrice créée est mise en 1.

putModifie la matrice P(4) en mettant le scalaire P(3) dans l'élément d'indice ligne P(2) et la d'indice colonne P(1).

Sort P(1), P(2) et P(3) de la pile. La matrice modifiée est en 1.

GETCherche l'élément de la matrice P(3) d'indice ligne P(2) et la d'indice colonne P(1).

Sort P(1) et P(2) de la pile. L'élément cherché est mis en 1.

ligMet en 1 le nombre de lignes de la matrice P(1).
colMet en 1 le nombre de colonnes de la matrice P(1)
Commandes de calcul sur les scalaires et les matrices
negChange le signe du scalaire ou de la matrice P(1).
+Additionne les éléments P(2) et P(1) si ce sont 2 scalaires ou 2 matrices.

Sort P(1) et P(2). Met le résultat en 1.

-Soustrait l'élément P(1) à l'élément P(1) si ce sont 2 scalaires ou 2 matrices.

Sort P(1) et P(2). Met le résultat en 1.

*Multiplie les éléments P(2) et P(1) quelque soit leurs types et dans l'ordre P(2) * P(1).

Sort P(1) et P(2). Met le résultat en 1.

/Divise le scalaire P(2) par le scalaire P(1).

Sort P(1) et P(2). Met le résultat en 1.

tTranspose la matrice P(1).
trCalcul la trace de la matrice en P(1) et la met en 1. Ne sort pas la matrice de la pile.
detCalcule de déterminant de la matrice P(1) et le met en 1. Ne sort pas la matrice de la pile.
RGCalcule de rang de la matrice P(1) et le met en 1. Ne sort pas la matrice de la pile.
invInverse le scalaire ou la matrice P(1).
powMet la matrice ou le scalaire P(2) à la puissance P(1). P(1) doit être un entier relatif.

Sort P(1) et P(2). Met le résultat en 1.

Commandes de gestion de la pile
depSort de la pile P(1).
clrVide la pile.
swapEchange P(1) et P(2).
dupRecopie P(1) en P(1).
EchSort l'entier P(1) supérieur à 1. Soit i cet entier. Echange les éléments P(1) et P(i+1) dans la pile.
Commandes de gestion des variables
stoMet l'élément P(2) qui peut être une matrice ou un scalaire (pas une variable) dans la variable de nom P(1). Sort P(1) et P(2).
evalRemplace le nom de variable en P(1) par son contenu.
Commande de lecture et d'enregistrement des matrices uniquement
loadMet en 1 à la place de la chaîne P(1) la matrice lue à partir du fichier de nom P(1) et d'extension .MAT.

Voir 4.3.6.1 pour le format des données enregistrées

SaveSi P(1) est une variable non attribuée, enregistre dans le fichier de nom P(1) et d'extension .MAT la matrice P(2).

Si P(1) est une variable attribuée, enregistre dans le fichier de nom P(1) et d'extension .MAT la matrice contenu dans P(1).

Sort P(1).

Voir 4.3.6.1 pour le format des données enregistrées

Commandes de visualisation en 3D (réservées au mode réel)
visuCrée le fichier au format GNUPlot de nom P(1) avec l'extension des fichiers de GNUPlot contenant la liste des segments résultants de la transformation de la scène en 3D du fichier de nom P(1) et d'extension .OBJ en utilisant la matrice réelle P(2).

Ne sort ni P(1), ni P(2).

Lance GNUPlot et affiche l'image.

obsCrée la matrice réelle qui transforme le repère fixe en un repère en O' comme défini dans l'annexe. Les coordonnées x, y et z de O' sont respectivement en P(3), P(2) et P(1).

Sort P(1), P(2) et P(3). Met la matrice créée en 1.

rotxCrée la matrice de rotation autour de l'axe (Ox) avec l'angle en degrés P(1).

Sort P(1). Met la matrice créée en 1.

rotyCrée la matrice de rotation autour de l'axe (Oy) avec l'angle en degrés P(1).

Sort P(1). Met la matrice créée en 1.

rotzCrée la matrice de rotation autour de l'axe (Oz) avec l'angle en degrés P(1).

Sort P(1). Met la matrice créée en 1.

cosRemplace le scalaire en P(1) par son cosinus. Ne fonctionne pas avec les matrices.
sinRemplace le scalaire en P(1) par son sinus. Ne fonctionne pas avec les matrices.

Les commandes spécifiques au calcul matriciel (TRAN, DET, RG, TR) ne fonctionnent pas sur des scalaires (elles ne les considèrent pas comme des matrices (1,1).

Visualisation d'objets en 3D

Non documenté

Format des fichiers

Format des fichiers d'enregistrement des matrices

Le programme offre une possibilité d'enregistrer et de lire un fichier contenant une matrice.

Les fichiers ont pour extension .MAT. Le nom de ces fichiers, sans l'extension, est d'au maximum 20 caractères parmi les 26 lettres de l'alphabet et les 10 chiffres.

Le format de ces fichiers est le suivant :

<fichier> : := <dimensions> <matrice>

<dimensions> : := <nombre de lignes> <nombre de colonnes>

<matrice> : := <ligne scalaires> [ <matrice> ]

<ligne scalaires> : := <scalaire> [ <ligne scalaires> ]

Exemple : La matrice (2,3) suivante sera codée, ligne par ligne, par le fichier suivant :

2  3  -1  -3/2  0  3/4  5  -4 

Format des fichiers de points

Non documenté

Format des fichiers d'objets en 3D

Non documenté

Gestion des erreurs

En cas d'erreur, par exemple l'exécution de l'instruction DET pour une matrice non carrée, le programme affiche un message d'erreur dans la partie de la fenêtre réservée à cet effet. Ce message indique le type de l'erreur survenue

La dernière instruction exécutée est annulée et aucune modification n'est effectuée sur la pile.