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

2D Java Discussion :

Calcul d'aire de formes


Sujet :

2D Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut Calcul d'aire de formes
    Bonjour,
    j'aimerais savoir s'il existe une méthode simple pour calculer l'aire de différentes formes, par exemple un polygon ?
    je n'ai rien trouver dans la doc, je passe par un Area pour soustraire un polygone à un rectangle et j'aimerais connaitre l'aire qui reste.
    Merci d'avance pour vos pistes eventuelles !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Il n'y a pas de méthode simple.

    La méthode usuelle consiste à décomposer le polygone en triangles et à calculer l'aire de chacun de ces triangles pour au final les additionner. C'est la méthode standard apprise à l'école, et je ne sais pas s'il en existe une plus optimisée

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    oui j'etais tombé sur des informations concernant cette solution.
    Tu n'as pas un algo sous la main permettant de faire ca ?

    sinon il semble y avoir une autre solution mathématique ici :
    http://www.exaflop.org/docs/cgafaq/c...20a%20polygon?

    je cite :

    Subject 2.01: How do I find the area of a polygon?

    The signed area can be computed in linear time by a simple sum.
    The key formula is this:

    If the coordinates of vertex v_i are x_i and y_i, twice the signed area of a polygon is given by

    2 A( P ) = sum_{i=0}^{n-1} (x_i y_{i+1} - y_i x_{i+1}).

    Here n is the number of vertices of the polygon.

    References: [O' Rourke] pp. 18-27; [Gems II] pp. 5-6: "The Area of a Simple Polygon", Jon Rokne.

    To find the area of a planar polygon not in the x-y plane, use:

    2 A(P) = abs(N . (sum_{i=0}^{n-1} (v_i x v_{i+1})))

    where N is a unit vector normal to the plane. The `.' represents the dot product operator, the `x' represents the cross product operator, and abs() is the absolute value function.

    [Gems II] pp. 170-171:

    "Area of Planar Polygons and Volume of Polyhedra", Ronald N. Goldman.

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    Librairie Java Topology Suite.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    public class RenduTools {
     
    	public static String makeRendu(Bloc blocATraiter){
     
    		int nbLignes = getNombreLignes(blocATraiter.getTexte().getText());
     
    		Area aireTotale = new Area(blocATraiter.getPolygone().getBounds());
     
    		// Test formule d'aire
    		System.out.println("Rectangle lxL : "+blocATraiter.getPolygone().getBounds().height *	blocATraiter.getPolygone().getBounds().width);
    		System.out.println("Rectangle getAire : "+getAire(aireTotale.getPathIterator(null)));
    		return null;
    	}
     
    	/**
             * Prends un PathIterator en argument et retourne un double
             * contenant l'aire du polygone
             * @param forme
             * @return double : aire
             */
    	public static double getAire(PathIterator forme){
    		double aire = 0;
    		double coordsA[] = new double[6];
    		double coordsB[] = new double[6];
    		forme.currentSegment(coordsA);
                    // 2 A( P ) = sum_{i=0}^{n-1} (x_i y_{i+1} - y_i x_{i+1}).
    		while(!forme.isDone()){
    			forme.next();
    			if(!forme.isDone()){
    				forme.currentSegment(coordsB);
    				aire = aire + ((coordsA[0]*coordsB[1]) - (coordsA[1]*coordsB[0]));
    				forme.currentSegment(coordsA);				
    			}
    		}
     
    		return aire;
    	}
    }
    2 A( P ) = sum_{i=0}^{n-1} (x_i y_{i+1} - y_i x_{i+1}).
    J'ai essayé de reproduire la formulaire de math mais ca ne semble pas fonctionner sur un rectangle, j'ai une aire négative ^_^

    Est ce que je fais une bonne utilisation du pathiterator ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    Ca marche si je fais le pathiterator sur un Objet Shape, je colle donc le code au cas ou ca interesse certains d'entre vous :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    public class RenduTools {
     
    	public static String makeRendu(Bloc blocATraiter){		
    		Area aireTotale = new Area(blocATraiter.getPolygone().getBounds());
    		Area aireForme = new Area(blocATraiter.getPolygone());
     
    		// Test formule d'aire
    		System.out.println("Rectangle lxL : "+blocATraiter.getPolygone().getBounds().height *	blocATraiter.getPolygone().getBounds().width);
    		System.out.println("Rectangle getAire : "+(getAire(blocATraiter.getPolygone().getBounds())));
    		aireTotale.subtract(aireForme);
    		//double aire = getAire(aireTotale.getPathIterator(null));
    		return null;
    	}
     
    	public static double getAire(Shape born){
    		return getAire(born.getPathIterator(null));
    	}
     
    	/**
             * Prends un PathIterator en argument et retourne un double
             * contenant l'aire du polygone
             * @param forme
             * @return double : aire
             */
    	public static double getAire(PathIterator forme){
    		double aire = 0;
    		double coordsA[] = new double[6];
    		double coordsB[] = new double[6];
    		forme.currentSegment(coordsA);
    		while(!forme.isDone()){
    			forme.next();
    			if(!forme.isDone()){
    				forme.currentSegment(coordsB);
    				aire = aire + ((coordsA[0]*coordsB[1]) - (coordsA[1]*coordsB[0]));
    				forme.currentSegment(coordsA);				
    			}
    		}
     
    		return aire/2;
    	}
    }
    du coup se pose la question de la gestion des coordonnées dans un Area ? Elle est différente ?

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

Discussions similaires

  1. Algo qui calcule une aire
    Par le_nardo dans le forum Algorithmes et structures de données
    Réponses: 36
    Dernier message: 25/08/2012, 14h57
  2. [Débutant] Traitement image, calcul d'aire
    Par seerauber dans le forum Images
    Réponses: 3
    Dernier message: 16/08/2007, 18h56
  3. Apres l'ajustement gaussien, le calcul d'aire
    Par johnkhm dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 18/04/2007, 11h37
  4. calcul d'aire d'une courbe
    Par rabiahb dans le forum Delphi
    Réponses: 45
    Dernier message: 11/04/2007, 15h13
  5. calcul d' aire
    Par lokida dans le forum OpenGL
    Réponses: 5
    Dernier message: 17/11/2005, 17h22

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