Section_C: Polygone avec symétries

Soyez le premier à donner votre avis sur cette source.

Vue 8 fois - Téléchargée 2 fois

Description

▼▼ Bug CCM-CS: voir ci-dessous ▼▼

Bonjour,

Nous allons dans les prochaines versions introduire bien des méthodes pour construire des polygones très divers.
Pour "économiser" de la place sur l'écran, remplaçons d'abord les "boutons de commande" par un menu qui permet d'activer les mêmes fonctions.

La plupart des sections polygonales utilisées en pratique comportent une ou deux symétries (axiales).
Dans ces cas, il suffit de ne définir que la moitié ou même que le quart des segments qui forment le polygone.

Comme de bien entendu, avant de lancer une symétrie, il est impératif que tous les points figurent d'un même coté par rapport à l'axe concerné (X ou Y).
Sinon, le résultat est assez imprévisible et loufoque; pour le moment, aucun contrôle n'est fait !

Exemple:
$ 3 7
$ 3 4
$ 6 4
$ 6 0
$ 13 0
$ 5 11
                   Y                              Y
           6       |       5                      |      5
            ###############                       |      #
           #       |       #                      |     / #
          #  11    |    0   #                     |    /   #
         #     #########     #          <===      | 0 #     # 
        #      #   |   #      #         SymY      |   #      #
       #   9   #   |   #   2   #        <===      |   #   2   #
      #     ####   |   ####     #                 |   ####     #
     #      #   10 |  1   #      #                |  1   #      #
    #       #      |      #       #               |      #       # 
   ##########      |      ##########              |      ########## 
  7          8     |     3          4             |     3          4 
                   Y                              Y
Copiez les 6 points ci-dessus dans PolyEdit, puis Lire coords et + Symétrie axe Y.

Les fonctions "SymetrieX" et "SymetrieY" sont relativement simples:
  void SymetrieX() { // tous les points du même coté de l'axe X
    if (lst==0) return;
    Segment *s=lst,*newC=0,*n=0;
    do {s=s->nxt;
      n=new Segment(s->X,-s->Y); // Insert first dans cycle newC
      if (newC) {n->nxt=newC->nxt; newC->nxt=n;} else {n->nxt=n; newC=n;}
    } while (s!=lst);
    newC->nxt=lst->nxt; lst->nxt=n; lst=newC; // réunit les deux cycles
  }

  void SymetrieY() { // tous les points du même coté de l'axe Y
    if (lst==0) return;
    Segment *s=lst,*newC=0,*n=0;
    do {s=s->nxt;
      n=new Segment(-s->X,s->Y); // Insert first dans cycle newC
      if (newC) {n->nxt=newC->nxt; newC->nxt=n;} else {n->nxt=n; newC=n;}
    } while (s!=lst);
    newC->nxt=lst->nxt; lst->nxt=n; lst=newC; // réunit les deux cycles
  }
Etapes de void SymetrieY():
1) Le segment du dernier au premier point est provisoire.
2) On crée un polygone symétrique (-X,Y), où les segments tournent dans le sens opposé.
3) Les segments provisoires sont utilisés pour réunir les deux polygones.

Autre exemple:
$ 3 0
$ 7 7
$ 0 3
Copiez les 3 points ci-dessus dans la fenêtre PolyEdit, puis Lire coords.
Ensuite Symétrie axe X et Symétrie axe Y.

Dans ce second exemple, en listant les coordonnées obtenues, on remarque que 4 points apparaissent en double.
D'où l'intérêt de faire prochainement une fonction qui élimine les points doubles.

Remarquez aussi l'ajout des fonctions Miroir axe X et Miroir axe Y ajoutés sous {Opérations} pour lesquelles, en plus du changement des coordonnées, il y faut aussi inverser le sens du cycle.

Les appels à Rectangle et PolygoneRegulier se font actuellement avec des arguments fixes.
La prochaine version permettra de les appeler, ainsi que bien d’autres, avec des paramètres définis interactivement.
 
 
Bonne lecture ...
 
 

Liens

CodeS-SourceS: Polygones
CodeS-SourceS: Section_A: Polygone (caractéristiques géométriques)
CodeS-SourceS: Section_B: Polygone en cycle de segments
CodeS-SourceS: Windows-Controls: G-Menu
 
 

Bug CCM-CS: Charger une image

Depuis le 14 oct. 2017, personne ne peut déposer un code avec une image comme on est pourtant invité à le faire (voir par exemple: Liste des derniers codes sources).
A mon avis, ces images de capture sont très importantes !

En attendant, je mets cette image à disposition dans le fichier Capture.jpg du Zip, et demande au lecteur de m'excuser pour cette complication.

Je me permets de signaler ici ce bug d'une manière peu conventionnelle, car malgré bien des demandes, les "responsables" sont restés muets (voir: Discussion: Charger une image).

Dans tous les articles, j'enlèverai toute référence à ce bug dès qu'il sera de nouveau possible de charger une image (de capture) pour les articles existants et nouveaux.
 
 

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de William VOIROL

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.