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