La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

© Sofia ZAIDENBERGCNRS Mai 2007 1 Interfaces Graphiques Tracer une fonction y = f(x) avec JAVA 2D.

Présentations similaires


Présentation au sujet: "© Sofia ZAIDENBERGCNRS Mai 2007 1 Interfaces Graphiques Tracer une fonction y = f(x) avec JAVA 2D."— Transcription de la présentation:

1 © Sofia ZAIDENBERGCNRS Mai 2007 1 Interfaces Graphiques Tracer une fonction y = f(x) avec JAVA 2D

2 © Sofia ZAIDENBERGCNRS Mai 2007 2 Java 2D Afficher la courbe d’une fonction dans un fenêtre (un JPanel ou un JComponent ) y x Espace utilisateur (« World Coordinate System ») Espace écran : (« Device Coordinate System ») F(x) = sin(x) x y Réel Non borné Entier Borné

3 © Sofia ZAIDENBERGCNRS Mai 2007 3 Java 2D Afficher la courbe d’une fonction dans une fenêtre (un JPanel ou un JComponent ) y x x y 1 Définir la région de l’espace utilisateur à afficher 2 Appliquer au coordonnées exprimées dans WCS une transformation vers DCS Espace utilisateur (« World Coordinate System ») F(x) = sin(x) Réel Non borné Espace écran : (« Device Coordinate System ») Entier Borné

4 © Sofia ZAIDENBERGCNRS Mai 2007 4 Java 2D l Définir la région de l'espace utilisateur à afficher y x x y xWmin yWmin xWmax yWmax.. Définition d’une fenêtre dans l’espace utilisateur : XWmin, YWmin coordonnées dans WCS du coin inférieur gauche de la fenêtre XWmax,YWmax coordonnées dans WCS du coin supérieur droit de la fenêtre WCS DCS

5 © Sofia ZAIDENBERGCNRS Mai 2007 5 Java 2D l Transformation coordonnées WCS  coordonnées DCS y x x y xWmin yWmin xWmax yWmax.... xw yw xd yd xw yw = T T dépend de xWin, yWmin, xWmax, yWmax et de ld (largeur) et hd (hauteur) de la région d’affichage ld hd WCS DCS

6 © Sofia ZAIDENBERGCNRS Mai 2007 6 Java 2D l Transformation coordonnées WCS  coordonnées DCS y x x y xWmin yWmin xWmax yWmax.... xw yw xd yd xw yw = T ld hd WCS DCS.. xWmin yWmin 0 hd T xWmax yWmax ld 0 T

7 © Sofia ZAIDENBERGCNRS Mai 2007 7 Java 2D l Transformation coordonnées WCS  coordonnées DCS y x x y xWmin yWmin xWmax yWmax.... xw yw xd yd xw yw = T ld hd WCS DCS xw - xWmin lw xd ld = Les proportions doivent être conservées : La position relative de (xd,yd) par rapport à la région d’affichage doit être la même que la position relative de (xw,xw) par rapport à la fenêtre utilisateur yd hd yWmax - yw hw = hw =(yWmax – yWmin) lw =(xWmax – xWmin)

8 © Sofia ZAIDENBERGCNRS Mai 2007 8 Java 2D l Transformation coordonnées WCS  coordonnées DCS y x x y xWmin yWmin xWmax yWmax.... xw yw xd yd xw yw = T ld hd WCS DCS xd ld xw - xWmin lw = yd hd yWmax - yw hw = xd = xw * - xWmin * ld lw hd hw yd = - yw * + yWmax * hd hw homothétie translation ld lw hd hw - 0 0 10 0 ld lw - xWmin * hd hw yWmax * xw yw 1 xd yd 1 = * T

9 © Sofia ZAIDENBERGCNRS Mai 2007 9 Java 2D l Transformation coordonnées WCS  coordonnées DCS y x x y xWmin yWmin xWmax yWmax.... xw yw xd yd ld hd WCS DCS.. ld lw hd hw - 0 0 10 0 ld lw - xWmin * hd hw yWmax * xWmin yWmin 1 0 hd 1 = * ld lw hd hw - 0 0 10 0 ld lw - xWmin * hd hw yWmax * ld 0 1 = xWmax yWmax 1 *

10 © Sofia ZAIDENBERGCNRS Mai 2007 10 Java 2D l Transformation WCS  DCS : prise en charge par Java2D public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; int ld = this.getWidth(); int hd = this.getEight(); double lw = xWmax - xWmin;... double m00 = ld / lw;... AffineTransform t = new AffineTransform( m00,0.0,0.0, m11,m02,m12); g2.transform(t);... g2.setStroke(new BasicStroke(0.0f));... g2.draw(aShape); } ld lw hd hw - 0 0 10 0 ld lw - xWmin * hd hw yWmax * xw yw 1 xd yd 1 = * T [ x'] = [ m00 m01 m02 ] [ x ] = [ m00x + m01y + m02 ] [ y'] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ] [ 1 ] = [ 0 0 1 ] [ 1 ] = [ 1 ] T définie par un objet java.awt.AffineTransform Cette transformation est combinée à la transformation courante maintenue par le contexte graphique Les coordonnées des primitives graphiques (« Shape ») sont ensuite exprimées dans WCS et seront automatiquement transformée lors du rendu.

11 © Sofia ZAIDENBERGCNRS Mai 2007 11 Java 2D public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; int ld = this.getWidth(); int hd = this.getWidth(); double lw = xWmax - xWmin;... double m00 = ld / lw;... AffineTransform t = new AffineTransform( m00,0.0,0.0, m11,m02,m12); g2.transform(t); g2.setStroke(new BasicStroke(0.0f)); } l Échantillonnage de la courbe for (double x = xWmin; x <= xWmax; x += pasX) { tracer segment (x,f(x)) (x + pasX, f(x + pasX); } l La courbe va être approximée par des segments de droite. l Prendre garde de ne pas tracer des primitives géométriques trop petites ( < 1 pixel) l Le pas d’échantillonnage doit être fixé en fonction des dimension de l’espace d’affichage double pasX = lw / ld * 3.0;


Télécharger ppt "© Sofia ZAIDENBERGCNRS Mai 2007 1 Interfaces Graphiques Tracer une fonction y = f(x) avec JAVA 2D."

Présentations similaires


Annonces Google