Outils pour utilisateurs

Outils du site


nsi:tds:maths:geometrie_analytique

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
nsi:tds:maths:geometrie_analytique [2022/09/30 11:13] goupillwikinsi:tds:maths:geometrie_analytique [2022/10/04 10:53] (Version actuelle) goupillwiki
Ligne 28: Ligne 28:
   * La méthode magique ''%%__mul__%%'' permet d'obtenir le point produit ''A * k'' où ''k'' est un nombre. Vous comprenez qu'on parle en termes de coordonnées.   * La méthode magique ''%%__mul__%%'' permet d'obtenir le point produit ''A * k'' où ''k'' est un nombre. Vous comprenez qu'on parle en termes de coordonnées.
   * La méthode magique ''%%__truediv__%%'' permet d'obtenir la division ''A / k'' où ''k'' est un nombre. Là encore il s'agi de coordonnées.   * La méthode magique ''%%__truediv__%%'' permet d'obtenir la division ''A / k'' où ''k'' est un nombre. Là encore il s'agi de coordonnées.
-  * La méthode magique ''%%__str__%%'' indique à Python quoi faire quand on demande un transtypage ''str(A)''+  * La méthode magique ''%%__str__%%'' indique à Python quoi faire quand on demande un transtypage ''str(A)''. On souhaite que cette fonction renvoie les coordonnées du point sous la forme $(x\,;\,y)$.
   * La méthode magique ''%%__repr__%%'' est utilisée lors de l'affichage d'un point en console.   * La méthode magique ''%%__repr__%%'' est utilisée lors de l'affichage d'un point en console.
  
 ===== Droite ===== ===== Droite =====
 +
 +{{ :nsi:tds:maths:classe_droite.png?direct&200|}}
 +
  
 L'objet ''Droite'' décrit une droite. Cette classe est dépendante de la classe ''Point''. L'objet ''Droite'' décrit une droite. Cette classe est dépendante de la classe ''Point''.
Ligne 37: Ligne 40:
 Une droite est définie par une équation. La forme la plus générale d'équation est $a\cdot x + b\cdot y + c = 0$. C'est l'équation cartésienne. On utilisera cette forme et pas $y = m\cdot x + p$ qui n'est pas valable pour une droite verticale. Une droite est définie par une équation. La forme la plus générale d'équation est $a\cdot x + b\cdot y + c = 0$. C'est l'équation cartésienne. On utilisera cette forme et pas $y = m\cdot x + p$ qui n'est pas valable pour une droite verticale.
  
-  L'objet ''Droite'' a les attributs ''a''''b''''c''.+Quelques précisions sur les méthodes :\\ //dans ce qui suit ''d1'' et ''d2'' sont des droites, ''A'' un point.// 
 +  * ''d1.is_parallel(d2)'' renvoie ''True'' si les deux droites sont parallèles.\\ <wrap tip>deux droites sont parallèles si $a\cdot b' = a' \cdot b$</wrap> 
 +  * ''d1.perp_by_point(A)'' renvoie la droite perpendiculaire à ''d1'' et passant par ''A''.\\ <wrap tip>Une perpendiculaire a les coefficients $a= -b$ et $ba$</wrap> 
 +  * ''d1.inter(d2)'' renvoie le point intersection des deux droites.\\ //précondition : les deux droites ne sont pas parallèles//\\ <wrap tip>$x = -\frac{c\cdot b' - c'\cdot b}{a\cdot b- a'\cdot b}$ et $y = -\frac{c\cdot a' - c'\cdot a}{b\cdot a' - b'\cdot a}$</wrap> 
 +  * ''d1.has_point(A)'' renvoie ''True'' si le point est sur la droite.\\ <wrap tip>Tester si $a\cdot x_A + b\cdot y_A + c = 0$</wrap> 
 +  * ''d1.is_perp(d2)'' renvoie ''True'' si les deux droites sont perpendiculaires\\ <wrap tip>si $a\cdot a' + b \cdot b' = 0$</wrap> 
 +  * Les méthodes magiques ''%%__str__%%'' et ''%%__repr__%%'' répondent au même besoin que pour ''Point''. On souhaite que ces fonctions renvoient l'équation de la droite au format ''str''.
  
-On veut les méthodes suivantes +On aimerait disposer d'autres fonctions 
-  * tester si deux droites sont parallèles <wrap tip>deux droites sont parallèles si $a\cdot b= a\cdot b$</wrap> +  * une fonction ''par_deux_pts(A:PointB:Point) -Droite'' renvoyant droite passant par deux points,\\ <wrap tip>Les coefficients pour la droite $(AB)$ sont $a = y_B - y_A$, $b = -(x_B - x_A)$ et $c = -a\cdot x_A b \cdot y_A$</wrap> 
-  * obtenir la droite passant par deux points,\\ <wrap tip>Les coefficients pour la droite $(AB)$ sont $a = y_B - y_A$, $b = -(x_B - x_A)$ et $c = -a\cdot x_A b \cdot y_A$</wrap> +  * une fonction ''mediatrice(A:PointB:Point) -Droite'' renvoyant la médiatrice su segment [AB]\\ <wrap tip>C'est la perpendiculaire à (AB) passant par le milieu de [AB]</wrap>
-  * obtenir la perpendiculaire à la droite et passant par un point<wrap tip>Une perpendiculaire a les coefficients $a= -b$ et $b= a$</wrap> +
-  * obtenir la médiatrice d'un segment donné sous la forme d'une paire de points, +
-  * obtenir l'intersection entre deux droites,\\ <wrap tip>Il faut que les deux droites soient non parallèles puis $x = -\frac{c\cdot b- c'\cdot b}{a\cdot b' - a'\cdot b}$ et $y = -\frac{c\cdot a' - c'\cdot a}{b\cdot a' - b'\cdot a}$</wrap> +
-  * tester si un point est sur la droite <wrap tip> il suffit de vérifier si $a\cdot x + b\cdot y + c = 0$</wrap> +
-  * tester si deux droites sont perpendiculaires <wrap tip>Elles sont perpendiculaires si $a\cdot a' + b \cdot b' = 0$</wrap>+
  
