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

Mathématiques Discussion :

Bouding box & formes convexe


Sujet :

Mathématiques

  1. #21
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 455
    Points
    1 455
    Par défaut
    Autant pour moi, j'ai oublié le cas où un coin de bbox pénétrait légèrement un triangle.
    Il faudra tester que les sommets de bbox sont ou non à l'intérieur de la forme.

  2. #22
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    La question exacte est: la plus petite dimension de la bbox est-elle plus grande que le plus grand côté de triangle de la forme ? (on peut affiner ).
    Parfois oui, parfois non: tout est possible.

    Donc si j'ai bien compris, l'algo est le suivant:
    1. On test si un point de la forme convexe se trouve dans une des bbox. Si c'est le cas: return INSIDE.
    2. Je découpe ma bbox en plusieurs bbox de taille inférieur au plus petit triangle de la forme convexe. On test si un point d'une bbox se trouve dans la forme convexe. Si c'est le cas: return INSIDE.
    3. return OUTSIDE.

    Pas très performant comme test (surtout si mon plus petit triangle est très petit). N'y a t-il pas moyen de faire mieux ?
    Si à la place d'une bbox, j'ai une sphere qui englobe cette bbox: est-ce qu'il y a moyen de faire beaucoup mieux ?

    Merci d'avance.

  3. #23
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 455
    Points
    1 455
    Par défaut
    En maths, il faut être précis si on veut arriver à un résultat. Ta phrase "On test si un point de la forme convexe (fc) se trouve dans une des bbox." ne veut rien dire mathématiquement , on ne peut tester que les sommets des triangles.
    IL y a deux autres possibilités (sauf si je me trompe):
    1)Un coin de bbox peut être dans fc. C'est le + difficile à tester. J'espérais pouvoir l'éviter mais je me trompais.
    2) les solides s'intersectent sans qu'aucun des sommets de l'un ne soit dans l'autre. C'est dans ce cas que la division des triangles est utile.

    Avec une sphère, le calcul devient analytique et trivial.

  4. #24
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    Ok, merci, j'ai bien compris l'algo et je pense qu'il fonctionne dans toutes les situations

    Mais je ne suis vraiment pas satisfait de cet algo niveau performance. En effet, la division des triangles risque de faire chuter les performances énormément !
    Si quelqu'un à une meilleure idée, je suis preneur.

  5. #25
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 455
    Points
    1 455
    Par défaut
    Je viens de trouver un contre-exemple !
    à suivre

  6. #26
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonsoir,

    Citation Envoyé par zenux Voir le message
    Ma question: comment savoir si mon parallélépipède rectangle se trouvent soit:
    - en partie ou totalement dans ma forme géométrique convexe (pas de distinction necessaire entre les deux).
    - ou se trouve en dehors dans ma forme géométrique convexe.
    C'est un problème standard de géométrie algorithmique.
    Tu peux regarder dans cet excellent livre d'introduction (chapitre sur les intersections)

    Tu peux aussi regarder cet autre livre (p 275 etc).

    Mais si tu débutes en géométrie algorithmique, je te conseille vivement la lecture du premier (bien qu'il ne soit plus trop récent).

  7. #27
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    - J'ai regardé le premier livre et le chapitre sur l'intersection de convex polygon n'est pas visible
    - Le second livre m'a l'air mieux mais pas facile à comprendre (il me semble que les schémas ne sont pas affichés correctements).

    Si j'ai bien compris, l'algo en 2D est le suivant:
    1. Si une arête de la forme convexe inersect une arête de la bbox: return INTERSECT.
    2. Si aucune intersection n'est détecté alors on vérifie si la forme convex est entièrement contenu dans la bbox et inversément.

    Pour l'algo en 3D:
    1. Il faut faire la projection de mes deux formes sur le plan XY et appliquer l'algo 2D
    2. Ensuite, faire la même chose sur le plan YZ.
    3. Si il y a intersection sur le plan XY ET YZ: alors il y a intersection entre la forme convexe et la bbox.

    Est-ce que cela vous semble correcte ? Est-ce la manière la plus performance ?

  8. #28
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 455
    Points
    1 455
    Par défaut
    Citation Envoyé par zenux Voir le message
    -
    Pour l'algo en 3D:
    1. Il faut faire la projection de mes deux formes sur le plan XY et appliquer l'algo 2D
    2. Ensuite, faire la même chose sur le plan YZ.
    3. Si il y a intersection sur le plan XY ET YZ: alors il y a intersection entre la forme convexe et la bbox.

    Est-ce que cela vous semble correcte ? Est-ce la manière la plus performance ?
    Cà c'est faux : Si tu approches le coin d'une boîte d'allumettes (coin de bbox) d'un ballon(fc) toutes les projections s'intersecteront sauf celles dans les directions tangentes au ballon .
    Du point de vue mathématique, il est redoutablement difficile de considérer tous les cas possibles. Es tu bien sûr de devoir le résoudre en toute généralité ?

  9. #29
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je viens de relire l'énoncé. On cherche à savoir si la boite est extérieure à la forme convexe. C'est à dire si elle est partiellement, intérieure, entièrement intérieure, elle ne sera pas extérieure. Si la boite "contient la forme" elle ne sera pas non plus extérieure.

    Ce qui me parait important est que la forme est convexe. Ceci entraine que chaque triangle détermine une partition de l'espace, limitée par le plan défini par les sommets du triangle, et que l'ensemble des triangles sont d'un même côté du plan.
    Il en résulte que si les 8 coins de la boite sont d'un même côté du plan (dans le bon sens) passant par chacun des triangles, la boite est extérieure.
    Mais naturellement, on pourra trouver aussi un triangle dont le plan coupe la boite. Donc, il faut trouver le ou les triangles qu'il convient d'étudier.
    Une première élimination (pour raison de performances) est préférable, puis il faudra déterminer le test qui servira à calculer le plan à étudier.

  10. #30
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonjour,

    comme je l'ai déjà mentionné, il s'agit d'un problème classique.
    Il n'est pas nécessaire d'essayer de réinventer la roue.

    Concernant les performances, les algorithmes standards sont de complexité linéaire, donc très rapides.

    Normalement, en faisant une recherche sur les problèmes d'intersection de polygones/polyèdres convexes, tu devrais rapidement trouver ton bonheur.

    Pour démarrer :
    http://citeseerx.ist.psu.edu/viewdoc...10.1.1.63.2041,
    et les références associées.

    Egalement :
    http://citeseerx.ist.psu.edu/viewdoc...10.1.1.50.7083

    Evidemment, en utilisant une bibliothèque de géométrie algorithmique (computational geometry), tu pourras le faire sans rien y comprendre.

  11. #31
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    Bonjour,

    Pour info, j'ai trouvé la solution: c'est algorithme GJK. Il permet de tester si deux formes convexes sont en collision et si on le souhaite on peux déterminer la distance entre les deux convexes. Ce n'est surement pas le plus simple algortihme à comprendre mais il me semble très performant.

    Vidéo (en anglais): http://mollyrocket.com/849
    Code source: https://mollyrocket.com/forums/viewtopic.php?t=797

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Check Box USER FORM
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/04/2008, 14h57
  2. Bloquer une picture box aux limites de mon form
    Par obito dans le forum Windows Forms
    Réponses: 7
    Dernier message: 15/01/2008, 22h18
  3. Geler des txt box dans un forms
    Par Peter2 dans le forum IHM
    Réponses: 8
    Dernier message: 12/06/2007, 22h46
  4. [Forms V6] Alert Box
    Par plv69 dans le forum Oracle
    Réponses: 4
    Dernier message: 25/01/2006, 12h16
  5. [FORMS] alerte box
    Par chand_bing dans le forum Forms
    Réponses: 3
    Dernier message: 29/07/2004, 15h57

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