Professional Documents
Culture Documents
Lecture 6
Lecture 6
Programmering
http://tinyurl.com/programmeringDT2012
F
orelasning 6
Ver
onica Gaspes
www2.hh.se/staff/vero
www2.hh.se/staff/vero/programmering
Input/Output
Grafisk output
Vi skall titta p
a ett bibliotek f
or att
f
a program att producera grafisk
output.
Input/Output
Standard Draw
StdDraw
For att ha tillg
ang till biblioteket m
aste man ladda ner filen
StdDraw till arbetskatalogen.
Att anvanda StdDraw ar ganska enkelt. Man skall forestalla sig en
abstrakt ritanordning som kan rita linjer och punkter p
a en
2D-duk. Genom att anropa metoder i StdDraw kan v
ara program
f
a anordningen att rita p
a duken.
Till exempel
StdDraw.point(x,y);
StdDraw.line(x0,y0,x1,y1);
Input/Output
Standard Draw
StdDraw
For att ha tillg
ang till biblioteket m
aste man ladda ner filen
StdDraw till arbetskatalogen.
Att anvanda StdDraw ar ganska enkelt. Man skall forestalla sig en
abstrakt ritanordning som kan rita linjer och punkter p
a en
2D-duk. Genom att anropa metoder i StdDraw kan v
ara program
f
a anordningen att rita p
a duken.
Till exempel
StdDraw.point(x,y);
StdDraw.line(x0,y0,x1,y1);
Input/Output
Standard Draw
StdDraw
For att ha tillg
ang till biblioteket m
aste man ladda ner filen
StdDraw till arbetskatalogen.
Att anvanda StdDraw ar ganska enkelt. Man skall forestalla sig en
abstrakt ritanordning som kan rita linjer och punkter p
a en
2D-duk. Genom att anropa metoder i StdDraw kan v
ara program
f
a anordningen att rita p
a duken.
Till exempel
StdDraw.point(x,y);
StdDraw.line(x0,y0,x1,y1);
Input/Output
Input/Output
Input/Output
50 linjer
Input/Output
Input/Output
Input/Output
Visualisering
Man kan anvanda grafik f
or att visualisera stora mangder data.
Koordinater for stader
Man kan samla information om koordinater, till exempel:
1097038.8890
1103961.1110
1104677.7780
1108586.1110
1109713.8890
1110072.2230
1110088.8890
1110572.2230
...
245552.7780
247133.3330
247205.5560
249238.8890
250111.1110
254475.0000
254683.3330
254950.0000
Input/Output
Visualisering
Man kan anvanda grafik f
or att visualisera stora mangder data.
Koordinater for stader
Man kan samla information om koordinater, till exempel:
1097038.8890
1103961.1110
1104677.7780
1108586.1110
1109713.8890
1110072.2230
1110088.8890
1110572.2230
...
245552.7780
247133.3330
247205.5560
249238.8890
250111.1110
254475.0000
254683.3330
254950.0000
Input/Output
Visualisering
Input/Output
Visualisering
Input/Output
Visualisering
Kartan
public static void main(String[] cmdLn){
double x0 = StdIn.readDouble();
double y0 = StdIn.readDouble();
double x1 = StdIn.readDouble();
double y1 = StdIn.readDouble();
double x, y;
StdDraw.setXscale(x0, x1);
StdDraw.setYscale(y0, y1);
while (!StdIn.isEmpty()) {
x = StdIn.readDouble();
y = StdIn.readDouble();
StdDraw.point(x, y);
}
}
Input/Output
Kartan
Input/Output
Borja vid R
Upprepa N g
anger:
1
2
3
Input/Output
Borja vid R
Upprepa N g
anger:
1
2
3
Input/Output
Borja vid R
Upprepa N g
anger:
1
2
3
Input/Output
Borja vid R
Upprepa N g
anger:
1
2
3
Input/Output
Borja vid R
Upprepa N g
anger:
1
2
3
Input/Output
Borja vid R
Upprepa N g
anger:
1
2
3
Input/Output
Input/Output
Input/Output
Chaos 100?
Input/Output
Pennan
Farger
Man kan bestamma farg med StdDraw.setPenColor. Har ar
n
agra exempel:
StdDraw.setPenColor(StdDraw.RED);
StdDraw.setPenColor(StdDraw.GREEN);
StdDraw.setPenColor(StdDraw.BLUE);
Foljande farger finns: BLACK, BLUE, CYAN, DARK GRAY,
GRAY, GREEN, LIGHT GRAY, MAGENTA, ORANGE, PINK,
RED, WHITE, YELLOW.
Input/Output
Pennan
Storlek
Man kan bestama hur tjockt pennan skriver med
StdDraw.setPenRadius. Har ar n
agra exempel:
StdDraw.setPenRadius(0.5);
StdDraw.setPenRadius(0.002);
0.002 ar default.
Input/Output
Chaos 100?
Input/Output
Chaos 10000?
Input/Output
Animeringar
Animeringsloop
Rensa skarmen:
StdDraw.setPenColor(StdDraw.GRAY);
StdDraw.filledSquare(0, 0, 1.0);
(bakgrundsfarg, hela ytan!)
Flytta forem
alet.
Rita forem
alet.
Visa och pausa ett litet tag:
StdDraw.show(20);
(tiden i millisekunder)
Input/Output
Animeringar
Animeringsloop
Rensa skarmen:
StdDraw.setPenColor(StdDraw.GRAY);
StdDraw.filledSquare(0, 0, 1.0);
(bakgrundsfarg, hela ytan!)
Flytta forem
alet.
Rita forem
alet.
Visa och pausa ett litet tag:
StdDraw.show(20);
(tiden i millisekunder)
Input/Output
Animeringar
Animeringsloop
Rensa skarmen:
StdDraw.setPenColor(StdDraw.GRAY);
StdDraw.filledSquare(0, 0, 1.0);
(bakgrundsfarg, hela ytan!)
Flytta forem
alet.
Rita forem
alet.
Visa och pausa ett litet tag:
StdDraw.show(20);
(tiden i millisekunder)
Input/Output
Animeringar
Animeringsloop
Rensa skarmen:
StdDraw.setPenColor(StdDraw.GRAY);
StdDraw.filledSquare(0, 0, 1.0);
(bakgrundsfarg, hela ytan!)
Flytta forem
alet.
Rita forem
alet.
Visa och pausa ett litet tag:
StdDraw.show(20);
(tiden i millisekunder)
Input/Output
Animeringar
Animeringsloop
Rensa skarmen:
StdDraw.setPenColor(StdDraw.GRAY);
StdDraw.filledSquare(0, 0, 1.0);
(bakgrundsfarg, hela ytan!)
Flytta forem
alet.
Rita forem
alet.
Visa och pausa ett litet tag:
StdDraw.show(20);
(tiden i millisekunder)
Input/Output
Animeringar
Animeringsloop
Rensa skarmen:
StdDraw.setPenColor(StdDraw.GRAY);
StdDraw.filledSquare(0, 0, 1.0);
(bakgrundsfarg, hela ytan!)
Flytta forem
alet.
Rita forem
alet.
Visa och pausa ett litet tag:
StdDraw.show(20);
(tiden i millisekunder)
Input/Output
En studsboll
Bollen
Hur kan vi modellera en boll?
Var finns den? cx, cy
Hur stor ar den? radius
Hur ror den sig? vx, vy
Rita bollen
StdDraw.setPenColor(StdDraw.BLACK);
StdDraw.filledCircle(cx, cy, radius);
Flytta bollen
if (Math.abs(cx + vx) > 1.0 - radius) vx = -vx;
if (Math.abs(cy + vy) > 1.0 - radius) vy = -vy;
cx = cx + vx;
cy = cy + vy;
Input/Output
En studsboll
Bollen
Hur kan vi modellera en boll?
Var finns den? cx, cy
Hur stor ar den? radius
Hur ror den sig? vx, vy
Rita bollen
StdDraw.setPenColor(StdDraw.BLACK);
StdDraw.filledCircle(cx, cy, radius);
Flytta bollen
if (Math.abs(cx + vx) > 1.0 - radius) vx = -vx;
if (Math.abs(cy + vy) > 1.0 - radius) vy = -vy;
cx = cx + vx;
cy = cy + vy;
Input/Output
En studsboll
Bollen
Hur kan vi modellera en boll?
Var finns den? cx, cy
Hur stor ar den? radius
Hur ror den sig? vx, vy
Rita bollen
StdDraw.setPenColor(StdDraw.BLACK);
StdDraw.filledCircle(cx, cy, radius);
Flytta bollen
if (Math.abs(cx + vx) > 1.0 - radius) vx = -vx;
if (Math.abs(cy + vy) > 1.0 - radius) vy = -vy;
cx = cx + vx;
cy = cy + vy;
Input/Output
En studsboll
Bollen
Hur kan vi modellera en boll?
Var finns den? cx, cy
Hur stor ar den? radius
Hur ror den sig? vx, vy
Rita bollen
StdDraw.setPenColor(StdDraw.BLACK);
StdDraw.filledCircle(cx, cy, radius);
Flytta bollen
if (Math.abs(cx + vx) > 1.0 - radius) vx = -vx;
if (Math.abs(cy + vy) > 1.0 - radius) vy = -vy;
cx = cx + vx;
cy = cy + vy;
Input/Output
En studsboll
Bollen
Hur kan vi modellera en boll?
Var finns den? cx, cy
Hur stor ar den? radius
Hur ror den sig? vx, vy
Rita bollen
StdDraw.setPenColor(StdDraw.BLACK);
StdDraw.filledCircle(cx, cy, radius);
Flytta bollen
if (Math.abs(cx + vx) > 1.0 - radius) vx = -vx;
if (Math.abs(cy + vy) > 1.0 - radius) vy = -vy;
cx = cx + vx;
cy = cy + vy;
Input/Output
En studsboll
Bollen
Hur kan vi modellera en boll?
Var finns den? cx, cy
Hur stor ar den? radius
Hur ror den sig? vx, vy
Rita bollen
StdDraw.setPenColor(StdDraw.BLACK);
StdDraw.filledCircle(cx, cy, radius);
Flytta bollen
if (Math.abs(cx + vx) > 1.0 - radius) vx = -vx;
if (Math.abs(cy + vy) > 1.0 - radius) vy = -vy;
cx = cx + vx;
cy = cy + vy;
Input/Output
BouncingBall.java
public static void main(String[] args) {
StdDraw.setXscale(-1.0, 1.0);
StdDraw.setYscale(-1.0, 1.0);
double cx = 0.480, cy = 0.890;
double vx = 0.015, vy = 0.023;
double radius = 0.05;
while (true) {
StdDraw.setPenColor(StdDraw.GRAY);
StdDraw.filledSquare(0, 0, 1.0);
if (Math.abs(cx + vx) > 1.0 - radius) vx = -vx;
if (Math.abs(cy + vy) > 1.0 - radius) vy = -vy;
cx = cx + vx;
cy = cy + vy;
StdDraw.setPenColor(StdDraw.BLACK);
StdDraw.filledCircle(cx, cy, radius);
StdDraw.show(20);
} }