Mathématiques avec Python et Ruby/Vecteurs en Ruby
Un vecteur peut être défini par ses deux coordonnées ou avec deux points (son origine et son extrémité). La seconde technique a été abordée dans le chapitre précédent; on utilisera donc ici la définition par les coordonnées:
Définition
[modifier | modifier le wikicode]Le vecteur sera donc ici une classe Vecteur:
class Vecteur
def initialize(x,y)
@x, @y = x, y
end
end
Créer un vecteur, c'est donc lui donner une abscisse et une ordonnée. Comme on l'a vu dans le chapitre précédent, on peut maintenant en créer en Ruby avec
v=Vecteur.new(2,3)
Coordonnées
[modifier | modifier le wikicode]On gère les coordonnées et l'affichage comme avec les points; il y a beaucoup de ressemblance entre les vecteurs et les points, ce sont les méthodes qui ne seront pas les mêmes.
Abscisse
[modifier | modifier le wikicode] def x
@x
end
Pour lire ou modifier l'abscisse d'un vecteur u, on invoque u.x.
Ordonnée
[modifier | modifier le wikicode] def y
@y
end
Affichage
[modifier | modifier le wikicode] def to_s
'('+@x.to_s+';'+@y.to_s+')'
end
Il suffit pour afficher un vecteur u, de faire
puts(u)
Norme
[modifier | modifier le wikicode]La norme d'un vecteur se calcule avec le théorème de Pythagore:
def norme
Math.hypot(@x,@y)
end
On a utilisé la norme d'un vecteur pour calculer des distances au chapitre précédent.
Opérations
[modifier | modifier le wikicode]Il n'est pas d'usage de calculer le milieu de deux vecteurs, mais par contre, on n'additionne pas les points d'habitude (sauf avec GeoGebra). Mais les vecteurs, eux, on les additionne:
Somme
[modifier | modifier le wikicode]La somme de deux vecteurs est définie par la somme des coordonnées:
def + (u)
Vecteur.new(@x+u.x,@y+u.y)
end
La notation est infixée ce qui fait que la somme de deux vecteurs u et v se note tout simplement u+v.
Produits
[modifier | modifier le wikicode]Il y a deux multiplications intéressantes:
Par un nombre
[modifier | modifier le wikicode]En multipliant un vecteur par un nombre, on obtient un vecteur:
def * (r)
Vecteur.new(@x*r,@y*r)
end
Seulement on est obligé de mettre le nombre après le vecteur (u*3 pour avoir le triple de u, alors que d'habitude on fait plutôt le contraire: 3u), et ce produit est moins intéressant que le suivant:
Par un vecteur
[modifier | modifier le wikicode]En multipliant un vecteur par un vecteur, on obtient un nombre. Comme les nombres sont disposés comme les barreaux d'une échelle, on appelle cette multiplication, le produit scalaire des deux vecteurs:
def * (u)
@x*u.x+@y*u.y
end
On écrit u*v pour avoir le produit scalaire de u par v.
Tests
[modifier | modifier le wikicode]De colinéarité
[modifier | modifier le wikicode]Pour savoir si deux vecteurs sont colinéaires, on compare deux produits:
def colin(u)
@x*u.y==@y*u.x
end
Pour savoir si u et v sont colinéaires, on entre
puts(u.colin(v))
qui donnera true ou false selon que les vecteurs sont, ou non, colinéaires.
D'orthogonalité
[modifier | modifier le wikicode]Pour savoir si deux vecteurs sont orthogonaux, on compare leur produit scalaire à 0:
def ortho(u)
self * u ==0
end
Exemple
[modifier | modifier le wikicode]Dans l'exemple du chapitre précédent, le produit scalaire permet plus rapidement de vérifier que le triangle ABC est rectangle:
a=Point.new(-1,3)
b=Point.new(5,1)
c=Point.new(1,5)
u=c.vecteur(a)
v=c.vecteur(b)
puts(u*v)
puts(u.ortho(v))