IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Suppression des points inutiles dans un contour polygonal


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut Suppression des points inutiles dans un contour polygonal
    Bonjour,

    J'ai un polygone défini par minimum 4 côtés (rectangle au minimum donc) mais qui peut en avoir plus (le polygone définit une dalle de béton).
    Normalement on a 2 points par côté, or il se trouve que les données issues d'un logiciel CAO ont des fois plus de 2 points pour définir un côté (un segment peut donc être défini par 3-4-5 points donc avec 1-2-3 points intermédiaires entre ses extrêmités par exemple).

    Ces points intermédiaires me gêne pour un post traitement que je dois faire, je voudrais savoir si vous connaissez un algorithme prenant en entrée une liste de points et ressortant une liste avec les points seulement nécessaires pour définir un polygone (suppression des points intermédiaires donc)?

    J'ai bien l'idée de tester la colinéarité des vecteurs portés par les segments et je vois le principe, mais j'ai peur de me planter dans la gestion des index et le marquage des points non nécessaires etc...

    Merci

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Une boucle comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Pour i = n-1 a 2 pas -1
        Point_0 = tableau[i-1]
        Point_1 = tableau[i]
        Point_2 = tableau[i+1]
     
        Si fff_alignés (Point_0, point_1, point_2) alors   tableaussupprime( tableau, i )
    fin
     
    Avec la procédure fff_alignés() :
    Procedure fff_alignes( point_0, point_1, point_2 ) 
    d01 = distance(point_0, point_1)
    d02 = distance(point_0, point_2)
    d12 = distance(point_1, point_2)
    si d12 = d01 + d12 alors renvoyer vrai
    renvoyer faux
    En parcourant la boucle de la fin vers le début, ça simplifie énormément les choses, ça évite les décalages d'indices dès qu'on supprime un point.

    Ici, je fais l'impasse sur le cas où le Premier Point ( ou le dernier) serait en trop.

    Si Les valeurs traitées sont des nombres réels, si on est susceptible d'avoir des points quasiment-alignés, il faut adapter la fonction fff_alignés() , pour éventuellement avoir une petite tolérance.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Non Trap D, je ne pense pas que ce soit une bonne piste.

    Tevious a déjà le contour se son polygone. Ses n points sont ordonnés pour former le contour. Eventuellement, ce polygone n'est pas convexe.
    Et ce qu'il veut, c'est supprimer le ou les points intermédiaires, quand il a 3 points alignés ou plus.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut
    Merci pour votre réponse à chacun,

    Le parcours de Graham ne semble effectivement pas adapté.
    En fait ce que je veux faire c'est plus ou moins un filtre qui ne garde que le nombre minimal de points nécessaires pour définir mon polygone.
    L'idée de tbc92 me semble bonne, l'approche par un calcul de distance ne m'a pas sauté aux yeux (comme dit je pensais faire un calcul de colinéarité entre les vecteurs portés par les segments), mais me semble tout à fait viable.

    Je vais implémenter cette solution pour tester et voir ce que ça donne. Il n'y a normalement pas de points quasi allignés et travaillant avec des unités mm il n'y a pas de coordonnées à valeur réelle. Par contre il faudra peut être gérer la question d'arrondi dans le calcul des distances...

    @+

  6. #6
    Membre du Club
    Homme Profil pro
    ingénieur en automatique
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur en automatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Points : 54
    Points
    54
    Par défaut
    Testé sur Scilab, fonctionne de manière parfaite!

    Je vais l'implémenter sur un automate comme c'est la finalité!

    Merci pour l'aide!

  7. #7
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    bonjour,

    réponse un peu tardive, mais l'algorithme de Douglas-Peucker permet de simplifier un polygone en ne gardant que les points "saillants". Dans le cas d'un rectangle, et en prenant une distance égale à une fraction de la largeur du rectangle, ça devrait fonctionner assez bien.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. (Autolisp] Suppression des points dans les blocs
    Par david32viry dans le forum Lisp
    Réponses: 3
    Dernier message: 14/07/2016, 10h31
  2. [CR XI] Suppression des zéros inutiles après une virgule
    Par Jsh dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 26/02/2008, 14h13
  3. Réponses: 5
    Dernier message: 25/02/2008, 14h34
  4. suppression des Points dans N°Tel
    Par LeXo dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/08/2007, 15h29
  5. suppression des caratères spéciaux dans une table
    Par syl221 dans le forum Access
    Réponses: 6
    Dernier message: 31/08/2005, 09h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo