ENVELOPPE CONVEXE D'UN NUAGE DE POINTS

Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 - 19 mars 2006 à 13:00
Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 - 29 mars 2010 à 16:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36614-enveloppe-convexe-d-un-nuage-de-points

Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 1
29 mars 2010 à 16:21
Demande à Renfield, qui est l'auteur du projet Rey_XpBasics dont je me suis servi ici.
De mon côté je je ne suis plus en mesure d'apporter de l'aide au sujet de VB.
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017
29 mars 2010 à 16:18
enfait, je viens de trouver un projet vb Rey_XpBasics, mais je ne sais pas comment proceder pour le faire marcher, il contient un fichier ReyXp.ocx, est ce qu'il faut le copier qqpart ?

PLZ help
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017
29 mars 2010 à 15:26
bjr, j'utilise Microsoft Visual Basic 2008, j'ai essayé d'ouvrir votre projet ( ou de le convertir )mais il nécessite l'OCX (ReyXp.ocx), comme vous l'avez mentionnez dans la description.

J'ai fait des recherches, mais je n'ai pas trouvé ce composant pour le télécharger afin de l'intégrer pour que le programme marche enfin.

Any help is welcome thank you.
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017
28 mars 2010 à 20:10
ok, merci
Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 1
28 mars 2010 à 19:46
Les exécutables ne sont pas inclus dans les sources. Il faut *compiler* le projet. Par ailleurs, je ne pratique plus VB. Je ne peux plus fournir d'aide sur ce point.
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017
28 mars 2010 à 19:43
EnveloppeConvexe.exe

prjEnveloppeConvexe.exe

ce sont deux fichiers manquant, et j'en ai besoin !!

SOS help plz.
Zakata Messages postés 59 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 17 juillet 2009
28 mai 2007 à 21:58
Petite rectification, la boucle trouve le point le plus a gauche su ce dernier n'a pas une asisse comune avec un autre. Dans le cas contraire, il trouvera le point le plus à gauche et le plus en bas des points.

Voila a plus
Damien
Zakata Messages postés 59 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 17 juillet 2009
28 mai 2007 à 21:48
Salut

Je suis en train de regardre ta source car c'est exactement ce qu'il me faut.

J'ai cependant noter une différence entre ce que fesait ton algo et ce que dit ton commentaire et je voulais savoir si ca avait une grande importande:

Tu as écrit :
'1. Recherche du point situé le plus en bas à gauche
For i = 0 To UBound(iAbscisses)
If i = 0 Then
'Pour faire des comparaisons, il faut bien assigner des valeurs au départ !
xMin = iAbscisses(0)
yMin = iOrdonnées(0)
Else
'L'abscisse est inférieure : le point est plus à gauche !
If iAbscisses(i) < xMin Then
xMin = iAbscisses(i)
yMin = iOrdonnées(i)
'L'abscisse est identique mais l'ordonnée est inférieure :
'le point est plus bas !
ElseIf iAbscisses(i) = xMin And iOrdonnées(i) < yMin Then
xMin = iAbscisses(i)
yMin = iOrdonnées(i)
End If
End If
Next

Or ce bout de code trouve en fait le point le plus a gauche mais pas le plus en bas. Pour le voir j'ai essayer cette suite de points : 3,2,4,4,4,1,1,4,2,1 et il me donne xMin=1 et yMin=4.
Puisque ton code marche, j'imagine que ce ne doit pas être important mais ca veut dire aussi qu'il est possible d'optimiser le programme en suprimant quelques lignes de la boucle cidessus :

'1. Recherche du point situé le plus à gauche
'Pour faire des comparaisons, il faut bien assigner des valeurs au départ !
xMin = iAbscisses(0)
yMin = iOrdonnées(0)

For i = 0 To UBound(iAbscisses)
'L'abscisse est inférieure : le point est plus à gauche !
If iAbscisses(i) < xMin Then
xMin = iAbscisses(i)
yMin = iOrdonnées(i)
End If
Next


