GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 21 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 5
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas
Le #24226371

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.



Des introductions à Python, il y en a plein. Des simples, des
compliquées, en français, en anglais...

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?



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
Michel Claveau - MVP
Le #24227471
Salut !

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
Alain Ketterlin
Le #24227951
Michael Grünewald
j'ai implémenté quelques classes représentant des figures dans le plan
(des points, des lignes brisées, …) et j'ai besoin de calcul er des
distances entre deux objets ou des intersections.

J'aimerais avoir quelques indications sur la façon de s'en tirer hab ilement.

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 ni très joli, ni très maintenable!



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.

Je pensais créer une classe singleton «PlanStrategy» en ch arge 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 figu res
simples dont on sait calculer les distances mutuelles et les
intersections, et cette présentation est utilisée par «Pla nStrategy»
pour traiter les cas qu'il ne connaît pas.



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.

[...]
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étec te
toutes pour moi. Quelles sont les techniques de débogages plus
avancées que le saupoudrage de «print» du code?



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.
Michael Grünewald
Le #24228081
Nicolas wrote:
[…] 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.



Des introductions à Python, il y en a plein. Des simples, des
compliquées, en français, en anglais...



En l'occurence il s'agissait du tutoriel canonique appartenant à la doc
officielle.

J'ai cependant quelques problèmes avec la mise au point des programmes, […] Y-a'il des outils pour
«tracer» le code, qui notamment afficheraient les affectations de
variables?



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.



Ok merci pour l'info.
--
Michael
Michael Grünewald
Le #24228071
Salut,

Michel Claveau - MVP wrote:
Pour calculer les distances, une simple fonction peut suffire.
Exemple :
[…]



merci pour ta réponse, mais es-tu bien sûr d'avoir lu la question? :-)

Pour déboguer, regarde la doc de Python sur le module pdb
C'est simple, mais déjà suffisant.



Merci, je regarderai le module pdb.
--
Michael
Publicité
Suivre les réponses
Poster une réponse
Anonyme