This commit is contained in:
Laureηt 2023-06-20 21:02:09 +02:00
commit e907d221c2
Signed by: Laurent
SSH key fingerprint: SHA256:kZEpW8cMJ54PDeCvOhzreNr4FSh6R13CMGH/POoO8DI
134 changed files with 859702 additions and 0 deletions

13
TP01/CycleVie.java Normal file
View file

@ -0,0 +1,13 @@
/** Illustrer le ramasse-miettes de Java.
* @author Xavier Crégut
* @version 1.4
*/
public class CycleVie {
public static void main(String[] args) {
for (int i = 0; i < 100_000; i++) {
Point p = new Point(i, i);
}
System.out.println("Fini !");
}
}

View file

@ -0,0 +1,91 @@
/** Comprendre les objets et les poignées sur la classe Point.
* @author Xavier Crégut
* @version 1.6
*/
public class ExempleComprendre {
/** Afficher un point précédé d'un texte.
* @param texte le texte à afficher
* @param p le point à afficher
*/
public static void afficher(String texte, Point p) {
System.out.print(texte + " = ");
p.afficher();
System.out.println();
}
/** Méthode principale */
public static void main(String[] args) {
// Créer et afficher un point p1
Point p1; // déclarer une poignée sur un Point
p1 = new Point(3, 4); // créer un point et l'attacher à p1
// On peut écrire les deux instructions précédentes sur la
// même ligne. Ceci évite d'oublier d'initialiser une
// poignée.
afficher("p1", p1);
// Créer et afficher un point p2
Point p2 = new Point(0, 0); // On déclare des poignées et on
// crée des objets quand on veut.
afficher("p2", p2);
// Afficher la distance entre p1 et p2
double d = p1.distance(p2);
System.out.println("Distance de p1 à p2 : " + d);
// Translater p1
System.out.println("> p1.translater(6, -2);");
p1.translater(6, -2);
afficher("p1", p1); // Qu'est ce qui est affiché ?
// Changer l'abscisse de p1 et afficher p1
System.out.println("> p1.setX(0);");
p1.setX(0);
afficher("p1", p1); // Qu'est ce qui est affiché ?
// Changer l'ordonnée de p1 et afficher p1
System.out.println("> p1.setY(10);");
p1.setY(10);
afficher("p1", p1);
// Dessiner l'état de la mémoire
// Prendre une nouvelle poignée sur p1
System.out.println("> Point p3 = p1;");
Point p3 = p1;
afficher("p3", p3); // Qu'est ce qui est affiché ?
afficher("p1", p1); // Qu'est ce qui est affiché ?
// Déplacer p3
System.out.println("> p3.translater(100, 100);");
p3.translater(100, 100);
afficher("p3", p3); // Qu'est ce qui est affiché ?
// Afficher p1
afficher("p1", p1); // Qu'est ce qui est affiché ?
// Dessiner l'état de la mémoire
// Affectations entre poignées
System.out.println("> p3 = new Point(123, 321);");
p3 = new Point(123, 321);
afficher("p3", p3); // Qu'est ce qui est affiché ?
afficher("p1", p1); // Qu'est ce qui est affiché ?
System.out.println("> p1 = p2 = p3;");
p1 = p2 = p3;
// Dessiner l'état de la mémoire
afficher("p1", p1); // Qu'est ce qui est affiché ?
afficher("p2", p2); // Qu'est ce qui est affiché ?
afficher("p3", p3); // Qu'est ce qui est affiché ?
// p1, p2 et p3 sont-ils des points différents ?
System.out.println("> p1.translater(-123, -321);");
p1.translater(-123, -321);
afficher("p1", p1); // Qu'est ce qui est affiché ?
afficher("p2", p2); // Qu'est ce qui est affiché ?
afficher("p3", p3); // Qu'est ce qui est affiché ?
d = new Point(5, 5).distance(new Point(8, 1));
System.out.println("d = " + d);
// Combien y a-t-il de points accessibles ?
}
}

View file

