Documente Academic
Documente Profesional
Documente Cultură
Sofia ZAIDENBERG
CNRS
Mai 2007
Java 2D
y
F(x) = sin(x)
Espace cran :
( Device Coordinate System )
Espace utilisateur
( World Coordinate System )
Entier
Born
Rel
Non born
Sofia ZAIDENBERG
CNRS
Mai 2007
Java 2D
Afficher la courbe dune fonction dans une fentre (un JPanel ou un JComponent)
y
x
y
F(x) = sin(x)
Espace cran :
( Device Coordinate System )
Espace utilisateur
( World Coordinate System )
1
Appliquer au coordonnes
exprimes dans WCS une
transformation vers DCS
Rel
Non born
Sofia ZAIDENBERG
CNRS
Entier
Born
Mai 2007
Java 2D
xWmax
yWmax
.
xWmin
yWmin
y
DCS
WCS
Dfinition dune fentre dans lespace utilisateur :
XWmin, YWmin coordonnes dans WCS du coin infrieur gauche de la fentre
XWmax,YWmax coordonnes dans WCS du coin suprieur droit de la fentre
Sofia ZAIDENBERG
CNRS
Mai 2007
Java 2D
xWmax
yWmax
xw
yw
xd
yd
hd
.
xWmin
yWmin
y
xd
yd
WCS
ld
= T xw
yw
DCS
T dpend de
xWin, yWmin, xWmax, yWmax
et de
ld (largeur) et hd (hauteur)
de la rgion daffichage
Sofia ZAIDENBERG
CNRS
Mai 2007
Java 2D
xWmax
yWmax
xw
yw
.
x
xd
yd
hd
xWmin
yWmin
y
xd
yd
WCS
xWmin
yWmin
0
hd
xWmax
yWmax
ld
0
Sofia ZAIDENBERG
ld
= T xw
yw
CNRS
Mai 2007
DCS
Java 2D
xWmax
yWmax
xw
yw
xd
yd
hd
.
xWmin
yWmin
y
xd
yd
WCS
xd
ld
yd
hd
ld
= T xw
yw
xw - xWmin
DCS
lw =(xWmax xWmin)
lw
yWmax - yw
=
Sofia ZAIDENBERG
hw =(yWmax yWmin)
hw
CNRS
Mai 2007
Java 2D
xWmax
yWmax
xw
yw
xd
yd
hd
.
xWmin
yWmin
y
xd
yd
WCS
ld
= T xw
yw
DCS
T
xd
ld
yd
hd
xw - xWmin
lw
yWmax - yw
hw
ld
xd = xw *
lw
- xWmin *
ld
lw
hd
yd = - yw *
hw
ld
xd
+ yWmax *
homothtie
hd
yd
ld
0
lw
=
0
hd
-
hw
1
translation
Sofia ZAIDENBERG
CNRS
0
Mai 2007
hw
0
- xWmin *
yWmax *
lw
hd
xw
yw
hw
1
1
8
Java 2D
xWmax
yWmax
xw
yw
xd
yd
hd
xWmin
yWmin
ld
DCS
WCS
ld
0
hd
1
lw
=
0
0
ld
ld
hd
-
hw
0
- xWmin *
yWmax *
lw
hd
xWmin
ld
yWmin
lw
=
0
hw
1
Sofia ZAIDENBERG
1
CNRS
ld
0
hd
-
hw
0
Mai 2007
- xWmin *
yWmax *
xWmax
lw
hd
yWmax
hw
1
Java 2D
ld
xd
yd
ld
0
lw
0
0
hd
hw
0
- xWmin *
yWmax *
lw
hd
xw
super.paintComponent(g);
yw
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);
hw
m01
m11
0
CNRS
g2.transform(t);
...
g2.setStroke(new BasicStroke(0.0f));
...
g2.draw(aShape);
Mai 2007
10
Java 2D
public void paintComponent(Graphics g) {
super.paintComponent(g);
chantillonnage de la courbe
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));
double pasX = lw / ld * 3.0;
for (double x = xWmin; x <= xWmax; x += pasX) {
tracer segment (x,f(x)) (x + pasX, f(x + pasX);
}
}
Sofia ZAIDENBERG
CNRS
Mai 2007
11