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 :

Exercice avec des triangles


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut Exercice avec des triangles
    Bonjour,

    je viens demander de l'aide car je ne comprends pas bien la 2ème question d'un exercice que voici :

    Soit le triangle ABC et leurs coordonnées x et y.
    Définissez la classe Triangle et la classe Point en faisant en sorte que chaque triangle soit composé de 3 points de la classe Point.
    Il est demandé de construire un objet de la classe Triangle de 2 façons :

    Solution n°1 : en créant les points au fur et à mesure de la construction du triangle.
    Solution n°2 : en créant d'abord les 3 points, puis en construisant le triangle à partie de ces 2 points déjà implémentés. Voir si le triangle construit est isocele.

    J'ai réussi à créer des triangles comme ceci mais je ne réponds pas à la 2ème question.

    classe Point
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Point {
    	private int  x;
    	private int y;
     
     
    	public Point() {
    		super();
    		this.x = (int) (Math.random() * 100);
    		this.y = (int) (Math.random() * 100);
    		// TODO Auto-generated constructor stub
    	}
    Classe triangle
    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
    package ExoTriangle;
     
    import java.util.ArrayList;
    import java.util.List;
     
    public class Triangle {
    	List<Point> listePoint = new ArrayList<Point>();
     
    	public Triangle() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
     
    	public Triangle(List<Point> listePoint) {
    		super();
    		this.listePoint = listePoint;
    	}
     
    	public void ajouterPoint(Point point) {
    			this.listePoint.add(point);
    	}
     
    	public List<Point> getListePoint() {
    		return listePoint;
    	}
     
    	public void setListePoint(List<Point> listePoint) {
    		this.listePoint = listePoint;
    	}
     
    	@Override
    	public String toString() {
    		StringBuilder builder = new StringBuilder();
    		builder.append("Triangle [listePoint=");
    		builder.append(listePoint);
    		builder.append("]");
    		return builder.toString();
    	}
    }
    et ma méthode main
    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
    package ExoTriangle;
     
    public class MainTriangle {
     
    	public static void main(String[] args) {
    		Point point1 = new Point();
    		Point point2 = new Point();
    		Point point3 = new Point();
     
    		Triangle triangle = new Triangle();
     
    		triangle.ajouterPoint(point1);
    		triangle.ajouterPoint(point2);
    		triangle.ajouterPoint(point3);
     
    		System.out.println(triangle.toString());
    	}
    }
    Si jamais vous avez une piste de réflexion, merci beaucoup

  2. #2
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 681
    Points
    1 681
    Par défaut
    Bonjour,

    Si la question pose sur la définition d'un triangle isocèle, "en géométrie, un triangle isocèle est un triangle ayant au moins deux côtés de même longueur". dixit Wikipedia, je n'ai plus mes bouquins de maths sous la main

    Il faut donc trouver le moyen de calculer les longueurs des côtés des triangles. Soit la racine carrée de ((Xb-Xa)^2 + (Yb-Ya)^2)) (cf calcul de l'hypoténuse).
    Une fois les 3 longueurs connues, il "suffit" de les comparer deux à deux.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 474
    Points : 921
    Points
    921
    Billets dans le blog
    5
    Par défaut
    Effectivement, l'exercice a l'air plus difficile qu'il en a l'air.

    Pour la classe Point:
    Déjà, des double plutôt que des int. Pour le calcul, ça me semble mieux (comme la distance entre deux points...).
    Enfin, le constructeur prend deux arguments (x et y), ça me semble mieux aussi.
    Enfin, dans le contexte de l'exercice, deux point sont les mêmes si ils ont même coordonnées (les trois points d'un triangle sont distinct).
    Dans ce cas, il peut être intéressant de surcharger equals, mais du coup, il faudra surcharger hashcode.
    https://jmdoudoux.developpez.com/cou...iques_java.php


    Une classe de calcul sur les points.
    Une classe à méthodes static avec constructeur privé. Dans cette classe, il est utile d'avoir la méthode pour calculer la distance entre deux points, par exemple.

    La classe triangle: prend 3 paramètres dans le constructeur, en l'occurrence 3 points.

    Classe hérité de Triangle: triangle isocèle, triangle rectangle et triangle équilatéral (qui d'ailleurs hérite de triangle isocèle).
    Le triangle isocèle rectangle n'existe pas.

    Et pour finir
    On utilise le design pattern factory. En passant 3 points, il donne la bonne implémentation:
    https://fr.wikipedia.org/wiki/Fabriq...de_conception)

    Voila les grandes lignes que je peux proposer.

    Cordialement.

  4. #4
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    Merci pour ces réponses, à tous les 2 qui vont me fournir matière à réflexion et de quoi occuper ma soirée. Mille mercis encore un fois d'avoir pris le temps de me répondre de manière si complète.

  5. #5
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    Bonjour,
    Après une semaine bien chargée, je reviens à la charge avec mes histoires de triangle

    J'ai appliqué certaines modifications que Philippe a eu la gentillesse de détailler sur son dernier post, mais je n'ai pas traité certains aspects par manque de connaissances (constructeur privé, equals...). D'autre part je n'ai pas déployé d'autres classes car l'exercice ne semble pas le spécifier

    Pour l'instant le script renvoie si oui ou non les coordonnées forment bien des triangles isocèles (ou équilatéraux). Je poste le code à tout hasard pour que vous me disiez si la logique et la syntaxe vous paraissent correctes ou si il y a des mauvaises pratiques à éviter


    La classe triangle
    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
    package ExoTriangle;
     
    public class Triangle {
    	private Point point2;
    	private Point point1;
    	private Point point3;
     
    	public Triangle() {
    		super();
    	}
     
    	public Triangle(Point point1, Point point2, Point point3) {
    		this.point1 = point1;
    		this.point2 = point2;
    		this.point3 = point3;
    	}
     
    	public boolean isIso() {
    		double ab = Math.sqrt(Math.pow((point1.getX()-point2.getX()), 2)+Math.pow((point1.getY()-point2.getY()), 2));
    		double ac = Math.sqrt(Math.pow((point1.getX()-point3.getX()), 2)+Math.pow((point3.getY()-point2.getY()), 2));
    		double bc = Math.sqrt(Math.pow((point2.getX()-point3.getX()), 2)+Math.pow((point2.getY()-point3.getY()), 2));
    		return  ab == ac || ab==bc || ac==bc;
    	}
     
    	public Point getPoint2() {
    		return point2;
    	}
     
    	public void setPoint2(Point point2) {
    		this.point2 = point2;
    	}
     
    	public Point getPoint1() {
    		return point1;
    	}
     
    	public void setPoint1(Point point1) {
    		this.point1 = point1;
    	}
     
    	public Point getPoint3() {
    		return point3;
    	}
     
    	public void setPoint3(Point point3) {
    		this.point3 = point3;
    	}
     
    	@Override
    	public String toString() {
    		StringBuilder builder = new StringBuilder();
    		builder.append("Triangle [point2=");
    		builder.append(point2);
    		builder.append(", point1=");
    		builder.append(point1);
    		builder.append(", point3=");
    		builder.append(point3);
    		builder.append("]");
    		return builder.toString();
    	}
    }
    La classe point


    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
     
    package ExoTriangle;
     
     
    public class Point {
    	private double  x;
    	private double y;
     
     
    	public Point(double x, double y) {
    		super();
    		this.x = x;
    		this.y = y;
    	}
     
    	public double getX() {
    		return x;
    	}
    	public void setX(int x) {
    		this.x = x;
    	}
    	public double getY() {
    		return y;
    	}
    	public void setY(int y) {
    		this.y = y;
    	}
     
    	@Override
    	public String toString() {
    		StringBuilder builder = new StringBuilder();
    		builder.append("Point [x=");
    		builder.append(x);
    		builder.append(", y=");
    		builder.append(y);
    		builder.append("]");
    		return builder.toString();
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    package ExoTriangle;
     
    public class MainTriangle {
     
    	public static void main(String[] args) {
    		Triangle triangle1 = new Triangle(new Point(1, 3), new Point(1,1), new Point(2,2));
    		System.out.println(triangle1.isIso());
    	}
    }
    Merci encore

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 474
    Points : 921
    Points
    921
    Billets dans le blog
    5
    Par défaut
    Il n'y a pas de quoi.

Discussions similaires

  1. Background CSS avec des triangles
    Par geek150699 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 14/04/2019, 03h04
  2. Exercice avec des boucles
    Par Sabineeth dans le forum MATLAB
    Réponses: 0
    Dernier message: 01/07/2017, 15h02
  3. Exercice avec des boucles
    Par ptiiiilu dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 21/06/2017, 16h39
  4. Problèmes exercice avec des sous-requêtes
    Par kopbuc dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/10/2015, 14h00
  5. créer des feuilles d'exercices avec des corrigés
    Par Dexter80 dans le forum Mise en forme
    Réponses: 5
    Dernier message: 22/08/2012, 18h10

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