Salut,
j'aimerais savoir comment je fais pour dessiner en java un plan cartésien avec 2 axes X,Y pour pouvoir dessiner des points avec des coordonnées (x,y).
j'attends vos réponse et merci d'avance.
Salut,
j'aimerais savoir comment je fais pour dessiner en java un plan cartésien avec 2 axes X,Y pour pouvoir dessiner des points avec des coordonnées (x,y).
j'attends vos réponse et merci d'avance.
Bonjour,
je ne connais pas de librairie pour construire un plan cartésien en deux dimension, mais cela existe surement.
Autrement, ta construction va dépendre des outils mathématiques que tu souhaite utiliser.
N'importe quel Graphics avec des primitives de dessin ou un Graphics2D avec Java2D.
Voici un bout de code pour bien demarrer :
Petite precision cependant : en Java2D l'axe des Y est oriente vers le bas. Il te faudra donc penser a inverser les ordonnees des points des choses que tu dessines pour avoir un affichage correct.
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 public MyCanvas extends JComponent { /** * {@inheritDoc} */ @Override protected override paintComponent(Graphics g) { Dimension size = getSize(); Insets insets = getInsets(); int width = size.width - (insets.left + insets.right); int height = size.height - (insets.top + insets.bottom); Graphics2D g2d = (Graphics2D)g.create(insets.left, insets.top, width, height); try { g2d.translate(width/2, height/2); // L'origine du repere est desormais au centre de la zone de dessin. // si on dessine un truc en (0, 0) il apparait au centre de la zone. g2d.setColor(Color.RED); g2d.drawLine(0, -height/2, 0, height/2); g2d.setColor(Color.VIOLET); g2d.drawLine(-width/2, 0, width/2, 0); g2d.setColor(Color.BLACK); g2d.setStroke(new BasicStroke(2f)); g2d.drawLine(0, 0, 20, 0); g2d.drawLine(0, 0, 0, -20); // Voir precision ci-dessous. [...] } finally { g2d.dispose(); } } }
Cela influe egalement sur le sens du cercles trigonometrique et donc des angles.
note : getSize() retourne la taille actuelle du composant. getInsets() retourne les dimensions de sa bordure optionnelle (voir setBorder()) dans laquelle on evite generalement de dessiner.
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
merci bp pour vos réponses
c bon j'ai desiginé un plan cartésien avec des coordonnées X et Y. il affiche des ovales et des carrés ce que je voulais faire pour le moment, c'est faire une fonction qui permet de d'entrer les valeurs X et Y et d'une ovale et qui sélectionne ou mieux colorer juste les carrés qui sont à coté.
par exemple pour une ovale(200,400) il doit juste colorer ou sélectionner les carrées avec coordonnées X entre 150 et 250, et Y entre 300 et 500.
ou la fonction prend les valeurs X et Y de l'ovale et considère l'ovale comme un centre de cercle avec un rayon R (exemple R=100) et sélectionne ou colore juste les carrées qui se trouve à l'intérieure du cercle.
voici le code:
j'ai consiederé la classe fenetre avec :this.setSize(400, 500);
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 public class Panneau extends JPanel { public void paintComponent(Graphics g){ int x1 = 200; int y1 = 400; int x2 = 300; int y2 = 90; int x3 = 100; int y3 = 110; int x4 = 266; int y4 = 310; int x5 = 306; int y5 = 70; int x6 = 130; int y6 = 122; int x7 = 90; int y7 = 60; int x8 = 50; int y8 = 330; int x9 = 160; int y9 = 110; int x10 = 16; int y10= 133; int x11 = 199; int y11= 380; int x12 = 566; int y12= 65; System.out.println("largeur = " + this.getWidth() + ", longueur = " + this.getHeight()); System.out.println(" coordonnée de début d'affichage x1 = " + x1 + " y1 = " + y1); g.fillOval(x1, y1, 12, 12); g.fillOval(x2, y2, 12, 12); g.fillOval(x3, y3, 12, 12); g.fillRect(x4, y4, 12, 12); g.fillRect(x5, y5, 12, 12); g.fillRect(x6, y6, 12, 12); g.fillRect(x7, y7, 12, 12); g.fillRect(x8, y8, 12, 12); g.fillRect(x9, y9, 12, 12); g.fillRect(x10, y10, 12, 12); g.fillRect(x11, y11, 12, 12); g.fillRect(x12, y12, 12, 12); } }
mon plan cartésien.
j'attands vos réponses et merci d'avance.
Pourquoi ne pas créer 2 tableaux de int[12] tabX et tabY
ça ferait plus joli
et tu pourrais utiliser que 4 lignes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int[] tabX = {200,300,...} int[] tabY = {...} for(int i=0;i<3;i++){g.fillOval(tabX[i],tabY[i], 12, 12);} for(int i=3;i<12;i++){g.fillRect(tabX[i],tabY[i], 12, 12);}
Personnellement, j'utilise une classe "point" dont la seule fonction est de stocker les abscisses et les ordonnées (plus des couleurs si tu veux...). J'en fais un tableau (dynamique, c'est mieux) que la méthode graphique appelle.
Là, deux solutions : il faudra des int pour le graphique. Soit ils sont calculés en amont, avant d'être stockés dans le tableau, soit ils le sont après. En général, je multiplie ces valeurs (x, f(x)) par un nombre, puis je conserve sa valeur entière : ce multiplicateur est le "zoom" de la fonction. Puis j'ajoute (ou retranche) quelque chose aux x et y : c'est comment cadrer le dessin. Dans la méthode graphique, je ne fais tracer les points que s'ils rentrent dans la figure avec quelque chose du genre :
if (0<X && X< largeur de page && y ...) g.draw...
Ce sont des classes que l'on réemploie ensuite facilement d'un programme à l'autre.
C'est marrant il y a deja 1 interface et 3 classes points dans l'API.. Point, Point2D, Point2D.Float et Point2D.Double.
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Partager