@ -0,0 +1,108 @@
class MonPoint {
public MonPoint(double vx, double vy) {
this.x = vx;
this.y = vy;
}
public double getX() {
return this.x;
}
public double getY() {
return this.y;
}
public void setX(double vx) {
this.x = vx;
}
public void setY(double vy) {
this.y = vy;
}
public void afficher() {
System.out.print("(" + this.x + ", " + this.y + ")");
}
public double distance(MonPoint autre) {
return Math.sqrt(Math.pow(autre.x - this.x, 2)
+ Math.pow(autre.y - this.y, 2));
}
public void translater(double dx, double dy) {
this.x += dx;
this.y += dy;
}
private double x;
private double y;
}
public class ExempleComprendreTutor {
public static void afficher(String texte, MonPoint p) {
System.out.print(texte + " = ");
p.afficher();
System.out.println();
}
public static void main(String[] args) {
MonPoint p1;
p1 = new MonPoint(3, 4);
afficher("p1", p1);
MonPoint p2 = new MonPoint(0, 0);
afficher("p2", p2);
double d = p1.distance(p2);
System.out.println("Distance de p1 à p2 : " + d);
System.out.println("> p1.translater(6, -2);");
p1.translater(6, -2);
afficher("p1", p1); // Qu'est ce qui est affiché ?
System.out.println("> p1.setX(0);");
p1.setX(0);
afficher("p1", p1); // Qu'est ce qui est affiché ?
System.out.println("> p1.setY(10);");
p1.setY(10);
afficher("p1", p1);
System.out.println("> MonPoint p3 = p1;");
MonPoint p3 = p1;
afficher("p3", p3);
afficher("p1", p1);
System.out.println("> p3.translater(100, 100);");
p3.translater(100, 100);
afficher("p3", p3);
afficher("p1", p1);
System.out.println("> p3 = new MonPoint(123, 321);");
p3 = new MonPoint(123, 321);
afficher("p3", p3);
afficher("p1", p1);
System.out.println("> p1 = p2 = p3;");
p1 = p2 = p3;
afficher("p1", p1);
afficher("p2", p2);
afficher("p3", p3);
System.out.println("> p1.translater(-123, -321);");
p1.translater(-123, -321);
afficher("p1", p1);
afficher("p2", p2);
afficher("p3", p3);
d = new MonPoint(5, 5).distance(new MonPoint(8, 1));
System.out.println("d = " + d);
}
}

17
TP01/ExempleErreur.java Normal file
View file

@ -0,0 +1,17 @@
/** Une erreur à la compilation !
* Pourquoi ?
* @author Xavier Crégut
* @version 1.3
*/
public class ExempleErreur {
/** Méthode principale */
public static void main(String[] args) {
Point p1 = new Point(0, 0);
p1.setX(1);
p1.setY(2);
p1.afficher();
System.out.println();
}
}

115
TP01/Point.java Normal file
View file

@ -0,0 +1,115 @@
import java.awt.Color;
/** Point modélise un point géométrique dans un plan équipé d'un
* repère cartésien. Un point peut être affiché et translaté.
* Sa distance par rapport à un autre point peut être obtenue.
*
* @author Xavier Crégut <Prénom.Nom@enseeiht.fr>
*/
public class Point {
/** Construire un point à partir de son abscisse et de son ordonnée.
* @param vx abscisse
* @param vy ordonnée
*/
public Point(double vx, double vy) {
System.out.println("CONSTRUCTEUR Point(" + vx + ", " + vy + ")");
this.x = vx;
this.y = vy;
this.couleur = Color.green;
}
/** Obtenir l'abscisse du point.
* @return abscisse du point
*/
public double getX() {
return this.x;
}
/** Obtenir l'ordonnée du point.
* @return ordonnée du point
*/
public double getY() {
return this.y;
}
/** Changer l'abscisse du point.
* @param vx nouvelle abscisse
*/
public void setX(double vx) {
this.x = vx;
}
/** Changer l'ordonnée du point.
* @param vy nouvelle ordonnée
*/
public void setY(double vy) {
this.y = vy;
}
/** Afficher le point. */
public void afficher() {
System.out.print("(" + this.x + ", " + this.y + ")");
}
/** Distance par rapport à un autre point.
* @param autre l'autre point
* @return distance entre this et autre
*/
public double distance(Point autre) {
return Math.sqrt(Math.pow(autre.x - this.x, 2)
+ Math.pow(autre.y - this.y, 2));
}
/** Translater le point.
* @param dx déplacement suivant l'axe des X
* @param dy déplacement suivant l'axe des Y
*/
public void translater(double dx, double dy) {
this.x += dx;
this.y += dy;
}
// Gestion de la couleur
/** Obtenir la couleur du point.
* @return la couleur du point
*/
public Color getCouleur() {
return this.couleur;
}
/** Changer la couleur du point.
* @param nouvelleCouleur nouvelle couleur
*/
public void setCouleur(Color nouvelleCouleur) {
this.couleur = nouvelleCouleur;
}
// La méthode finalize est appelée avant que le récupérateur de
// mémoire ne détruise l'objet. Attention toutefois, on ne sait
// pas quand ces ressources seront libérées et il est donc
// dangereux de s'appuyer sur ce mécanisme pour libérer des
// ressources qui sont en nombre limité.
//
// D'autre part, pour être sûr que les méthodes << finalize >>
// sont appelées avant la fermeture de Java, il faut appeler la
// méthode statique :
// System.runFinalizersOnExit(true)
//
protected void finalize() {
System.out.print("DESTRUCTION du point : ");
this.afficher();
System.out.println();
}
// Représentation interne d'un point
// ---------------------------------
// Remarque : en Java, il est conseillé (convention de programmation)
// de mettre les attributs au début de la classe.
private double x; // abscisse
private double y; // ordonnée
private Color couleur; // couleur du point
}

67
TP01/Schema.java Normal file
View file

@ -0,0 +1,67 @@
/** Un Schéma est défini pas trois points qui constituent ses
* sommets. Un Schéma peut être affiché et translaté.
*
* @author
* @version 1.9
*/
public class Schema {
private Segment s1;
private Segment s2;
private Segment s3;
private Point barycentre;
/** Construire un Schéma à partir de ses trois sommets.
* @param s1 le premier point du schéma
* @param s2 le deuxième point du schéma
* @param s3 le troisème point du schéma
*/
public Schema(Point p1, Point p2, Point p3) {
this.s1 = new Segment(p1, p2);
this.s2 = new Segment(p2, p3);
this.s3 = new Segment(p3, p1);
this.barycentre = calcul_barycentre(p1, p2, p3);
}
/**
* Calcul le barycentre à partir de trois points
* @param p1
* @param p2
* @param p3
* @return le barycentre de trois points
*/
private static Point calcul_barycentre(Point p1, Point p2, Point p3) {
return new Point(
(p1.getX() + p2.getX() + p3.getX())/3,
(p1.getY() + p2.getY() + p3.getY())/3 );
}
/**
* Translater le schéma.
*
* @param dx déplacement suivant l'axe des X
* @param dy déplacement suivant l'axe des Y
*/
public void translater(double dx, double dy) {
this.s1.getExtremite(1).translater(dx, dy);
this.s2.getExtremite(1).translater(dx, dy);
this.s3.getExtremite(1).translater(dx, dy);
this.barycentre.translater(dx, dy);
}
/**
* Afficher le schéma
*/
public void afficher() {
System.out.print("[ ");
this.s1.getExtremite(1).afficher();
System.out.print(" - ");
this.s2.getExtremite(1).afficher();
System.out.print(" - ");
this.s3.getExtremite(1).afficher();
System.out.print(" ], barycentre: ");
this.barycentre.afficher();
}
}

81
TP01/Segment.java Normal file
View file

@ -0,0 +1,81 @@
import java.awt.Color;
/** Un segment est défini pas ses deux points qui constituent ses
* extrémités. Un segment peut être affiché et translaté.
*
* @author Xavier Crégut
* @version 1.9
*/
public class Segment {
private Point extremite1;
private Point extremite2;
private Color couleur;
/** Construire un Segment à partir de ses deux points extrémités.
* @param ext1 le premier point extrémité
* @param ext2 le deuxième point extrémité
*/
public Segment(Point ext1, Point ext2) {
this.extremite1 = ext1;
this.extremite2 = ext2;
this.couleur = Color.green;
}
/** Translater le segment.
* @param dx déplacement suivant l'axe des X
* @param dy déplacement suivant l'axe des Y
*/
public void translater(double dx, double dy) {
// System.err.println("Segment.translater(double, double) non implantée");
this.extremite1.translater(dx, dy);
this.extremite2.translater(dx, dy);
}
/** Obtenir la longueur du segment.
* @return la longueur du segment
*/
public double longueur() {
// System.err.println("Segment.longueur() non implantée");
return Math.sqrt(
Math.pow(this.extremite1.getY() - this.extremite2.getY(), 2)
+ Math.pow(this.extremite1.getX() - this.extremite2.getX(), 2));
}
/** Afficher le segment. Le segment est affiché sous la forme :
* <PRE>
* [extremite1-extremite2]
* </PRE>
*/
public void afficher() {
// System.err.println("Segment.afficher() non implantée");
System.out.print("[ ");
this.extremite1.afficher();
System.out.print(" - ");
this.extremite2.afficher();
System.out.print(" ]");
}
/** Obtenir la couleur du segment.
* @return la couleur du segment
*/
public Color getCouleur() {
return this.couleur;
}
/** Changer la couleur du segment.
* @param nouvelleCouleur nouvelle couleur
*/
public void setCouleur(Color nouvelleCouleur) {
this.couleur = nouvelleCouleur;
}
public Point getExtremite(int id) {
if (id == 1) {
return this.extremite1;
} else {
return this.extremite2;
}
}
}

45
TP01/TestSchema.java Normal file
View file

@ -0,0 +1,45 @@
/** Programme de test de la classe Schéma.
* @author
* @version 1.4
*/
public class TestSchema {
public static void main(String[] args) {
// Créer trois points et un schéma à partir de ces points
Point p1 = new Point(3, 2);
Point p2 = new Point(11, 4);
Point p3 = new Point(6, 9);
Schema s = new Schema(p1, p2, p3);
// Afficher le schéma
System.out.println("s = "); s.afficher(); System.out.println();
// Translater le segment
System.out.println("> s.translater(10, 100);");
s.translater(10, 100);
// Afficher le schéma
System.out.println("s = "); s.afficher(); System.out.println();
// vérif
if (p1.getX() != 13) {
System.out.println("ERREUR pour translater p1.x !");
}
if (p1.getY() != 102) {
System.out.println("ERREUR pour translater p1.y !");
}
if (p2.getX() != 21) {
System.out.println("ERREUR pour translater p2.x !");
}
if (p2.getY() != 104) {
System.out.println("ERREUR pour translater p2.y !");
}
if (p3.getX() != 16) {
System.out.println("ERREUR pour translater p3.x !");
}
if (p3.getY() != 109) {
System.out.println("ERREUR pour translater p3.y !");
}
}
}

47
TP01/TestSegment.java Normal file
View file

@ -0,0 +1,47 @@
/** Programme de test de la classe Segment.
* @author Xavier Crégut
* @version 1.4
*/
public class TestSegment {
public static void main(String[] args) {
// Créer deux points et un segment à partir de ces points
Point p1 = new Point(0, 0);
Point p2 = new Point(3, 4);
Segment s = new Segment(p1, p2);
// Afficher le segment
System.out.print("s = "); s.afficher(); System.out.println();
// Afficher la longueur du segment
System.out.println("longueur de s = " + s.longueur());
if (s.longueur() != 5) {
System.out.println("ERREUR : la longueur devrait être 5 !");
}
// Translater le segment
System.out.println("> s.translater(10, 100);");
s.translater(10, 100);
if (p1.getX() != 10) {
System.out.println("ERREUR pour translater extrémité1.x !");
}
if (p1.getY() != 100) {
System.out.println("ERREUR pour translater extrémité1.y !");
}
if (p2.getX() != 13) {
System.out.println("ERREUR pour translater extrémité2.x !");
}
if (p2.getY() != 104) {
System.out.println("ERREUR pour translater extrémité2.y !");
}
// Afficher le segment
System.out.print("s = "); s.afficher(); System.out.println();
// Afficher la longueur du segment
System.out.println("longueur de s = " + s.longueur());
if (s.longueur() != 5) {
System.out.println("ERREUR : la longueur devrait être 5 !");
}
}
}

Binary file not shown.

13
TP02/.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,13 @@
{
"java.project.referencedLibraries": [
"lib/**/*.jar",
"/usr/share/java/hamcrest-core.jar",
"/usr/share/java/junit.jar"
],
"files.exclude": {
"**/.classpath": true,
"**/.project": true,
"**/.settings": true,
"**/.factorypath": true
}
}

117
TP02/Point.java Normal file
View file

