Mathématiques avec Python et Ruby/Droites en Ruby

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche


La droite peut être définie à partir d'une de ses équations, mais aussi à partir de deux points. Et comme on a vu précédemment comment on peut créer en Ruby un objet point, on va voir comment on peut s'en servir pour gérer des droites sous Ruby.

Définition[modifier | modifier le wikicode]

Là encore, on va définir une classe Droite possédant, lors de son instanciation, deux points:

class Droite

    def initialize(a,b)
        @a,@b=a,b
    end

Vecteurs[modifier | modifier le wikicode]

Vecteur directeur[modifier | modifier le wikicode]

    def directeur
        @a.vecteur(@b)
    end

On obtient le vecteur directeur de d par d.directeur

Alignement[modifier | modifier le wikicode]

Pour savoir si le point m est sur la droite d, on peut rajouter ce test:

    def IsOnLine(d)
        vecteur(d.a).colin(d.directeur)
    end

mais on le rajoute dans l'objet Point, puisque c'est une propriété du point...

Vecteur normal[modifier | modifier le wikicode]

Le vecteur normal s'obtient en choisissant ses coordonnées pour que le produit scalaire avec le vecteur directeur soit nul:

    def normal
        Vecteur.new(-self.directeur.y,self.directeur.x)
    end

Le vecteur normal s'obtient avec d.normal et permet facilement d'avoir l'équation cartésienne ci-dessous.

Équations[modifier | modifier le wikicode]

Équation cartésienne[modifier | modifier le wikicode]

    def cartesienne
        '('+self.normal.x.to_s+')x+('+self.normal.y.to_s+')y='+(self.normal.x*@a.x+self.normal.y*@a.y).to_s
    end

Pour afficher l'équation cartésienne de d, on entre

puts(d.cartesienne)

Équation réduite[modifier | modifier le wikicode]

Comme il y a des divisions à effectuer, on a intérêt à faire appel à mathn':

require 'mathn'


Coefficient directeur[modifier | modifier le wikicode]

    def cd
        self.directeur.y/self.directeur.x
    end

Ordonnée à l'origine[modifier | modifier le wikicode]

    def oalo
        @a.y-self.cd*@a.x
    end

Équation[modifier | modifier le wikicode]

L'équation réduite se définit par

    def reduite
        'y='+self.cd.to_s+'x+('+self.oalo.to_s+')'
    end

et s'obtient par d.reduite.

Comparaison de deux droites[modifier | modifier le wikicode]

Parallélisme[modifier | modifier le wikicode]

Deux droites sont parallèles lorsque leurs vecteurs directeurs sont colinéaires. Mais aussi (sous réserve qu'elles en aient) lorsqu'elles ont le même coefficient directeur:

    def parallele(d)
        self.cd==d.cd
    end

Pour savoir si deux droites d1 et d2 sont parallèles, on fait

puts(d1.parallele(d2))

Perpendicularité[modifier | modifier le wikicode]

Deux droites sont perpendiculaires si et seulement si leurs vecteurs normaux sont orthogonaux:

    def perpendiculaire(d)
        self.normal.ortho(d.normal)
    end

On aurait aussi pu chercher si le produit de leurs coefficients directeurs est égal à -1.

Intersection[modifier | modifier le wikicode]

Pour calculer les coordonnées du point d'intersection de deux droites, on résout un système.

Exemple[modifier | modifier le wikicode]

Dans l'exemple des chapitres précédents, on peut regarder si les deux droites (CA) et (CB) sont perpendiculaires:

a=Point.new(-1,3)
b=Point.new(5,1)
c=Point.new(1,5)


d1=Droite.new(c,a)
d2=Droite.new(c,b)
puts(d1.perpendiculaire(d2))