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éfinition
modifierLà 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
modifierVecteur directeur
modifier def directeur
@a.vecteur(@b)
end
On obtient le vecteur directeur de d par d.directeur
Alignement
modifierPour 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
modifierLe 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Équation cartésienne
modifier 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
modifierComme il y a des divisions à effectuer, on a intérêt à faire appel à mathn':
require 'mathn'
Coefficient directeur
modifier def cd
self.directeur.y/self.directeur.x
end
Ordonnée à l'origine
modifier def oalo
@a.y-self.cd*@a.x
end
Équation
modifierL'é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
modifierParallélisme
modifierDeux 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é
modifierDeux 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
modifierPour calculer les coordonnées du point d'intersection de deux droites, on résout un système.
Exemple
modifierDans 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))