@ -0,0 +1,117 @@
import java.awt.Color;
/** Point modélise un point géométrique dans un plan équipé d'un
* repère cartésien. Un point peut être affiché et translaté.
* Sa distance par rapport à un autre point peut être obtenue.
*
* @author Xavier Crégut <Prénom.Nom@enseeiht.fr>
*/
public class Point {
/** Construire un point à partir de son abscisse et de son ordonnée.
* @param vx abscisse
* @param vy ordonnée
*/
public Point(double vx, double vy) {
// System.out.println("CONSTRUCTEUR Point(" + vx + ", " + vy + ")");
this.x = vx;
this.y = vy;
this.couleur = Color.green;
}
/** Obtenir l'abscisse du point.
* @return abscisse du point
*/
public double getX() {
return this.x;
}
/** Obtenir l'ordonnée du point.
* @return ordonnée du point
*/
public double getY() {
return this.y;
}
/** Changer l'abscisse du point.
* @param vx nouvelle abscisse
*/
public void setX(double vx) {
this.x = vx;
}
/** Changer l'ordonnée du point.
* @param vy nouvelle ordonnée
*/
public void setY(double vy) {
this.y = vy;
}
/** Afficher le point. */
public void afficher() {
System.out.print("(" + this.x + ", " + this.y + ")");
}
/** Distance par rapport à un autre point.
* @param autre l'autre point
* @return distance entre this et autre
*/
public double distance(Point autre) {
return Math.sqrt(Math.pow(autre.x - this.x, 2)
+ Math.pow(autre.y - this.y, 2));
}
/** Translater le point.
* @param dx déplacement suivant l'axe des X
* @param dy déplacement suivant l'axe des Y
*/
public void translater(double dx, double dy) {
this.x += dx;
this.y += dy;
}
// Gestion de la couleur
/** Obtenir la couleur du point.
* @return la couleur du point
*/
public Color getCouleur() {
return this.couleur;
}
/** Changer la couleur du point.
* @param nouvelleCouleur nouvelle couleur
*/
public void setCouleur(Color nouvelleCouleur) {
this.couleur = nouvelleCouleur;
}
/*
// La méthode finalize est appelée avant que le récupérateur de
// mémoire ne détruise l'objet. Attention toutefois, on ne sait
// pas quand ces ressources seront libérées et il est donc
// dangereux de s'appuyer sur ce mécanisme pour libérer des
// ressources qui sont en nombre limité.
//
// D'autre part, pour être sûr que les méthodes << finalize >>
// sont appelées avant la fermeture de Java, il faut appeler la
// méthode statique :
// System.runFinalizersOnExit(true)
//
protected void finalize() {
System.out.print("DESTRUCTION du point : ");
this.afficher();
System.out.println();
}
*/
// Représentation interne d'un point
// ---------------------------------
// Remarque : en Java, il est conseillé (convention de programmation)
// de mettre les attributs au début de la classe.
private double x; // abscisse
private double y; // ordonnée
private Color couleur; // couleur du point
}

101
TP02/PointTest.java Normal file
View file

@ -0,0 +1,101 @@
import org.junit.*;
import static org.junit.Assert.*;
import java.awt.Color;
/** Programme de test de la classe Point.
* @author Xavier Crégut
* @version 1.11
*/
public class PointTest {
public static final double EPSILON = 1e-6;
// précision pour la comparaison entre réels.
private Point p1;
private Point p2;
@Before
public void setUp() {
p1 = new Point(1, 2);
p2 = new Point(4, -2);
}
@Test
public void testInitialisation() {
assertTrue(p1 != null);
assertTrue(p2 != null);
assertTrue(p1.getX() == 1);
assertTrue(p1.getY() == 2);
assertTrue(p2.getX() == 4);
assertTrue(p2.getY() == -2);
}
@Test
public void testInitialisationMieux() {
assertNotNull(p1);
assertNotNull(p2);
// Remarque : faire un test d'égalité sur des réels est à éviter
// à cause des erreurs d'arrondi. En conséquence, il faut
// vérifier que les deux nombres sont égaux à EPSILON près.
// C'est ce que fait assertEquals(attendu, réel, précision)
assertEquals(1.0, p1.getX(), EPSILON);
assertEquals(2.0, p1.getY(), EPSILON);
assertEquals(4.0, p2.getX(), EPSILON);
assertEquals(-2.0, p2.getY(), EPSILON);
}
@Test
public void testSetX() {
p1.setX(10);
assertEquals(10.0, p1.getX(), EPSILON);
p1.setX(-5);
assertEquals(-5.0, p1.getX(), EPSILON);
}
@Test
public void testSetY() {
p1.setY(10);
assertEquals(10.0, p1.getY(), EPSILON);
p1.setY(-5);
assertEquals(-5.0, p1.getY(), EPSILON);
}
@Test
public void testDistance() {
assertEquals(0.0, p1.distance(p1), EPSILON);
assertEquals(0.0, p2.distance(p2), EPSILON);
assertEquals(5.0, p1.distance(p2), EPSILON);
assertEquals(5.0, p2.distance(p1), EPSILON);
}
@Test
public void testTranslater1() {
p1.translater(2, 4);
assertEquals(3.0, p1.getX(), EPSILON);
assertEquals(6.0, p1.getY(), EPSILON);
}
@Test
public void testTranslater2() {
p2.translater(-2, -4);
assertEquals(2.0, p2.getX(), EPSILON);
assertEquals(-6.0, p2.getY(), EPSILON);
}
@Test
public void testCouleur() {
assertEquals(p1.getCouleur(), Color.GREEN);
assertEquals(p2.getCouleur(), Color.GREEN);
}
@Test
public void testSetCouleur() {
p1.setCouleur(Color.RED);
p2.setCouleur(Color.BLUE);
assertEquals(p1.getCouleur(), Color.RED);
assertEquals(p2.getCouleur(), Color.BLUE);
}
}

Binary file not shown.

View file

6
TP04/.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,6 @@
{
"java.project.referencedLibraries": [
"lib/**/*.jar",
"afficheur.jar"
]
}

46
TP04/AfficheurTexte.java Normal file
View file

@ -0,0 +1,46 @@
import afficheur.Afficheur;
public class AfficheurTexte implements Afficheur {
public void dessinerPoint(double x, double y, java.awt.Color c) {
System.out.println("Point {");
System.out.printf(" x = %f\n", x);
System.out.printf(" y = %f\n", y);
System.out.print( " couleur = ");
System.out.println(c);
System.out.println("}");
}
public void dessinerLigne(double x1, double y1, double x2, double y2, java.awt.Color c) {
System.out.println("Ligne {");
System.out.printf(" x1 = %f\n", x1);
System.out.printf(" y1 = %f\n", y1);
System.out.printf(" x2 = %f\n", x2);
System.out.printf(" y2 = %f\n", y2);
System.out.print( " couleur = ");
System.out.println(c);
System.out.println("}");
}
public void dessinerCercle(double x, double y, double rayon, java.awt.Color c) {
System.out.println("Cercle {");
System.out.printf(" centre_x = %f\n", x);
System.out.printf(" centre_y = %f\n", y);
System.out.printf(" rayon = %f\n", rayon);
System.out.print( " couleur = ");
System.out.println(c);
System.out.println("}");
}
public void dessinerTexte(double x, double y, java.lang.String texte, java.awt.Color c) {
System.out.println("Texte {");
System.out.printf(" x = %f\n", x);
System.out.printf(" y = %f\n", y);
System.out.printf(" valeur = %s\n", texte);
System.out.print( " couleur = ");
System.out.println(c);
System.out.println("}");
}
}

31
TP04/ExempleEcran.java Normal file
View file

@ -0,0 +1,31 @@
import afficheur.AfficheurSVG;
import afficheur.Ecran;
import java.awt.Color;
/**
* Exemple d'utilisation de la classe Ecran.
*/
class ExempleEcran {
public static void main(String[] args) {
// Construire un écran
// AfficheurTexte monEcran = new AfficheurTexte();
Ecran monEcran = new Ecran("ExempleEcran", 400, 250, 15);
// Dessiner les axes
monEcran.dessinerAxes();
// Dessiner un point vert de coordonnées (1, 2)
monEcran.dessinerPoint(1, 2, Color.GREEN);
// Dessiner un segment rouge d'extrémités (6, 2) et (11, 9)
monEcran.dessinerLigne(6, 2, 11, 9, Color.RED);
// Dessiner un cercle jaune de centre (4, 3) et rayon 2.5
monEcran.dessinerCercle(4, 3, 2.5, Color.YELLOW);
// Dessiner le texte "Premier dessin" en bleu à la position (1, -2)
monEcran.dessinerTexte(1, -2, "Premier dessin", Color.BLUE);
}
}

70
TP04/ExempleSchema1.java Normal file
View file

