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éfinitionModifier

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éesModifier

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.

AbscisseModifier

    def x
        @x
    end

Pour lire ou modifier l'abscisse d'un vecteur u, on invoque u.x.

OrdonnéeModifier

    def y
        @y
    end

AffichageModifier

    def to_s
        '('+@x.to_s+';'+@y.to_s+')'
    end

Il suffit pour afficher un vecteur u, de faire

puts(u)

NormeModifier

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érationsModifier

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:

SommeModifier

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.

ProduitsModifier

Il y a deux multiplications intéressantes:

Par un nombreModifier

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 vecteurModifier

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.

TestsModifier

De colinéaritéModifier

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

Pour savoir si deux vecteurs sont orthogonaux, on compare leur produit scalaire à 0:

    def ortho(u)
        self * u ==0
    end

ExempleModifier

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))