Précédent   Forum des professionnels en informatique > Autres langages > Algorithmes > Mathématiques
Mathématiques Forum d'entraide sur les mathématiques et l'algorithmique numérique. Avant de poster : Cours d'algorithmique numérique
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/01/2012, 15h58   #1
Invité de passage
 
Inscription : février 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 4
Points : 1
Points : 1
Par défaut Forme qui englobe nuages de points 2D

bonjour à tous,

je viens vers vous car je sèche complet sur le problème suivant :


j'ai 4 nuages de points 2D dont le nombre de points est propre à chaque nuage. chaque nuage est localisé aléatoirement :



ce que je cherche à faire, c'est tracer la figure à quatre côtés qui englobe parfaitement tous les nuages de points (forme blanche sur l'image). les segments doivent être sur des points ! donc pas d'approximation possible.

pour chaque point, je dispose de ses coordonnées x et y, ainsi que l'index de son nuage de point.


si vous avez une idée... ?

merci
Geadupr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 18h56   #2
Rédacteur/Modérateur
 
Jean-Marc Blanc
Inscription : avril 2007
Messages : 2 658
Détails du profil
Informations personnelles :
Nom : Jean-Marc Blanc
Âge : 71

Informations forums :
Inscription : avril 2007
Messages : 2 658
Points : 3 498
Points : 3 498
Salut!
Voici une méthode simple, mais je ne sais pas ci c'est la plus efficace:

Tu commences par définir un quadrilatère dont les sommets sont les "premiers" points de chaque couleur.

Ensuite, tu parcours la liste des points rouges du deuxième au dernier. Si un point est à l'intérieur du quadrilatère, tu l'ignores. S'il est à l'extérieur, tu agrandis le quadrilatère en conséquence.

Pour finir, tu recommences avec les 3 autres couleurs.

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)
FR119492 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 19h20   #3
Expert Confirmé Sénior
 
Jean-Michel BORLOT
Fabricant et casseur d'avions
Inscription : avril 2004
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Jean-Michel BORLOT
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Fabricant et casseur d'avions
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2004
Messages : 2 984
Points : 4 691
Points : 4 691
Citation:
Envoyé par FR119492 Voir le message
Salut!
Ensuite, tu parcours la liste des points rouges du deuxième au dernier. Si un point est à l'intérieur du quadrilatère, tu l'ignores. S'il est à l'extérieur, tu agrandis le quadrilatère en conséquence.
+1

En rajoutant que tu reparcours ta liste de points depuis le début si tu agrandis le quadrilatère, car rien ne dis que tu ne sortes pas un point précédent interne en bougeant un côté... et en faisant attention de ne pas bloquer sur une boucle infinie.
__________________
"Errare humanum est, sed perseverare diabolicum"

Si vous avez un terrain constructible dans l'est du Gers à vendre pas trop cher, contactez-moi par MP.

Ma page sur DVP.com : articles Java/Jogl
Mon site www.plegat.org
plegat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 19h54   #4
Invité de passage
 
Inscription : février 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 4
Points : 1
Points : 1
effectivement avec une boucle répétable ça devrait le faire, au bout d'un moment l'unique solution devrait être trouvée.

j'avais oublié de préciser que le sens des nuages (ou couleurs) est toujours le même, toujours rouge-jaune-vert-bleu dans le sens des aiguilles d'une montre.

je peux donc le séparer en deux triangles pour effectuer les calculs sans risquer de croisements.

merci pour vos réponses, je vais essayer et je vous tiens au courant
Geadupr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 14h26   #5
Membre éprouvé
 
Homme
Chercheur en informatique
Inscription : avril 2008
Messages : 272
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Chercheur en informatique

Informations forums :
Inscription : avril 2008
Messages : 272
Points : 451
Points : 451
Je pense que tu peux ignorer le fait que c'est un quadrilatère et simplement trouver des droites pour chaque couple de couleurs (et passant par un de leurs points) qui ont tous les points du même coté. Après, tu as juste a trouver les intersections de tes droites pour faire ton quad.
math_lab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 16h54   #6
Expert Confirmé Sénior
 
Avatar de Graffito
 
Inscription : janvier 2006
Messages : 4 717
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 4 717
Points : 5 029
Points : 5 029
Pour moi, le problème se décompose en 2 parties :
  • trouver le polygone convexe qui englobe tous les points. C'est un sujet maintes fois abordé sur le forum et il existe une importante litterature à ce sujet sur le web (exemple : http://www-sop.inria.fr/geometrica/c...convexe-od.pdf)
  • trouver le plus petit quadralitère englobant l'envellope, c'est-à-dire réduire le nombre de points de l'envellope.
