-
Notifications
You must be signed in to change notification settings - Fork 0
/
Plot2d.java
114 lines (88 loc) · 2.96 KB
/
Plot2d.java
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package project;
import java.awt.*;
import java.awt.geom.*;
import java.util.HashSet;
import java.util.Set;
import javax.swing.*;
@SuppressWarnings("serial")
public class Plot2d extends JPanel {
// Ensemble de points à afficher
Set <Point> points;
// Ensemble de lignes à afficher, une ligne est caractérisée par deux points représentant ses extremités.
Set <Ligne> lignes;
public Plot2d(Set <Point> points, Set <Ligne> lignes) {
super();
setBackground(Color.white);
System.out.println("contruction plot");
this.points = points; System.out.println(points.toString());
this.lignes = lignes; System.out.println(lignes.toString());
}
public Plot2d(Set <Point> points) {
super();
setBackground(Color.white);
this.points = points;
this.lignes = new HashSet<Ligne>();
}
final int PAD = 20;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
int w = getWidth();
int h = getHeight();
// Draw ordinate
g2.draw(new Line2D.Double(PAD, PAD, PAD, h-PAD));
// Draw abcissa.
g2.draw(new Line2D.Double(PAD, h-PAD, w-PAD, h-PAD));
double xInc = (double)(w - 2*PAD)/(getMaxx());
double scale = (double)(h - 2*PAD)/getMaxy();
g2.setPaint(Color.black);
// Affichage des points
for (Point p : points){
double x = PAD + p.getx()*xInc;
double y = h - PAD - scale*p.gety();
g2.fill(new Ellipse2D.Double(x-2, y-2, 4, 4));
g2.drawString(p.toString(), (int) (x-xInc/2.0), (int) (y-3));
}
// Affichage des lignes
for (Ligne l : lignes){
double x1 = PAD + l.getp1().getx()*xInc;
double y1 = h - PAD - scale*l.getp1().gety();
double x2 = PAD + l.getp2().getx()*xInc;
double y2 = h - PAD - scale*l.getp2().gety();
g2.draw(new Line2D.Double(x1,y1,x2,y2));
};
}
private double getMaxx() {
double max = 0;
for (Point p : points){if (p.getx()>max) max = p.getx();};
return max;
}
private double getMaxy() {
double max = 0;
for (Point p : points){if (p.gety()>max) max = p.gety();};
return max;
}
public static void main(String[] args) {
// EXEMPLE d'UTILISATION DE LA CLASSE
// Création frame
JFrame f = new JFrame();
f.setTitle("Algorithmique avancée - Visualiseur points et lignes brisées");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Création des points
Set <Point> points = new HashSet<Point>();
// Les points peuvent être obtenus par lecture d'un fichier de données par :
Set <Point> points_lus ;
//points_lus = Parser.recuperePoints();
// Création des lignes composanr la ligne brisée (A VOUS DE JOUER pour trouver la meilleure approximation)
// Encore une fois, les structues données ici sont à adapter à votre programme.
Set <Ligne> lignes = new HashSet<Ligne>();
f.add(new Plot2d(points,lignes));
// si pas de ligne à afficher :
//f.add(new Plot2d(points));
f.setSize(500,500);
f.setLocation(200,200);
f.setVisible(true);
}
}