@ -0,0 +1,70 @@
import afficheur.AfficheurSVG;
import java.awt.Color;
/** Construire le schéma proposé dans le sujet de TP avec des points,
* et des segments.
*
* @author Xavier Crégut
* @version $Revision: 1.7 $
*/
public class ExempleSchema1 {
/** Construire le schéma et le manipuler.
* Le schéma est affiché.
* @param args les arguments de la ligne de commande
*/
public static void main(String[] args)
{
// Créer les trois segments
Point p1 = new Point(3, 2);
Point p2 = new Point(6, 9);
Point p3 = new Point(11, 4);
Segment s12 = new Segment(p1, p2);
Segment s23 = new Segment(p2, p3);
Segment s31 = new Segment(p3, p1);
// Créer le barycentre
double sx = p1.getX() + p2.getX() + p3.getX();
double sy = p1.getY() + p2.getY() + p3.getY();
Point barycentre = new Point(sx / 3, sy / 3);
// Afficher le schéma
System.out.println("Le schéma est composé de : ");
s12.afficher(); System.out.println();
s23.afficher(); System.out.println();
s31.afficher(); System.out.println();
barycentre.afficher(); System.out.println();
// Construire un écran
// AfficheurSVG monEcran = new AfficheurSVG("ExempleSchema1", "schemaSVG", 600, 400);
AfficheurTexte monEcran = new AfficheurTexte();
// Dessiner sur l'écran
s12.dessiner(monEcran);
s23.dessiner(monEcran);
s31.dessiner(monEcran);
barycentre.dessiner(monEcran);
// Translater le schéma
s12.translater(4, -3);
s23.translater(4, -3);
s31.translater(4, -3);
barycentre.translater(4, -3);
// Redessiner sur l'écran
s12.dessiner(monEcran);
s23.dessiner(monEcran);
s31.dessiner(monEcran);
barycentre.dessiner(monEcran);
// Dessiner les axes
// monEcran.dessinerAxes();
// // Afficher le dessin
// monEcran.ecrire();
// // Écrire le dessin SVG dans un fichier
// monEcran.ecrire("schema.svg");
}
}

100
TP04/Point.java Normal file
View file

@ -0,0 +1,100 @@
import java.awt.Color;
import afficheur.Afficheur;
/** Point modélise un point géométrique dans un plan équipé d'un
* repère cartésien. Un point peut être affiché et translaté.
* Sa distance par rapport à un autre point peut être obtenue.
*
* @author Xavier Crégut <Prénom.Nom@enseeiht.fr>
*/
public class Point {
private double x; // abscisse
private double y; // ordonnée
private Color couleur; // couleur du point
/** Construire un point à partir de son abscisse et de son ordonnée.
* @param vx abscisse
* @param vy ordonnée
*/
public Point(double vx, double vy) {
this.x = vx;
this.y = vy;
this.couleur = Color.green;
}
/** Obtenir l'abscisse du point.
* @return abscisse du point
*/
public double getX() {
return this.x;
}
/** Obtenir l'ordonnée du point.
* @return ordonnée du point
*/
public double getY() {
return this.y;
}
/** Changer l'abscisse du point.
* @param vx nouvelle abscisse
*/
public void setX(double vx) {
this.x = vx;
}
/** Changer l'ordonnée du point.
* @param vy nouvelle ordonnée
*/
public void setY(double vy) {
this.y = vy;
}
/** Afficher le point. */
public void afficher() {
System.out.print("(" + this.x + ", " + this.y + ")");
}
/**
* Dessiner sur un écran le point.
* @param canvas Écran sur lequel on dessine
*/
public void dessiner(Afficheur canvas) {
canvas.dessinerPoint(this.x, this.y, this.couleur);
}
/** Distance par rapport à un autre point.
* @param autre l'autre point
* @return distance entre this et autre
*/
public double distance(Point autre) {
return Math.sqrt(Math.pow(autre.x - this.x, 2)
+ Math.pow(autre.y - this.y, 2));
}
/** Translater le point.
* @param dx déplacement suivant l'axe des X
* @param dy déplacement suivant l'axe des Y
*/
public void translater(double dx, double dy) {
this.x += dx;
this.y += dy;
}
// Gestion de la couleur
/** Obtenir la couleur du point.
* @return la couleur du point
*/
public Color getCouleur() {
return this.couleur;
}
/** Changer la couleur du point.
* @param nouvelleCouleur nouvelle couleur
*/
public void setCouleur(Color nouvelleCouleur) {
this.couleur = nouvelleCouleur;
}
}

