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 modifier
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
Vecteur directeur modifier
def directeur
@a.vecteur(@b)
end
On obtient le vecteur directeur de d par d.directeur
Alignement modifier
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
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
É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 modifier
Comme 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 modifier
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
Parallélisme modifier
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.
Intersection modifier
Pour calculer les coordonnées du point d'intersection de deux droites, on résout un système.
Exemple modifier
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))