-====Segment =====+== Mais où placer ces deux fonctions ? == 
 +  * si on les place dans ''Point'', l'objet ''Point'' devient dépendant de ''Droite'' ce qu'on préférait éviter, 
 +  * on ne peut les placer dans la classe ''Droite'' car les méthodes de ''Droite'' concernent toujours une droite qui existe déjà. Mais ces deux fonctions servent à créer une droite (qui n'existe donc pas encore) à partir d'autre chose qu'une droite... D'ailleurs, vous voyez qu'il n'y a pas ''self'' dans la définition de ces fonctions. 
 +  * on peut créer une classe ''Segment''. Un objet de cette classe serait défini par deux points. La fonction ''mediatrice'' serait une méthode d'un objet ''Segment''. Cette approche est rigoureuse et logique : en mathématique, la médiatrice appartient à un segment, pas à un point ou une droite. Il est donc naturel de donner à ''Segment'' la responsabilité de la médiatrice. Le seul défaut de cette approche est d'obliger à créer une classe en plus. 
 +  * on peut les placer dans le module ''droite.py'' comme fonctions ordinaires, à côté de la classe ''Droite''. C'est une bonne option. Son seul tort est de ne pas tout empaqueter dans la classe, ce qu'on préfère quand on commence à faire des classes. 
 +  * plus technique, on peut placer ces fonctions dans la classe ''Droite'' mais en signalant qu'elles fonctionnent autrement. On pourra écrire :
  
-<WRAP tip+<code python
-Pas obligémais ça peut paraître mieux car plus rigoureux+class Droite: 
-</WRAP>+    # ... 
 +    @staticmethod 
 +    def par_deux_pts(A:PointB:Point) -> 'Droite': 
 +        ''' 
 +        renvoie la droite (AB) 
 +        ''' 
 +        a = B.y - A.y 
 +        b = -(B.x - A.x) 
 +        c = -a*A.x - b*A.y 
 +        return Droite(a, b, c) 
 +         
 +# usage avec deux points A et B : 
 +d = Droite.par_deux_points(A, B) 
 +</code>
  
-  * Un objet ''Segment'' est défini par les deux ''Point'' extrémités.+<WRAP tip> 
 +Le mot clé ''%%@staticmethod%%'' est la façon en Python de prévenir que la méthode qui suit est spéciale. C'est une méthode **statique**. Ce concept existe dans tous les langages implémentant des classes. La fonction ''%%droite_par_pts%%'' est attaché à la classe ''Droite'' elle-même, pas à un objet instancié de cette classe.
  
-Il a les méthodes : +Vous remarquez également qu'on appelle la fonction en précisant le nom de la classe : ''%%Droite.par_deux_points(A, B)%%''Cela montre que la fonction est //rangée// dans ''Droite''. C'est un des aspects des classes qu'on apprécie : tout est bien rangé. 
-  * ''milieu'' +</WRAP>    
-  * ''longueur'' +
-  * ''mediatrice''Cette fonction ne serait alors plus dans la classe ''Droite''+
  
 ===== Triangle ===== ===== Triangle =====
  
-Un objet ''Triangle'' décrit un triangle. Cette classe est dépendante des classes ''Point'' et ''Triangle''.+{{ :nsi:tds:maths:classe_triangle.png?direct&200|}}
  
-  * Le triangle a les attributs ''A''''B''''C'', ses sommets.+Un objet ''Triangle'' décrit un triangle. Il est défini par ses trois sommets. Cette classe est dépendante des classes ''Point'' et ''Droite''.
  
-On veut les méthodes suivantes +Quelques précisions sur les méthodes :\\ //Ci-dessous, ''t'' est de type ''Triangle''// 
-  * aire du triangle +  * ''t.aire()'' renvoie l'aire du triangle 
-  * périmètre du triangle +  * ''t.perimeter()'' renvoie le périmètre du triangle 
-  * centre de gravité +  * ''t.G()'' renvoie le centre de gravité 
-  * centre du cercle circonscrit +  * ''t.O()'' renvoie le centre du cercle circonscrit (intersection des médiatrices) 
-  * orthocentre +  * ''t.H()'' renvoie l'orthocentre (intersection des hauteurs) 
-  * tester si le triangle est rectangle+  * ''t.is_rectangular()'' renvoie ''True'' si le triangle est rectangle 
 +  * ''%%__str__%%'' et ''%%__repr__%%'' renvoient une représentation texte du triangle. On pourra par exemple renvoyer la liste des coordonnées des 3 sommets.
  
 ===== Développement ===== ===== Développement =====
nsi/tds/maths/geometrie_analytique.1664529226.txt.gz · Dernière modification : de goupillwiki