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 :

vecteurs exterieurs unitaires aux sommets d'un polygone


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut vecteurs exterieurs unitaires aux sommets d'un polygone
    Salut,

    j'ai une soluce au problème suivant, mais j'aimerais connaître votre point de vue, car je recherche l'algo le plus rapide possible, et n'étant pas infographiste

    J'ai un polygone quelconque défini par une suite de sommets consécutifs Si. En chaque sommet Si j'aimerais déterminer son vecteur extérieur unitaire, à savoir le point extérieur au polygone sur la bissectrice de S(i-1)SiSi+1, à distance 1 de Si.

    Quelqu'un à déjà eu ce problème? Sur que oui
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Une solution est de calculer un vecteur de la bissectrice et de le normer. Mais je ne sais pas si c'est le plus rapide.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    J'ai un polygone quelconque
    Ton polygone est-il vraiment quelconque, c'est-à-dire que tu exclus le cas de polygones non convexes et le cas où deux côtés se croisent?
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  4. #4
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Pas de convexité assurée, mais pas de croisement possible...

    Pseudo: si tu veux, mais rapidement?
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Salut,

    Un début de reflexion :
    Tu normes tes 2 vecteurs SiS(i-1) et SiSi+1, tu fais la somme des vecteurs normés, tu obtiens un vecteur directeur de ta bissectrice, il ne reste plus qu'à le normer à nouveau. Ensuite pour savoir si ce vecteur est dirigé vers l'intérieur ou l'extérieur, ça dépend de la façon dont sont orientés les sommets et de l'angle entre les deux côtés (supérieur ou inférieur à 180).

    C'est sûrement à approfondir...
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Ok, ça c'est la partie simple, t'as obtenu un vecteur directeur normé v

    Le problème est de trouver le sens "vers" l'extérieur.

    Pour ce faire, je compte le nombre de points d'intersection des segments SiSi+1 sur R+.v et sur R-.v (avec qq règles si le segment ou un bord est sur la bissectrice). La demi-droite qui a un nombre pair d'intersections pointe vers l'extérieur...

    Y-a-t-il plus rapide??
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Tu aurais pu préciser que l'obtention du vecteur ne posait pas de problème...


    Pour l'orientation du vecteur : ma question :
    est-ce que tes sommets sont orientés? en gros est ce que l'on tourne toujours dans le même sens pour chaque suite de sommets de tes polygones?

    Si non, je ne connais pas de méthode plus rapide que la tienne...
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  8. #8
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Non, on ne tourne pas tj dans le même sens, mais si tel était le cas, tu as qq chose?
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Imaginons que l'on tourne toujours dans le sens anti-horaire, par exemple :


    Alors pour B :
    l'angle définit par les vecteurs (BC,BA) est inférieur à 180°, donc dans ce cas on utilise les vecteurs -BC et -BA pour calculer le vecteur directeur de la bissectrice (qui du coup sera dirigé vers l'extérieur)

    Pour C :
    l'angle définit par les vecteurs (CD,CB) est supérieur à 180°, donc dans ce cas on utilise les vecteurs CD et CB pour calculer le vecteur directeur de la bissectrice (qui du coup sera dirigé vers l'extérieur)
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  10. #10
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Nemerle Voir le message
    Non, on ne tourne pas tj dans le même sens, mais si tel était le cas, tu as qq chose?
    Bah là, y a pas de miracles. Avec seulement 2 segments consécutifs et sans connaitre le sens de parcours, c'est du de différencier l'intérieur/extérieur du polygone.

    Si tu connais le sens de parcours, tu peux determiner l'orientation de la normale N avec le signe du produit scalaire (BA,BC) ou du produit vectoriel (AB,N)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  11. #11
    Membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par pseudocode
    Si tu connais le sens de parcours, tu peux determiner l'orientation de la normale N avec le signe du produit scalaire (BA,BC) ou du produit vectoriel (AB,N)
    On peut le connaître, si les segments ne se croisent pas:

    Citation Envoyé par Exaflop.org - citant O'Rourke
    Subject 2.07: How do I find the orientation of a simple polygon?

    Compute the signed area (Subject 2.01). The orientation is counter-clockwise if this area is positive.
    Ce problème m'intéresse aussi au même moment :-).

  12. #12
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Luigicube Voir le message
    On peut le connaître, si les segments ne se croisent pas
    Oui, ma remarque ne fonctionne que pour un polygone non croisé. Sinon il faut utiliser des algos plus complexe pour déterminer l'orientation de la normale extérieure.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Nemerle Voir le message
    Salut,

    j'ai une soluce au problème suivant, mais j'aimerais connaître votre point de vue, car je recherche l'algo le plus rapide possible, et n'étant pas infographiste

    J'ai un polygone quelconque défini par une suite de sommets consécutifs Si. En chaque sommet Si j'aimerais déterminer son vecteur extérieur unitaire, à savoir le point extérieur au polygone sur la bissectrice de S(i-1)SiSi+1, à distance 1 de Si.

    Quelqu'un à déjà eu ce problème? Sur que oui

    Une solution rapide que je ferais est : (en O(N))

    Pour chaque sommet :

    • calculer l'angle Si-1,Si,Si+1
    • calculer le point milieu de Si-1,Si+1
    • Calculer bêtement le point par l'équation de la droite (Si, ce point)


    Non ?
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    [*]calculer le point milieu de Si-1,Si+1
    Juste une remarque : mathématiquement le milieu de Si-1,Si+1 n'est pas sur la bissectrice de S(i-1)SiSi+1 dans le cas général.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    ok, tu as raison...

    Je peux préciser alors : le milieu du segment si-1, pt, où pt est le point de Si-Si+1 à la même distance de Si que l'est Si-1..


    Ou bien la rotation de Si-1 par un angle alpha/2 autour de Si ..

    Bref, un calcul simple, quand même, non ?
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  16. #16
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Souviron: ok , mais tout le problème est de savoir dans quelle direction se trouve l'extérieur...

    Magelan & LuigiCube: je n'avait pas pensé à orienté le polygone, c'est une bonne idée, car comme Magelan l'a montré avec son dessin il suffit de 4 règles pour construire directement la normale extérieure en fct du sens d'orientation et de angle<180° ou pas. Z'aime pas calculer des angles car c'est couteux, mais ça doit quand même ici être plus rapide qu'une intersection de segments...
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  17. #17
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Je peux préciser alors : le milieu du segment si-1, pt, où pt est le point de Si-Si+1 à la même distance de Si que l'est Si-1..
    Donc ça revient à ce que j'ai marqué plus haut (en normant les vecteurs)


    Mais on en revient toujours au fait que les sommets doivent être orientés ce qui apparemment peut-être fait par le calcul de l'aire signé dans le lien donné par Luigicube.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Nemerle Voir le message
    Souviron: ok , mais tout le problème est de savoir dans quelle direction se trouve l'extérieur...
    D'après les routines de maths simples comme CounterClockWise ou le calcul exposé dans les Faqs algos de comp.graphics.algo, il suffit de faire le test

    counterclockwise (i-1,i,pt) et comparer à counterclockwise (i-1,i,i+1). Le point intérieur aura le même , le point extérieur aura le signe contraire..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  19. #19
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Magelan & LuigiCube: ça marche, ça suffit à mes besoins!

    Merci à tous!
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

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

Discussions similaires

  1. [trimesh] Normales interpolées aux sommets
    Par ERCO503 dans le forum MATLAB
    Réponses: 1
    Dernier message: 16/04/2014, 07h59
  2. Normales aux sommets
    Par dream_of_australia dans le forum Développement 2D, 3D et Jeux
    Réponses: 14
    Dernier message: 20/07/2009, 11h29
  3. Réponses: 5
    Dernier message: 23/08/2007, 13h44
  4. Surface du polygone formé par l'intersection d'un plan et d'un cube unitaire
    Par ToTo13 dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 08/09/2006, 10h05
  5. Réponses: 3
    Dernier message: 11/04/2006, 11h41

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