Classe de points et segments. [Fermé]

Signaler
-
 Bertos -
Bonjour,

je suis sur un projet assez complex pour moi (débutant) ou je dois faire un segment à partir de deux points.
Le segment AB doit etre l'ensemble des points entre le point A et le point B.

comment faire?

voila ma classe Point:

public class Point {
int x;
int y;

public Point(int x, int y){
this.x=x;
this.y=y;
}
}

Merci d'avance

2 réponses

Messages postés
16366
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
22 juin 2021
2 849
"L'ensemble des points" c'est une représentation de l'esprit, mais pour le décrire formellement tu n'as besoin que des deux points A et B. La ligne imaginaire qu'il y a entre les deux et l'ensemble des points qu'elle implique (qui est infinie !) n'a pas besoin d'être spécifiée dans ta classe.

Du coup, sur le même principe que ta classe point tu aurais :

public class Segment {
	Point a;
	Point b;
	
	public Point(Point a, Point b){
		this.a=a;
		this.b=b;
	}
}

Finalement, tu savais déjà faire ;-)
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Merci de ta réponse!

Si j'avais mis l'ensemble des points c'est parce que je veux savoir aussi si un point fait parti d'un segment, ou bien si deux segment se croisent. il faut que je rajoute des fonctions mathématiques dans ce genre?

public class Line {
	Point a;
	Point b;
	
	public Line(Point a, Point b){
		this.a=a;
		this.b=b;
	}

      public Point croisement(Line ab, Line cd) {
		//formules de maths qui retourne un point
	}
	
	public void appartient(Point a, Line cd){
		//oui ou non
	}


}
Messages postés
16366
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
22 juin 2021
2 849
Oui, pour ce genre de besoins ce sont les méthodes qu'il faut utiliser, modifier la structure de l'objet n'apporterait rien de plus.
Pour les formules tu peux regarder le lien que l'on t'as donné. Attention cependant à ne pas confondre une ligne et un segment et à bien prévoir les cas où il n'y a pas d'intersection.
Il faudra aussi revoir les signatures de tes méthodes car telles quelles elles sont fausses.
Merci!
Les signatures? c'est à dire?
Messages postés
16366
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
22 juin 2021
2 849
Les signatures c'est le type de retour, le type des arguments, et les mots clés de la méthode.
C'est la partie visible de la classe (contrairement au code qui n'est pas directement accessible).

public Point croisement(Line ab, Line cd)

La méthode s'applique déjà à l'objet courant qui est de type Line, donc il faudrait un seul argument Line, si tu en as deux ça veut dire que tu fais l'intersection de trois lignes...

public void appartient(Point a, Line cd)

Même principe, l'argument de type Line rentre en conflit avec l'objet courant, en plus ici tu as un type de retour à void ce qui ne correspond pas à l'objectif de ta méthode.

Tes signatures devraient être :

public Point croisement(Line cd)
public boolean appartient(Point p)

Ou éventuellement avec le mot clé static, mais ça ne se justifie pas vraiment ici.

public static Point croisement(Line ab, Line cd)
public static boolean appartient(Point a, Line cd)
okay merci beaucoup!
voilà mon code: merci encore!
public class Line {
	Point debut;
	Point fin;
	
	public Line(Point debut, Point fin){
		this.debut=debut;
		this.fin=fin;
	}
	
	public static Point croisement(Line ab, Line cd) {
		
		//formules de maths qui retourne un point
		double a1=(ab.fin.y-ab.debut.y)/(ab.fin.x-ab.debut.x);
		double a2=(ab.fin.y-ab.debut.y)/(ab.fin.x-ab.debut.x);
		if (a1==a2){
			return null;
		}
		
		double b1 = ab.debut.y - (a1 * ab.debut.x);
		double b2 = cd.debut.y - (a2 * cd.debut.x);
		double xCross= (b2-b1)/(a1-a2);
		double yCross= a1*xCross+b1;
		if (xCross<ab.debut.x || xCross>ab.fin.x){
			return null;
		}
		Point e = new Point(xCross,yCross);
		return e;
	}
	
	public static boolean appartient(Point a, Line cd){
		//oui ou non
		boolean croise=false;
//		a faire...
		return croise;
		
	}
}