Forum Programmation.python Sources:Trouver tout les quadrilatéres possibles avec n points aleatoirement générés

Posté par  .
Étiquettes : aucune
3
15
avr.
2010
Bonjour,

Alors je viens de finir un programme sans prétention qui ,je l'espère,vous impressionnera:

Il sait:
  • Trouver le nombre de quadrilatère / les donner
  • Trouver un cas spécial (6 points,39 quadrilatères)
  • Faire de rapides stats (maximum/minimum de quadrilatères pour n points en ayant faire k essais
  • Afficher les quadrilatères trouvés
    • Déplacer les points (clic gauche->drag)
    • Ajouter de nouveaux points (clic droit)
    • Refaire une nouvelle liste de points (espace)
    • Changer le nombre de points (flèche droite et gauche)

Pour le lancer il vous faudra python (2.x) et pygame (paquet python-pygame)

Le code est ici http://quadsfinder.googlecode.com/files/quad.zip

Si vous avez des commentaires,critiques,..Ce programme étant juste un défi mathématique au départ pour encadrer le nombre de quadrilatères possibles avec n points
  • # Traceback

    Posté par  (site web personnel) . Évalué à 2.

    View.py ligne 49

    Il y a un problème sur l'appel de 'get_random_points'

    Cette fonction n'existe pas dans view.py

    C'est peu être quad.get_random_points() mais dans ce cas le nombre de paramètres est incorrecte.

    Erreur se produit sur l'événement 'barre d'espace'
    • [^] # Re: Traceback

      Posté par  . Évalué à 1.

      Exact,je viens de corriger ca,merci beaucoup
      • [^] # Re: Traceback

        Posté par  . Évalué à 1.

        Je viens d'ajouter encore quelques fonctions qui vont surement m'aider:

        sauvegarde / chargement de points (touche s / l)
        trouver la solution optimale (pour avoir un maximum de quadrilatère pour n points)
        touche o pour ajouter un point optimal (qui apportera le plus de quadrilatère)
  • # Trouver un cas spécial (6 points,39 quadrilatères)

    Posté par  . Évalué à 2.

    un truc me chiffonne :
    il y a C(6,4) = 15 manières différentes de choisir 4 points parmi 6.
    Une fois 4 points choisis, il y a 3! = 6 quadrilatères orientés ou 3!/2 = 3 quadrilatères non orientés.

    Au total, il y a 45 quadrilatères non-orientés étant donnés 6 points.
    Comment tu arrives à 39 ? Tu ne considères que les quadrilatères non-croisés ? (oui, de base, un quadrilatère croisé est un quadrilatère : http://fr.wikipedia.org/wiki/Quadrilat%C3%A8re )

    De manière générale, pour n points, tu auras 3*C(n,4) quadrilatères non-orientés.
    • [^] # Re: Trouver un cas spécial (6 points,39 quadrilatères)

      Posté par  . Évalué à 3.

      En faite,vous pouvez tester ce cas,et voir la figure correspondante pour vous en convaincre

      Je ne compte pas les croisés (sinon,le nombre de quadrilatère serait le même pour chaque ensemble de n points)

      En faite pour 4 points choisis,il y a soit 1 ou 3 quadrilatères non-croisés possibles (concave ou convexe).Le 45 est le nombre de quadrilatère en comptant les croisés.

      En tout cas très bonne réflexion
  • # Impressionnant et ssans prétention

    Posté par  . Évalué à 4.

    un programme sans prétention qui ,je l'espère,vous impressionnera:

    Hmm. C'est difficilement compatible !:-) Mais ça donne envie de regarder.
    • [^] # Re: Impressionnant et ssans prétention

      Posté par  . Évalué à 3.

      C'est juste pour dire qu'il n'est pas abouti mais qu'il reste impressionant (je trouve)

      Sinon,je viens de remarquer que python2.6 est requis au minimum à cause d'une toute petite ligne ("except Exception as e") le as étant reservé à python 2.6 m'a dit python 2.5 (impressionant quand même:2.5 dit que ce mot clef apparait dans 2.6 <- joli!)
      • [^] # Re: Impressionnant et ssans prétention

        Posté par  . Évalué à 3.

        Sinon,je viens de remarquer que python2.6 est requis au minimum à cause d'une toute petite ligne ("except Exception as e") le as étant reservé à python 2.6 m'a dit python 2.5 (impressionant quand même:2.5 dit que ce mot clef apparait dans 2.6 <- joli!)

        À mon époque, on écrivait :
        except Exception, e:
        Mais je vois que depuis le 2.6 on peut effectivement mettre "as" (mais les deux sont acceptés). Ce simple changement te rendra compatible avec les "vieux" pythons. Mais je n'arrive pas à trouver la raison de ce changement ... Personnellement, où l'as-tu appris comme ça ?
      • [^] # Re: Impressionnant et ssans prétention

        Posté par  . Évalué à 3.

        Je ne sais pas s'il est impressionnant niveau algorithmique, mais en tous cas niveau code je le trouve plutôt bien fait, au sens où tu utilises le python "bien". Genre tu utilises les méthodes "modernes" de faire les choses, et tu ne te fais pas avoir par les "corner case" (genre les arguments par défaut qui seraient des mutables ...). Ça fait longtemps que tu fais du python ?
        • [^] # Re: Impressionnant et ssans prétention

          Posté par  . Évalué à 2.

          Je viens tout juste de commencé le python mais j'ai bien lu la doc et regardé moultes exemples (plus ou moins (voir très moins)) bien.
          Mais j'ai une relative grosse expérience avec la programmation en générale (code propre,compréhensible,logique,clair,..)

          En tout cas ça flatte l'égo!

          sinon le "Exception as e" je l'ai trouvé en regardant la doc (même si j'utilisai le Exception,e au début,mais je le trouve relativement obscur (et faut bientôt passer à python 3,donc autant s'y mettre bien!)
          • [^] # Re: Impressionnant et ssans prétention

            Posté par  . Évalué à 2.

            Balèze, alors. Tu devais avoir de l'expérience dans un autre langage dynamique comme python, peut-être ? En tous cas, dans le genre "propre", faire des tests unitaires pour un programme comme ça ... je dirais que tu vas peut-être un peu trop loin, là :-)
            Après, ce n'est qu'un programme "court" (même si je fais surtout des programmes courts en python), très algorithmique, et qui n'utilise pas d'objets : ça ne représente pas tout ce qu'on trouve en python.
            Pour "référence", moi j'en fait depuis un peu moins de 10 ans, mais très irrégulièrement (genre ça fait quelques temps que je n'ai pas écrit un programme de plus de 20 lignes en python ...).

            Pour la syntaxe d'exception, c'est sûr que "as" est plus clair. Je ne savais pas que l'ancienne syntaxe allait disparaître, c'est étrange vu que la nouvelle est seulement arrivée dans le 2.6, ça fait short comme transition. Mais après vérification, c'est bien le cas ... je vais me mettre à jour.
            • [^] # Re: Impressionnant et ssans prétention

              Posté par  . Évalué à 1.

              Les tests unitaires sont une découverte trés récente mais quand je change d'algo en cours de route c'est énormément utile
              Même si comme c'est un algo rapidement fait,j'ai pas trop développé les tests (genre pour chaque fonction,un test)
              (ca à l'air béte comme ca,mais les test unitaires c'est tellement utile.....je sais pas comme convaincre de cette beauté de voir que tout mes tests réussisent...)
  • # Justement j'ai fait un truc dans le même genre

    Posté par  . Évalué à 2.

    Je suis en train de développer une petite Api pour la balise canvas et j'ai fait une petite application dans le même genre :

    http://dev.bydorian.com/Canvas%20Games/Quads/example.html

    Vu que ca utilise l'HTML5, les sources sont disponibles directement mais vu que j'utilise git en local pour gérer tout ca, j'ai mis tout ca sur gitorious : http://gitorious.org/api-canvas-games . Le script en lui-même est là : http://gitorious.org/api-canvas-games/devel/blobs/master/Qua(...) .

    « En fait, le monde du libre, c’est souvent un peu comme le parti socialiste en France » Troll

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.