Cette série d'activités s'inspire de l'excellent livre de Daniel Shiffman, "The Nature of Code" (licence Creative Commons Attribution-NonCommercial 3.0).
Vous devez avoir des connaissances de base sur les vecteurs (un niveau "classe de seconde" de l'enseignement général devrait suffire). Si nécessaire, vous trouverez des cours de mathématiques en ligne qui abordent ce sujet, comme par exemple ici.
Vous devez maîtriser les notions suivantes :
Pour manipuler les vecteurs, Processing propose la classe "PVector". Voici quelques exemples d'utilisation des méthodes de la classe PVector (un vecteur est un objet (au sens programmation orientée objet) dans Processing) :
Pour créer un vecteur, il suffit d'écrire :
PVector AB;
AB = new PVector(5,15);
Ces 2 lignes vous permettent de créer un vecteur $\vec{AB}$ de coordonnées $\begin{pmatrix} 5 \\ 15 \end{pmatrix}$
Si vous ne passez aucun paramètre au constructeur PVector :
PVector AB;
AB = new PVector();
par défaut, le vecteur $\vec{AB}$ a pour coordonnées $\begin{pmatrix} 0 \\ 0 \end{pmatrix}$ (vecteur nul $\vec{0}$).
Il est possible d'obtenir la coordonnée x d'un vecteur $\vec{AB}$ en écrivant "AB.x" (même chose pour la coordonnée y avec "AB.y"). "AB.x" et "AB.y" sont de type float.
Saisissez et testez ce code
PVector AB;
AB = new PVector(5,15);
println("x : "+AB.x+" y : "+AB.y);
La méthode "mag" permet d'obtenir la norme d'un vecteur.
Saisissez et testez ce code
PVector AB;
float normeAB;
AB = new PVector(5,15);
normeAB = AB.mag();
println(normeAB);
La méthode "mult" permet d'avoir le résultat d'un vecteur par un réel. Cette méthode peut s'utiliser de 2 manières différentes :
Saisissez et testez ce code
PVector AB;
float k=2.0;
AB = new PVector(5,15);
println("Avant => x : "+AB.x+" y : "+AB.y);
AB.mult(k);
println("Après => x : "+AB.x+" y : "+AB.y);
Saisissez et testez ce code
PVector AB;
PVector CD;
float k=2.0;
AB = new PVector(5,15);
CD = new PVector();
CD=AB.mult(AB,k);
println("AB => x : "+AB.x+" y : "+AB.y);
println("CD => x : "+CD.x+" y : "+CD.y);
La méthode "add" permet d'additionner 2 vecteurs. Comme pour la méthode "mult", la méthode "add" peut être utilisée de 2 façons :
Saisissez et testez ce code
PVector AB;
PVector CD;
AB = new PVector(5,15);
CD = new PVector(9,8);
println("AB avant => x : "+AB.x+" y : "+AB.y);
println("CD avant => x : "+CD.x+" y : "+CD.y);
AB.add(CD);
println("AB après => x : "+AB.x+" y : "+AB.y);
println("CD après => x : "+CD.x+" y : "+CD.y);
Saisissez et testez ce code
PVector AB;
PVector CD;
PVector EF;
AB = new PVector(5,15);
CD = new PVector(9,8);
EF = new PVector();
println("AB avant => x : "+AB.x+" y : "+AB.y);
println("CD avant => x : "+CD.x+" y : "+CD.y);
println("EF avant => x : "+EF.x+" y : "+EF.y);
EF=PVector.add(AB,CD);
println("AB après => x : "+AB.x+" y : "+AB.y);
println("CD après => x : "+CD.x+" y : "+CD.y);
println("EF après => x : "+EF.x+" y : "+EF.y);
La méthode "sub" permet de soustraire 2 vecteurs, elle s'utilise comme la méthode "add". La relation $\vec{EF}=\vec{AB}-\vec{CD}$ s'écrit :
EF = PVector.sub(AB,CD); //avec EF, AB et CD de type PVector
Comme pour la méthode "add", il est aussi possible d'écrire :
AB.sub(CD);
La méthode "normalize" permet de normaliser un vecteur (cette notion vous est peut-être inconnue). Soit un vecteur $\vec{AB}$ la normalisation de ce vecteur donnera un vecteur $\vec{u}$ qui aura la même direction et le même sens que $\vec{AB}$ mais qui n'aura pas la même norme. On aura $||\vec{u}||$=1 ($\vec{u}$ est un vecteur unitaire). On aura donc $\vec{AB}=||\vec{AB}||\vec{u}$.
Saisissez et testez ce code
PVector AB;
PVector u;
float normeu;
float normeAB;
AB = new PVector(5,15);
u = new PVector();
AB.normalize(u);
normeu=u.mag();
normeAB=AB.mag();
println("norme de u = "+normeu);
println("norme de AB = "+normeAB);
Créez un programme qui permettra de vérifier que $\vec{AB}$ et $\vec{u}$ (voir ci-dessus) ont bien la même direction (colinéaire) et le même sens