Pour le deuxième algorithme, je ne connais pas de méthodologie particulière. Mais, il me semble qu'on peut pratiquer ainsi:
  1. pour chaque coté Pn::n+1 du polygone, on peut calculer l'aire du petit triangle compris entre le coté et l'intersection In des droites passant par Pn-1::n+1 et Pn+1::n+2. Si le triangle est "du mauvais coté", l'aire est "infinie".
  2. on supprime le coté générant la plus petite surface en remplaçant Pn et Pn+1 par In.
  3. on itère 1) et 2) jusqu'à ce qu'il n'y ait plus que 4 points.
__________________
" Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson
Graffito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 21h08   #7
Invité de passage
 
Inscription : février 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 4
Points : 1
Points : 1
hé bien voila ça marche

la première méthode avec le quadrilatère qui s’agrandit au fur et à mesure fonctionne mais peut être lourde selon les cas car on peut réitérer plusieurs fois.

finalement c'est la méthode proposée par math_lab qui fonctionne très bien.

en fait les calculs sont les mêmes que la première méthode, sauf que l'approche est plus directe c'est une simplification de la première méthode en somme.

merci à tous pour votre aide
Geadupr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 21h53   #8
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 919
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 919
Points : 15 908
Points : 15 908
Pourquoi ne pas déterminer les équations des 4 droites qui forment le polygone ?

En prenant :
  1. le point rouge qui a la plus petite abscisse et le point bleu qui a la plus petite abscisse
  2. le point bleu qui a la plus petite ordonnée et le point vert qui a la plus petite ordonnée
  3. le point vert qui a la plus grande abscisse et le point jaune qui a la plus grande abscisse
  4. le point jaune qui a la plus grande ordonnée et le point rouge qui a la plus grande ordonnée

Les 4 sommets sont calculés par l'intersection des droites.

Ou alors j'ai raté quelque chose ?
__________________
Mes contributions MATLAB (R2009a - Windows & Linux)

• J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck)
• Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel)

• Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 11h16   #9
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 8 740
Détails du profil
Informations personnelles :
Âge : 54

Informations forums :
Inscription : janvier 2007
Messages : 8 740
Points : 9 974
Points : 9 974


Il y a encore plus simple :

il n'y a pas besoin des équations des droites. Les 4 points suffisent...
__________________
"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
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 12h24   #10
Modérateur
 
Inscription : août 2007
Messages : 3 585
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 3 585
Points : 4 420
Points : 4 420
Bonjour,
Citation:
Envoyé par Dut Voir le message
Pourquoi ne pas déterminer les équations des 4 droites qui forment le polygone ?

En prenant :
  1. le point rouge qui a la plus petite abscisse et le point bleu qui a la plus petite abscisse
  2. le point bleu qui a la plus petite ordonnée et le point vert qui a la plus petite ordonnée
  3. le point vert qui a la plus grande abscisse et le point jaune qui a la plus grande abscisse
  4. le point jaune qui a la plus grande ordonnée et le point rouge qui a la plus grande ordonnée

Les 4 sommets sont calculés par l'intersection des droites.

Ou alors j'ai raté quelque chose ?
Cette méthode en garantit pas que les points se trouvent tous à l'intérieur du quadrilatère. Un exemple pour la droite rouge/jaune (plus grande ordonnée):

Ici l'un des point sort du quadrilatère.
Images attachées
Type de fichier : png ex.png (15,1 Ko, 29 affichages)
__________________
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.
magelan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 12h39   #11
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 919
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 919
Points : 15 908
Points : 15 908
Citation:
Envoyé par magelan Voir le message
Cette méthode en garantit pas que les points se trouvent tous à l'intérieur du quadrilatère.
J'avais donc bien raté quelque chose


Sinon une autre idée (vu la configuration proposée dans le premier message) :
  1. générer l'enveloppe convexe du domaine
  2. ne conserver de cette enveloppe que les 4 segments de plus grande longueur
  3. calculer les intersections
__________________
Mes contributions MATLAB (R2009a - Windows & Linux)

• J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck)
• Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel)

• Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille
Dut est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/01/2012, 16h59   #12
Expert Confirmé Sénior
 
Avatar de Graffito
 
Inscription : janvier 2006
Messages : 4 717
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 4 717
Points : 5 029
Points : 5 029
Citation:
ne conserver de cette enveloppe que les 4 segments de plus grande longueur
Excellente astuce dans le cas présent pour réduire le nombre de points de l'envellope convexe.
__________________
" Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson
Graffito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 23h02   #13
Invité de passage
 
Inscription : février 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 4
Points : 1
Points : 1
en effet c'est plus compliqué qu'il n'y parait, les deux premières méthodes ont l'avantage d'être sans surprises.

Graffito et Dut : l'enveloppe convexe pourrait peut-être fonctionner, à voir avec la suite du programme, car pour l'instant j'ai vraiment besoin que chaque segment soit sur deux couleurs, et comme un point jaune peut être plus près d'un point rouge que des autres points jaunes, le résultat pourrait ne pas convenir.

la méthode de math_lab reste rapide en calcul et convient à mon utilisation.
Geadupr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h36.


 
 
 
 
Partenaires

Hébergement Web