89
TP04/Segment.java Normal file
View file

@ -0,0 +1,89 @@
import java.awt.Color;
import afficheur.Afficheur;
/** Un segment est défini pas ses deux points qui constituent ses
* extrémités. Un segment peut être affiché et translaté.
*
* @author Xavier Crégut
* @version 1.9
*/
public class Segment {
private Point extremite1;
private Point extremite2;
private Color couleur;
/** Construire un Segment à partir de ses deux points extrémités.
* @param ext1 le premier point extrémité
* @param ext2 le deuxième point extrémité
*/
public Segment(Point ext1, Point ext2) {
this.extremite1 = ext1;
this.extremite2 = ext2;
this.couleur = Color.green;
}
/** Translater le segment.
* @param dx déplacement suivant l'axe des X
* @param dy déplacement suivant l'axe des Y
*/
public void translater(double dx, double dy) {
extremite1.translater(dx, dy);
extremite2.translater(dx, dy);
}
/** Obtenir la longueur du segment.
* @return la longueur du segment
*/
public double getLongueur() {
return this.extremite1.distance(this.extremite2);
}
/** @deprecated Cette méthode a changé de nom pour respecter
* la convention de nommage préconisée par Sun pour Java.
* @see #getLongueur()
*/
@Deprecated public double longueur() {
return this.extremite1.distance(this.extremite2);
}
/** Afficher le segment. Le segment est affiché sous la forme :
* <PRE>
* [extremite1-extremite2]
* </PRE>
*/
public void afficher() {
System.out.print("[");
this.extremite1.afficher();
System.out.print("-");
this.extremite2.afficher();
System.out.print("]");
}
/**
* Dessiner sur un écran le segment.
* @param canvas Écran sur lequel on dessine
*/
public void dessiner(Afficheur canvas) {
canvas.dessinerLigne(this.extremite1.getX(),
this.extremite1.getY(),
this.extremite2.getX(),
this.extremite2.getY(),
this.couleur);
}
/** Obtenir la couleur du segment.
* @return la couleur du segment
*/
public Color getCouleur() {
return this.couleur;
}
/** Changer la couleur du segment.
* @param nouvelleCouleur nouvelle couleur
*/
public void setCouleur(Color nouvelleCouleur) {
this.couleur = nouvelleCouleur;
}
}

BIN
TP04/afficheur.jar Normal file

Binary file not shown.

16
TP04/schema.svg Normal file
View file

@ -0,0 +1,16 @@
<?xml version='1.0'?>
<!-- Car l'axe des Y est inversé en SVG les y sont transformés en 10 - y
Toutes les coordonnées sont * 10
-->
<svg xmlns='http://www.w3.org/2000/svg' version="11" width="600" height="400">
<title>ExempleSchema1</title>
<desc>schemaSVG</desc>
<line x1="30" y1="80" x2="60" y2="10" stroke="rgb(0,255,0)"/>
<line x1="60" y1="10" x2="110" y2="60" stroke="rgb(0,255,0)"/>
<line x1="110" y1="60" x2="30" y2="80" stroke="rgb(0,255,0)"/>
<circle cx="66" cy="50" r="2" fill="rgb(0,255,0)"/>
<line x1="110" y1="140" x2="140" y2="70" stroke="rgb(0,255,0)"/>
<line x1="140" y1="70" x2="190" y2="120" stroke="rgb(0,255,0)"/>
<line x1="190" y1="120" x2="110" y2="140" stroke="rgb(0,255,0)"/>
<circle cx="106" cy="80" r="2" fill="rgb(0,255,0)"/>
</svg>

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

8
TP05/.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,8 @@
{
"java.project.referencedLibraries": [
"lib/**/*.jar",
"/usr/share/java/hamcrest-core.jar",
"/usr/share/java/junit.jar",
"afficheur.jar"
]
}

71
TP05/ExempleSchema1.java Normal file
View file

@ -0,0 +1,71 @@
import afficheur.Ecran;
/** Construire le schéma proposé dans le sujet de TP avec des points,
* et des segments.
*
* @author Xavier Crégut
* @version $Revision: 1.7 $
*/
public class ExempleSchema1 {
/** Construire le schéma et le manipuler.
* Le schéma est affiché.
* Ensuite, il est translaté et affiché de nouveau.
* @param args les arguments de la ligne de commande
*/
public static void main(String[] args)
{