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

avec Java Discussion :

polygone et calcul d'aire


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut polygone et calcul d'aire
    bonjour,

    Je débute en java, je suis en train de faire un exercice pour apprendre un peu la notion d'héritage mais je bloque.

    Je possède une classe Point, une classe Polygone, une classe Triangle, une classe Rectangle, une classe PolygoneRegulier, et une classe TestPolygone avec une méthode main pour tester tout ça.

    Voici les classes et les constructeurs (j'ai réussi à faire la classe Point et un peu celle de Polygone), le reste je bloque:

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    public class Point {
    	private double x,y;
     
    	public Point(double x, double y){
    		this.x=x;
    		this.y=y;
    	}
     
    	public double getX(){
    		return x;
    	}
     
    	public double getY(){
    		return y;
    	}
     
    	public String toString(){
    		return "("+x+","+y+")";
    	}
     
    public class Polygone {
    	protected Point[] sommets;
     
    		public Polygone(double[] x, double[] y){
    			this.x=x;
    			this.y=y;
    		}
     
    		protected Polygone(int nbrSommets){
    			this.sommets = new Point[nbrSommets];
    			this.nbrSommets = nbrSommets;
    		}
     
    		public Point getSommet(int i){
    			for (int i = 0; i < nbrSommets; i++) {
    				this.sommets[i] = new Point();
    			}
    		}
     
    		public double aire(){
     
    		}
     
    		public String toString(){
     
    		}
     
    public class Rectangle extends Polygone {
     
    	public Rectangle(double xMin, double xMax, double yMin, double yMax) {
    		super(new Point...
    	}
     
    public class Triangle extends Polygone {
            public Triangle (Point a, Point b, Point c){
    }
    }
     
    public class PolygoneRegulier extends Polygone {
            public PolygoneRegulier (Point c, Point P, int nombreSommets){
     
    }
    }
     
    class TestPolygone
    {
        public static void main(String[] args)
        {
    }
    }
    Une indication pour le calcul de l'aire est:
    S=1/2*|(x0-x1)*(y0+y1)+(x1-x2)*(y1+y2)+...(xn-2-xn-1)*(yn-2+yn-1)+(xn-1-x0)*(yn-1+y0)|

    Merci pour vos indications.

  2. #2
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut Les maths sont tes amies
    Bonjour,

    en fait, il faut définir les liens entre tes classes.

    un polygone "est un" ensemble de points,
    un polygone régulier, un triangle "est un" polygone,
    un rectangle, un triangle équilatéral "est un" polygone régulier,

    Avec la relation "est un", tu peut utiliser l'héritage.
    La classe rectangle hérite de la classe polygone régulier, qui hérite elle-même de la classe polygone.
    La classe triangle équilatérale hérite de la classe triangle, qui hérite de la classe polygone.

    Autrement, un triangle est équilatéral ou quelconque, donc c'est un polygone régulier ou un polygone quelconque. On peut donc utiliser le polymorphisme.

    Bon après, il y a le code :
    dans la classe Point, tu peut :
    protected double x = 0;
    protected double y = 0;
    définir un constructeur par défaut :
    public Point() { Point(x,y); }
    puis des accesseurs pour x et y :
    public void setX(double x){this.x=x;}
    redéfinir ton constructeur par initialisation à l'aide des tes accesseurs :
    public Point(double x, double y) { this.setX(x); this.setY(y); }
    voir la classe Point définie dans http://java.sun.com/j2se/1.4.2/docs/...awt/Point.html
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Quand tu dis "est un", c'est ce que j'ai mis dans la création de mes classes par le mot "extends" non ? Ou c'est par le mot "super" ?

    Sinon je n'ai pas de triangle équilatéral, juste un triangle quelconque.

    Je n'ai pas besoin de la classe Point fournie par java sun merci je l'avais vu aussi mais je dois la définir comme je l'ai faits ici, je pense qu'elle se suffit comme ça pour l'exercice.

    Le plus dur est bien sur (comme d'habitude) d'écrire le code pour le reste.

  4. #4
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par polymorphisme Voir le message
    Bonjour,
    Avec la relation "est un", tu peut utiliser l'héritage.
    La classe rectangle hérite de la classe polygone régulier, qui hérite elle-même de la classe polygone.
    La classe triangle équilatérale hérite de la classe triangle, qui hérite de la classe polygone.

    Autrement, un triangle est équilatéral ou quelconque, donc c'est un polygone régulier ou un polygone quelconque. On peut donc utiliser le polymorphisme.
    Mais là on arrive à la limite de l'héritage java, si tu as l'héritage :
    Polygone régulier est un Polygone
    Triangle est un Polygone
    Il devient difficile de caser Triange équilatéral : Polygone régulier, ou Triangle ?

    On peut souvent s'en sortir avec des interfaces, mais ce n'est pas toujours élégant ou satisfaisant.

    Sinon, la formule citée est manifestement fausse, il faut mettre des différences sur les ordonnées aussi, sinon la surface du polygone change par translation.

  5. #5
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    mon but n'est pas de donné la réponse toute faite, mais de donner des indications.

    Quand tu dis "est un", c'est ce que j'ai mis dans la création de mes classes par le mot "extends"
    C'est tout à fait cela.

    Ou c'est par le mot "super" ?
    La méthode super permet d'appeler un constructeur de la classe mère.

    Il devient difficile de caser Triange équilatéral : Polygone régulier, ou Triangle ?
    On peut s'en sortir avec les interfaces. Un triangle équilatéral est à la fois un polygone régulier ET un triangle. L'héritage multiple n'existant pas en Java, on a recours aux interfaces.

    L'aire d'un polygone :
    Les sommets du polygone sont notés A0,A1,...An = A0, avec Ai ayant pour coordonnées (xi,yi).

    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    J'ai corrigé un truc dans ma classe Polygone:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Point getSommet(int i){
    			return this.sommets[i]; // Avec points l'attribut de type Point[]
    			}
    Je ne sais pas par contre comment faire pour construire les classes triangle et rectangle...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    Puis mon constructeur de Polygone:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public Polygone(double[] x, double[] y){
        // Remplissage de la liste de sommets
        for (int i = 0; i < x.length; i++){
            this.points[i] = new Point(x[i], y[i]);
        }
    }

  8. #8
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par fredericbdr Voir le message
    Je ne sais pas par contre comment faire pour construire les classes triangle et rectangle...
    Tu définis une classe Point mais tu ne t'en sers pas dans le constructeur d'un Polygone
    Pourquoi ne pas définir un tel constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Polygone(Point... points) {
       this.points = (Point[]) points.clone();
    }
    La construction d'un triangle devient alors évidente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Triangle extends Polygone {
            public Triangle (Point a, Point b, Point c){
               super(a, b, c);
            }
    }
    Sinon, c'est quoi un PolygoneRegulier par rapport à un Polygone ? est-il besoin de faire une classe ? n'est-ce pas plutôt une caractéristique propre à un(e) (instance de) polygone donné ? dans ce cas une méthode comme celle-ci suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public boolean isRegulier() {
       // critère de régularité à coder ...
    }

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    non le constructeur de Polygone m'est donné et je dois l'utiliser ainsi (c'est à dire à partir de 2 tableaux).

    Un polygone regulier c'est une sous classe de polygone, dont le constructeur est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class PolygoneRegulier extends Polygone {
            public PolygoneRegulier (Point c, Point P, int nombreSommets){
     
    }
    Je dois aussi l'utiliser ainsi.
    Je rappelle que c'est construit avec un polygone régulier de centre c.

  10. #10
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Tu nous ferais passer les données de ton sujet, ca rendrais les choses plus pratiques.
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    oui désolé justement, j'ai tout dit, je dois utiliser mes classes telles qu'elles sont marquées dans mon premier message.
    Ce que je peux rajouter c'est que la classe String toString doit renvoyer les coordonnées des points par exemple "[(1.0,2.0),(5.0,3.0),(4.0,8.0)]".

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    Qui peut m'aider pour faire mes classes, je n'y arrive vraiment pas...
    Merci

  13. #13
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Re-donne-nous tes classes modifiees.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    Ok merci. Voici mes classes :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    public class Point {
    	private double x,y;
     
    	public Point(double x, double y){
    		this.x=x;
    		this.y=y;
    	}
     
    	public double getX(){
    		return x;
    	}
     
    	public double getY(){
    		return y;
    	}
     
    	public String toString(){
    		return "("+x+","+y+")";
    	}
     
    public class Polygone {
    	protected Point[] sommets;
     
    		public Polygone(double[] x, double[] y){
    			this.x=x;
    			this.y=y;
                            for (int i = 0; i < x.length; i++){
                                  this.points[i] = new Point(x[i], y[i]);
                                 }
    		}
     
    		protected Polygone(int nbrSommets){
    			this.sommets = new Point[nbrSommets];
    			this.nbrSommets = nbrSommets;
    		}
     
    		public Point getSommet(int i){
    			return this.sommets[i];
    		}
     
    		public double aire(){
     
    		}
     
    		public String toString(){
     
    		}
     
    public class Rectangle extends Polygone {
     
    	public Rectangle(double xMin, double xMax, double yMin, double yMax) {
     
    	}
     
    public class Triangle extends Polygone {
            public Triangle (Point a, Point b, Point c){
    }
    }
     
    public class PolygoneRegulier extends Polygone {
            public PolygoneRegulier (Point c, Point P, int nombreSommets){
     
    }
    }
     
    class TestPolygone
    {
        public static void main(String[] args)
        {
    }
    }

  15. #15
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Tes classes sont-elles dans un seul fichier ou en plusieurs fichiers separes?

    non le constructeur de Polygone m'est donné et je dois l'utiliser ainsi (c'est à dire à partir de 2 tableaux).
    ==> Tu dois separer tes classes en plusieurs fichiers differents

  16. #16
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    ca me fait penser que je me suis loupé l'autre jours, puisque c'est le carré qui est un polygone régulier et non pas le rectangle. Mais bon, personne l'avais vu

    Pourquoi ne pas définir un rectangle à partir de 2 points plutot que 4 doubles.
    Il me semble que 2 points suffisent.
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Oui mes classes sont séparées.
    Je ne sais pas pourquoi créer un rectangle avec 4 doubles mais je dois l'utiliser comme ceci, il est vrai cependant que c'est bien plus simple d'en créer un avec 2 points.

  18. #18
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Si tes classes sont separees (dans les differents fichiers) alors il y a des problemes:

    Dans Polygone
    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
     
    public class Polygone {
     
        protected Point[] sommets;
     
        public Polygone(double[] x, double[] y) {
            this.x = x;
            this.y = y;
            for (int i = 0; i < x.length; i++) {
                this.points[i] = new Point(x[i], y[i]);
            }
        }
     
        protected Polygone(int nbrSommets) {
            this.sommets = new Point[nbrSommets];
            this.nbrSommets = nbrSommets;
        }
     
        public Point getSommet(int i) {
            return this.sommets[i];
        }
     
        public double aire() {
     
        }
     
        public String toString() {
     
        }
     
    }
    Ou se trouvent la declaration de x, y?
    La fonction toString, aire ne sont pas completes.

    En plus d'apres ce que tu nous dis
    non le constructeur de Polygone m'est donné et je dois l'utiliser ainsi (c'est à dire à partir de 2 tableaux).
    Ceci est un probleme alors.

  19. #19
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Selon la declaration des tes classes

    Rectangle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class Rectangle extends Polygone {
        public Rectangle(double xMin, double xMax, double yMin, double yMax) {
        }
    }
    Triangle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class Triangle extends Polygone {
        public Triangle (Point a, Point b, Point c){
        }
    }
    PolygoneRegulier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class PolygoneRegulier extends Polygone {
        public PolygoneRegulier (Point c, Point P, int nombreSommets){
        }
    }
    Il en manque quelles choses dans la classe Polygone (constructeurs manquants)

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 71
    Points : 26
    Points
    26
    Par défaut
    non désolé, mes classes ne sont pas dans des fichiers séparées, juste des classes différentes dont la classe mère est Point.

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