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 :

Algo qui calcule une aire


Sujet :

Algorithmes et structures de données

  1. #21
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    j'aime beaucoup la methode proposee par j.p.mignot, tres propre et efficace. bien joué

    je ne m'attendais pas non plus a voir ressurgir Stokes

  2. #22
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    1- Je tiens à m'excuser de ma réaction un peu vive à l'encontre de 'Le Furet'. Je suis moi-même passionné de math et de physique ( modélisation ) et ai réagit un peu vite.
    Au vu des autres mails de ce correspondant je ne doute pas qu'il ait les bases mathématiques pour maîtriser des outils de base.
    2- "étudié bien des choses qui ont peu d'application" ... oui et non : on utilise bien des outils dont on "oublie" faute de temps les fondements et dont l'exactitude dépend de "vérité" bien + profondes: on les utilises donc sans s'en rendre toujours compte! Je trouve que, malheureusement, on utilise de + en + des "formules" quasi "magiques" sans + prendre vraiment le temps d'en vérifier ni l'origine ni même les domaines d'applications. D'autre part par manque de réflexion sur les bases même de l'édifice des mathématiques, il y a de + en + de problèmes qui sont abordés sur 1 aspect numérique via des computer de + en + puissant sans même se rendre compte qu'une solution analytique est possible ( =>perte de temps, perte des conclusions qu'une équation apporte quant aux comportements, stabilités, ... ) ceci même dans le cadre de programmes réputés "professionnels". - j'ai des exemples frappants dans les équations différentielles -
    Mais je suis, par la force des choses, dans le même dilemme que notre interlocuteur: J'ai aussi appris bien des choses en prépa, grandes écoles, 3eme cycle qui ne sont plus que de la culture que j'essaie de maintenir mais dont je n'ai plus réellement le temps de me préoccuper.
    3- Pour en revenir à Stokes et Ostrogradsky, trouver un champ vectoriel ( resp scalaire) qui ramène de 2D à 1D ( resp. 3D à 2D) représente un gain de temps + que considérable. Cela représente entre autre l'1 des avantages de la modélisation BEM ( Boudry Element Method ) avec la FEM ( Finite Element Method ).
    Calculer une aire revient à calculer le flux de k à travers la surface ( du plan i,j) donc pour appliquer Stokes il faut trouver A tel que rot(A) = k. ceci trouve facilement 1 solution ( voir mail + haut ). On remarquera un intérêt encore + accru d'appliquer stokes pour la calcul du flux à travers des courbes non planaires si div (A)=0 ( flux concervatif) !
    de façon + générale trouver A tel que rot(A) = fi(x,y,z)i + fj(x,y,z)j + fk(x,y,z)k amène à des équations différentielles partielles en général non linéaire... Mais même comme cela une solution numérique à ce système permet utiliser Stokes ( avec moins d'efficacité qu'en présence d'une solution analytique ) mais certainement plus d'efficacité que d'essayer de traiter le problème 2D. Ces remarques se reportent avec Ostrograsky et le passage 3D->2D

  3. #23
    Candidat au Club
    Inscrit en
    Décembre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Bonsoir,

    j'ai pu tester le petit algo pour calculer l'aire avec Stokes et c'est vrai que c'est vraiment pratique et en plus ca marche !!!

    Mais le probleme se complique un peu, en fait ma surface definie par les points est incluse dans un tableau de 2 dimensions
    le but est que tous les points inclus dans la surface doivent etre égal à 1 et ceux en dehors égaux à zero.
    dans la fonction je lui passe un tableau qui va donc se remplir au fur et à mesure suivant que les points appartiennent ou non a la surface

    J'espere que je me suis bien fait comprendre.

    En clair, j'aurai besoin d'une fonction de remplissage de tableau en fonction de la position du point

    merci

  4. #24
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Non vous ne vous êtes pas fait comprendre! soyez plus précis SVP!
    Le problème du calcul d'aire ne se compliquera pas seul l'invoquation de l''algorithme pourra être affectée ( légèrement )
    D'autre part à mon avis tout a été + ou - dit sur ce sujet et je vous suggère de le noter comme [résolu]. Je ne pense pas que vous puissiez raisonnablement en attendre + d'infos.

  5. #25
    Candidat au Club
    Inscrit en
    Décembre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    OK
    je vais essayer de faire le plus clair

    je connais ma liste de points de contour (x,y) inclus dans une image de taille (taille_X, taille_Y)
    je voudrais mettre dans une table de dimension identique (taille_X,taille_Y) des "1" ou des "0" suivant que le points correspond à la surface ou non !

    voila espere que c'est plus simple

  6. #26
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Il ne s'aggit STRICTEMENT PLUS d'un problème de calcul d'aire. Cela pose des problèmes de nature TRES différentes, par ailleurs sensiblement plus difficiles à formuler de façon unnivoque. Pouvez-vous préciser les hypotèses que l'on peut admettre pour considerer un point ( élément de la matrice ) comme etant sur le contour ( continuité, dérivabilité, arrondi, ... )
    Je maintiens
    1- Clore le topic " calul d'aire"
    2- ouvir un nouveau thème de discussion " Comment savoir si un point est situé dans la surface sous-tentue par une courbe fermée"

  7. #27
    Candidat au Club
    Inscrit en
    Décembre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je sais qu'il ne s'agit plus d'un probleme de calcul d'aire mais ca devient un probleme de remplissage
    mes points sont connus par des coordonnées (x,y)
    je connais ma limite en x et y que j'appelle taille_X et taille_Y (par exemple taille_X = 5000, taille_Y=6000)
    mes coordonnees de points sont par exemple (1251,1687) (1252,1687) ...

    Donc pour tous les points de contour et tous les points inclus dans ce contour je voudrais mettre une valeur 1 dans un tableau correspondant aux memes coordonées de ces points et 0 ailleurs

  8. #28
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    le_nardo --> Bah... L'algo que tu décrivais me semblait approprié non ?

    Sinon tu as moults algos de remplissage, tu n'as que l'embarras du choix... Un bien efficace et surtout rapide est la croissance par régions, si tant est que tu puisses connaître au moins un point à l'intérieur de ta région... Sinon il y en a plein d'autres, dont celui que tu citais...

    A+
    "Cultiver les sciences et ne pas aimer les hommes, c'est allumer un flambeau et fermer les yeux." Proverbe chinois

  9. #29
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Je ne pense pas que cela soit aussi simple. Preuve en est le nombre de fois où le remplissage est incomplet ou, au contraire "fuit" dans des soft tout de même robuste comme photoshop.
    Peuvent se poser des problèmes comme
    1- discontinuité de la fronzière du au manque de points
    2- apparente fermeture car la pixelisation a contuit à un étranglement de la forme qui "cache" la suite du dessin.

    Il doit être possible de trouver sans trop de difficulté des solutions à se probléme
    il faut affecter une variable d'état à chaque pixel le notant comme "non traité", "dans la surface"," Hors de la surface" ou "sur la courbe définitiant la frontière"
    je dirais de faire
    a- ajouter une ligne de plus "en haut et en bas de la matrice" ainsi qu'1 colone de plus "à gauche et à droite de la matrice" afin d'assurer que dans ce nouveau cadre la frontière ne touche aucun bord.
    b- clore la courbe par adjonction des pixels manquant.
    c- marquer les pixel de la courbe comme "sur la courbe définitiant la frontière"
    d- Faire diffuser l'info " Hors de la surface" depuis un coin.
    e- recherche des étranglements.
    si aucun alors marquer tous les points non traités comme "dans la surface"
    f- si non
    - tant qu'il y a des points de la courbe hors des positions d'étranglement qui cotoient à la fois des points marqués comme "hors..." et des points marqué come "non traité", aller sur le point " non traité" et faire diffuer l'info "dans la courbe"
    - tant qu'il y a des points de la courbe hors des positions d'étranglement qui cotoient à la fois des points marqués comme "Dans la surface..." et des points marqué come "non traité", aller sur le point " non traité" et faire diffuer l'info "Hors la courbe"

    Ceci n'est qu'une idée et n'est ni testé ni même vérifié quant à l'exactitude de l'approche.

    Je n'ai pas encore réfléchit à une détection automatique des occlusions mais je ne pense pas que cela soit difficile à mettre sur pied. Il faut aussi analyser le cas des courbes qui se croissent comme 8 ou projection des fenêtres de viviani. Ici à l'intersection les pentes diffèrent alors que sur une occlusion, les tangentes sont identiques mais les sens de déplacement sont inverses.

  10. #30
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    Ton idée est certes plus robuste (et donc plus longue), mais apparemment le_nardo dispose de tous les points de frontière, auquel cas il ne peut y avoir de fuites....
    "Cultiver les sciences et ne pas aimer les hommes, c'est allumer un flambeau et fermer les yeux." Proverbe chinois

  11. #31
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Tu peux regarder du côté du remplissage de trous (si ton image est binaire (enfin on peut l'adapter sinon)):
    http://www.developpez.net/forums/vie...419&highlight=

    L'algo remplir toutes les formes fermés d'une image binaire (utile s'il y a des risques de goulot d'étranglement dans ta forme). Puis y'a plus qu'à compter le nombre de pixels de la surface en question (il suffit de connaître un point de la surface).
    S'il n'y a pas de goulot d'étranglement, le simple algo de remplissage d'une surface (du milieu de la page du lien) suffit puis après compter les pixels de ta surface (algo similaire)

  12. #32
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Certaines réponses mixent encore le problème de "remplissage" et de "calcul d'aire"...
    Je réitère ma suggestion auprès de l'auteur de cette rubrique: Ouvrir un deuxième thème de débat. Cela sera bien plus clair pour ceux qui cherchent des réponses. A mon avis le problème du calcul de l'aire est clos tandis que celui du remplissage peu encore suggérer des commentaires éclairés. Et continuer à vouloir calculer l'aire à partir du remplissage des formes ...

  13. #33
    Nouveau Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Aire sous courbe
    Vraiment pratique ta méthode... juste une question: peux-tu stp préciser ce que signifient en code C les "%Npts" dans le calcul des dx et dy ?

    Je te remercie par avance
    AP

  14. #34
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 56
    Points : 41
    Points
    41
    Par défaut
    Merci beaucoup pour cet algo. Je l'ai implémenté en AS3, je donne le code pour ceux que ça intéresse :
    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
    17
    18
    19
    //Pour mon cas, les points et la méthode font parti de mon objet, mais ils peuvent très bien être passés en paramètre.
    public var points:Vector.<Point> = new Vector.<Point>();
    ...
    protected function calcArea():Number{
    	var nbPts:int = points.length;
    	var D:Vector.<Point> = new Vector.<Point>(nbPts);
    	var a:Number = 0;
    	for(var i:int=0;i<nbPts;i++)
    		D[i] = new Point(
    			(points[(i+1)%nbPts].x - points[(i+nbPts-1)%nbPts].x)/2,
    			(points[(i+1)%nbPts].y - points[(i+nbPts-1)%nbPts].y)/2);
    	for(i=0;i<nbPts;i++)
    		a += points[i].x*D[i].y - points[i].y*D[i].x;
    	a = Math.abs(a);
    	//arrondi
    	a = Math.round(a * 100);
    	a/= 100;
    	return a;
    }

  15. #35
    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,

    le volume d'un ouvert D de R^n est par définition l'intégrale sur D de la mesure, disons dx (Lebesgue). L'"équation" de D intervient bien dans cette définition. Si on cherche à calculer exactement le volume, et sauf choix particuliers de D, la seule solution qui me vient à l'esprit est de partitionner D en cellules, disons c1,...,cp, dont les volumes sont facilement calculables, puis d'appliquer la relation de Chasles généralisée :
    int_Ddx=int{c1}dx+...+int_{cp}dx.
    D'un point de vue algorithmique, je ne pense pas qu'on puisse faire mieux. En revanche, on peut gagner en rapidité dès que l'on ne cherche plus la valeur exacte du volume mais seulement une approximation.

  16. #36
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 82
    Points : 132
    Points
    132
    Par défaut Réponse pour le remplissage
    Je pense que le_nardo a des formes géométriques assez simple il n'y a pas d'étranglement
    voire une forme de pomme de terre, jamais un "huit"
    Du coup un simple algo de remplissage avec de la récursivité suffit à remplir son tableau.
    Il faut pour cela que les points que tu connais soient déjà répertoriés dans ton tableau. Et après tu laisses l'algo travailler.


    PS : Ton algo j.p.mignot est assez intéressant.

  17. #37
    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
    Pour un polygone quelconque, la solution eacte est donnée dans la FAQ du Usenet NewsGroup comp.graphics.algorithms (FAQ) sujet 2.01

    "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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/10/2014, 22h09
  2. [Macro Excel] Fonction qui calcule une formule dans une cellule
    Par Enthau dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/07/2008, 16h31
  3. [Erreur] algorithme qui calcul une moyenne
    Par quaresma dans le forum Algorithmes et structures de données
    Réponses: 29
    Dernier message: 24/04/2008, 20h58
  4. algo qui manipule une matrice carré
    Par do_key_120 dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 21/10/2007, 01h42
  5. methode qui calcul une moyenne du traffic
    Par siry dans le forum Développement
    Réponses: 7
    Dernier message: 05/05/2005, 17h16

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