Mathématiques avec Python et Ruby/Droites en Ruby

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

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

VecteursModifier

Vecteur directeurModifier

    def directeur
        @a.vecteur(@b)
    end

On obtient le vecteur directeur de d par d.directeur

AlignementModifier

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 normalModifier

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.

ÉquationsModifier

Équation cartésienneModifier

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

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

require 'mathn'


Coefficient directeurModifier

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

Ordonnée à l'origineModifier

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

ÉquationModifier

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 droitesModifier

ParallélismeModifier

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

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.

IntersectionModifier

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

ExempleModifier

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