Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dénombrement de Triangles - Version Python Moderne

Application Python pour compter automatiquement le nombre de "vrais" triangles (non plats) dans une figure géométrique.

Auteur : Laurent Petitprez (Wouf) - site2wouf.fr


📋 Principe

L'application analyse une figure géométrique définie par :

  • Des segments tracés entre différents points
  • Des alignements (optionnels) pour exclure les triangles plats

Elle génère tous les triplets de points possibles et vérifie lesquels forment des triangles valides.


🚀 Utilisation

Installation

Aucune dépendance externe requise ! Le script utilise uniquement la bibliothèque standard Python (module itertools).

Requis : Python 3.6+

Préparation des fichiers

Créez deux fichiers texte dans le même répertoire que le script :

1. graphe.txt (obligatoire)

Format : chaque ligne contient un point suivi de tous les points auxquels il est relié.

Exemple :

ABCDE
BACDE
CABDE
DABCE
EABCD

Signification :

  • Ligne 1 : ABCDE → le point A est relié à B, C, D et E (segments [AB], [AC], [AD], [AE])
  • Ligne 2 : BACDE → le point B est relié à A, C, D et E (segments [BA], [BC], [BD], [BE])
  • etc.

2. alignement.txt (optionnel)

Format : chaque ligne contient des points alignés.

Exemple :

AEC
BED

Signification :

  • Ligne 1 : AEC → les points A, E et C sont alignés (le triangle AEC est plat)
  • Ligne 2 : BED → les points B, E et D sont alignés (le triangle BED est plat)

Exécution

python3 nbtri_moderne.py

Résultat

Le script affiche :

  • Le nombre de points
  • Le nombre de segments
  • Les alignements déclarés (si présents)
  • Le nombre de vrais triangles
  • La liste complète des triangles trouvés

💡 Exemple Complet

Figure : Quadrilatère ABCD avec diagonales [AC] et [BD] sécantes en E

     A
    /|\
   / | \
  /  |  \
 /   E   \
D----+----B
 \   |   /
  \  |  /
   \ | /
    \|/
     C

Fichiers d'entrée

graphe.txt :

ABCDE
BACDE
CABDE
DABCE
EABCD

alignement.txt :

AEC
BED

Résultat attendu

============================================================
📊 RÉSULTATS DE L'ANALYSE
============================================================

📍 Points : 5
   A, B, C, D, E

📏 Segments : 10
   [AB], [AC], [AD], [AE], [BC], [BD], [BE], [CD], [CE], [DE]

⚠️  Alignements déclarés : 2
   AEC
   BED

🔺 Nombre de vrais triangles : 8

📋 Liste des triangles :
   ABC ABD ABE ACD ADE BCD BCE CDE

============================================================

Décomposition des 8 triangles :

  • 4 petits triangles : ABE, BCE, CDE, DAE
  • 4 grands triangles : ABC, BCD, CDA, DAB

🔧 Améliorations par rapport à la version originale

  1. Optimisation avec combinations

    • Génération directe des triplets uniques (pas de doublons)
    • Complexité réduite : C(n,3) au lieu de n³
  2. Code structuré et documenté

    • Fonctions clairement nommées et commentées
    • Docstrings détaillées pour chaque fonction
    • Gestion des erreurs améliorée
  3. Affichage moderne

    • Interface en couleur avec emojis
    • Présentation claire et structurée
    • Messages d'erreur explicites
  4. Maintenabilité

    • Code modulaire facile à modifier
    • Séparation claire des responsabilités
    • Respect des conventions PEP 8

📝 Notes Pédagogiques

Pourquoi déclarer les alignements manuellement ?

Au lieu de détecter automatiquement les points alignés (ce qui nécessiterait des calculs géométriques et des seuils arbitraires), l'utilisateur les déclare explicitement. Cela offre :

  1. Contrôle pédagogique : l'enseignant décide ce qui compte comme "triangle plat"
  2. Flexibilité : adaptation aux figures dessinées à main levée
  3. Simplicité : pas de calculs géométriques complexes
  4. Transparence : l'utilisateur comprend exactement ce qui est pris en compte

Complexité algorithmique

  • Sans combinations : O(n³) pour générer les triplets + filtrage
  • Avec combinations : O(C(n,3)) = O(n³/6) pour générer + O(1) par triplet

Pour n = 10 points : 1000 itérations → 120 itérations (8x plus rapide)


📜 Licence

Ce script est distribué librement pour un usage éducatif.

Auteur : Laurent Petitprez (Wouf)
Site web : site2wouf.fr
GitHub : github.com/w0uf/nb_tri


🤝 Contribution

N'hésitez pas à proposer des améliorations ou à signaler des bugs !

Pour toute question : contact via site2wouf.fr

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages