Géométrie et distance
Le
Michael Grünewald
Salut,
j'ai implémenté quelques classes représentant des figures dans le plan
(des points, des lignes brisées, …) et j'ai besoin de calculer des
distances entre deux objets ou des intersections.
J'aimerais avoir quelques indications sur la façon de s'en tirer habilement.
La méthode malhabile que j'utilise jusqu'ici consiste à ajouter une
méthode distance_to_<figure> à chaque classe qui doit calculer sa
distance à une <figure>. Le moins qu'on puisse dire est que ce n'est ni
très joli, ni très maintenable!
Je pensais créer une classe singleton «PlanStrategy» en charge de
calculer les distances (et les intersections) qui apprend des cas
particuliers et qui sait les généraliser. Par exemple, chaque classe de
figure est capable de se présenter comme une réunion de figures simples
dont on sait calculer les distances mutuelles et les intersections, et
cette présentation est utilisée par «PlanStrategy» pour traiter les cas
qu'il ne connaît pas.
Quelles sont les suggestions des développeurs chevronnés dans ce cas …
de figure?
J'ai débuté Python il y a deux semaines, le langage est très facile à
prendre en main quand on a de l'expérience de la programmation. Je
trouve que le tutoriel a quelques graves lacunes (le mot clef «return»
n'y apparaît même pas, il me semble!) mais fournit une introductiuon
efficace.
J'ai cependant quelques problèmes avec la mise au point des programmes,
je fais partie des gens qui font beaucoup de petites fautes
d'inattention et j'ai l'habitude que le compilateur les détecte toutes
pour moi. Quelles sont les techniques de débogages plus avancées que le
saupoudrage de «print» du code? Saupoudrage qui du reste n'est pas très
recommandé s'il s'agit de traquer une erreur causée par une mauvaise
valeur envoyée vers le code d'une bibliothèque. Y-a'il des outils pour
«tracer» le code, qui notamment afficheraient les affectations de variables?
Merci pour vos conseils et votre aide!
--
Michael
j'ai implémenté quelques classes représentant des figures dans le plan
(des points, des lignes brisées, …) et j'ai besoin de calculer des
distances entre deux objets ou des intersections.
J'aimerais avoir quelques indications sur la façon de s'en tirer habilement.
La méthode malhabile que j'utilise jusqu'ici consiste à ajouter une
méthode distance_to_<figure> à chaque classe qui doit calculer sa
distance à une <figure>. Le moins qu'on puisse dire est que ce n'est ni
très joli, ni très maintenable!
Je pensais créer une classe singleton «PlanStrategy» en charge de
calculer les distances (et les intersections) qui apprend des cas
particuliers et qui sait les généraliser. Par exemple, chaque classe de
figure est capable de se présenter comme une réunion de figures simples
dont on sait calculer les distances mutuelles et les intersections, et
cette présentation est utilisée par «PlanStrategy» pour traiter les cas
qu'il ne connaît pas.
Quelles sont les suggestions des développeurs chevronnés dans ce cas …
de figure?
J'ai débuté Python il y a deux semaines, le langage est très facile à
prendre en main quand on a de l'expérience de la programmation. Je
trouve que le tutoriel a quelques graves lacunes (le mot clef «return»
n'y apparaît même pas, il me semble!) mais fournit une introductiuon
efficace.
J'ai cependant quelques problèmes avec la mise au point des programmes,
je fais partie des gens qui font beaucoup de petites fautes
d'inattention et j'ai l'habitude que le compilateur les détecte toutes
pour moi. Quelles sont les techniques de débogages plus avancées que le
saupoudrage de «print» du code? Saupoudrage qui du reste n'est pas très
recommandé s'il s'agit de traquer une erreur causée par une mauvaise
valeur envoyée vers le code d'une bibliothèque. Y-a'il des outils pour
«tracer» le code, qui notamment afficheraient les affectations de variables?
Merci pour vos conseils et votre aide!
--
Michael

Poser une question


Des introductions à Python, il y en a plein. Des simples, des
compliquées, en français, en anglais...
Il y a des environnements de développements qui permettent de faire de
l'analyse de code. J'utilise Eclipse avec le plugin PyDev. Un peu lourd
mais très efficace. Il existe également d'autres solutions que je
n'utilise pas.
Nicolas
Pour calculer les distances, une simple fonction peut suffire.
Exemple :
# -*- coding: utf-8 -*-
import math
class point(object):
def __init__(self,x=0,y=0):
self.x=float(x)
self.y=float(y)
def distance(pdebut,pfin):
return math.sqrt(math.pow(pfin.y-pdebut.y,2)+math.pow(pfin.x-pdebut.x,2))
a=point(1,2)
b=point(8,3)
print distance(a,b)
print distance(point(5,6),point(2,2))
Pour déboguer, regarde la doc de Python sur le module pdb
C'est simple, mais déjà suffisant.
@-salutations
--
Michel Claveau
Oui, mais il n'y a pas vraiment de solution, il n'y a pas de moyen
général de définir la distance. (Voir plus bas.)
En fait, le calcul de la distance va dans chaque cas dépendre du type
des deux figures impliquées. Les langages objets comme Python ne font de
liaison dynamique que sur un paramètre. Un langage comme... Common Lisp
(oui, Lisp, ou plutôt CLOS, son extension objet) te permet de choisir
une version en fonction de tous les types de paramètres.
C'est une très bonne idée. Vraiment. Il reste encore à dà ©finir ce qu'est
la distance (sûrement le min des distances des composants). Mais le
principe est très bien, je trouve.
[...]
Il y a pdb (je n'ai jamais essayé, en général je m'en sors a vec des
print...)
Si tu en arrives à des programmes assez compliqués, tu vas amà ¨rement
regretter le typage statique. Mais c'est un autre débat. La répon se
habituelle pour python est : écrire des tests unitaires, des tas de
tests unitaires, etc.
-- Alain.
En l'occurence il s'agissait du tutoriel canonique appartenant à la doc
officielle.
Ok merci pour l'info.
--
Michael
Michel Claveau - MVP wrote:
merci pour ta réponse, mais es-tu bien sûr d'avoir lu la question? :-)
Merci, je regarderai le module pdb.
--
Michael