Voila en gros ma question : l'algo marchera t'il toujours si je le modifi ainsi ?

Merci a plus
Damien
Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 1
24 mars 2006 à 19:47
Salut !

us_30 et les autres, merci pour vos commentaires et les suggestions qu'ils comportent (et, ne soyons pas ingrat,merci aussi pour les notes !). Le lien que propose Baka02 nous propose l'algorithme issu de la stratégie "diviser pour régner" (oui, on peut traduire divide and conquer en français !). De même que la marche de Graham, il est en O(nlog(n)) ce qui est meilleur que O(nh), je vous l'accorde. Alors maintenant il ne reste plus qu'à programmer l'un de ces algos en complexité logarithmique et non linéaire ! Avis aux amateurs, je doute d'avoir le temps de le faire, ou bien plus tard !

Cordialement,
Cacophrène
baka02 Messages postés 4 Date d'inscription vendredi 17 mars 2006 Statut Membre Dernière intervention 28 mars 2006
21 mars 2006 à 11:19
Bonjour,
Je ne connais pas votre intérêt pour les algorithmes de calcul d'enveloppes convexes, mais si vous êtes intéressés, vous pouvez chercher (sur Google ou yahoo) des algorithmes de type "divide and conquer" qui ont donné naissance à des algo comme "quick hull". Bon maintenant de là à le coder en VB ...
C'est pas aussi simple que Jarvis mais très intéressant à comprendre et ça introduit des notions de compléxité des algorithmes.
J'ai trouvé ça qui est pas mal :
http://www-timc.imag.fr/Antoine.Leroy/tutoriaux/convexHull/CH.html

Bonne lecture.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
19 mars 2006 à 20:30
Bonsoir à tous,

En effet, le code est bien construit, très compréhensible et bien commenté; c'est un petit 10/10...

Maintenant la question que je me pose, c'est comment trouver l'algorithme le plus rapide, bien que l'utilisation du calcul du déterminant semble très correcte... Ces petits problèmes qui semblent simple en apparence, sont souvent de vrai casse-tête dès qu'on cherche à les optimiser...

Amicalement,
Us.
jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009
19 mars 2006 à 19:56
Hello, très sympa, le code est nicekl et bien commenté. Le tout fonctionne parfaitement et l'exemple d'utilisation est très sympa, avec un joli rendu.
Je mets un 10/10, bien mérité.
Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 1
19 mars 2006 à 14:51
En effet.
boulacmoi Messages postés 10 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 4 juin 2009
19 mars 2006 à 14:41
Merci,
Personnellement je suis arrivé a appliqué la méthode dont j'avais parlé sur le forum, a ce que j'ai vu c'est la méthode Jarvis, mais légerement modifié
Je prend le point le plus en bas et je tourne dans le sens trigo en prenant comme point suivant, celui qui m'offre le plus petit angle par rapport a un repère arbitraire
Cacophrene Messages postés 251 Date d'inscription lundi 29 mars 2004 Statut Membre Dernière intervention 4 mars 2008 1
19 mars 2006 à 13:00
Juste une précision : L'algorithme que je vous présente s'apparente à la "marche de Jarvis". Il existe une autre méthode, le "parcours de Graham". On peut trouver quelques infos sur le sujet sur Wikipédia (tapez http://fr.wikipedia.org/wiki/Enveloppe_convexe).

De façon imagée, la marche de Jarvis s'apparente à un emballage dans du papier cadeau : une fois le premier point trouvé, on tourne autour du nuage de sorte à l'emballer. Le déterminant vient à notre secours pour faire "comprendre" à l'ordinateur ce qu'il faut faire. Bien entendu, face à une telle situation, un être humain a une vue d'ensemble, et son raisonnement est très différent.

A noter, enfin, que l'on peut aussi envisager le cas des polyèdres convexes, mais inutile de dire que la programmation n'est plus aussi simple qu'ici.

Cordialement,
Cacophrène