You are on page 1of 42

Input/Output

Programmering
http://tinyurl.com/programmeringDT2012
F
orelasning 6

Ver
onica Gaspes
www2.hh.se/staff/vero
www2.hh.se/staff/vero/programmering

Center for Research on Embedded Systems


IDE-sektionen

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

APIn for StdDraw - del 1

Input/Output

APIn for StdDraw - del 2

Input/Output

50 linjer

Input/Output

Kommandon till StdDraw


M
anga linjer
public class Lines{
public static void main(String[] cmdLn){
int n = Integer.parseInt(cmdLn[0]);
StdDraw.setXscale(0,n);
StdDraw.setYscale(0,n);
for(int i = 1; i<=n; i++){
StdDraw.line(i,0,0,n-i);
}
}
}
Observera
Man bestammer sjalv skalan f
or X och Y. I programmet ar bagge
0. . . N.

Input/Output

Kommandon till StdDraw


M
anga linjer
public class Lines{
public static void main(String[] cmdLn){
int n = Integer.parseInt(cmdLn[0]);
StdDraw.setXscale(0,n);
StdDraw.setYscale(0,n);
for(int i = 1; i<=n; i++){
StdDraw.line(i,0,0,n-i);
}
}
}
Observera
Man bestammer sjalv skalan f
or X och Y. I programmet ar bagge
0. . . N.

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

Man kan anvanda koordinaterna f


or att rita punkter. For att
bestamma X- och Y-skalan m
aste man ta reda p
a de yttersta
koordinaterna.
Koordinater for stader
Vi kan skriva ett program som laser koordinater fr
an standard
input (som vi sedan omdirigerar att komma fr
an en fil!). Vi
kommer att anvanda filer dar man redan har tagit reda p
a de
yttersta punkterna och dessa finns som de f
orsta 4 talen i filen.

Input/Output

Visualisering

Man kan anvanda koordinaterna f


or att rita punkter. For att
bestamma X- och Y-skalan m
aste man ta reda p
a de yttersta
koordinaterna.
Koordinater for stader
Vi kan skriva ett program som laser koordinater fr
an standard
input (som vi sedan omdirigerar att komma fr
an en fil!). Vi
kommer att anvanda filer dar man redan har tagit reda p
a de
yttersta punkterna och dessa finns som de f
orsta 4 talen i filen.

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

Lek med slumpen

Vi har en liksidig triangel med h


orn R (r
ott), G (gront) och B
(bl
att).
1
2

Borja vid R
Upprepa N g
anger:
1
2
3

Valj ett slumpmassigt h


orn
F
orflytta halvvags fr
an nuvarande punkt till hornet
Rita en punkt i h
ornets farg.

Input/Output

Lek med slumpen

Vi har en liksidig triangel med h


orn R (r
ott), G (gront) och B
(bl
att).
1
2

Borja vid R
Upprepa N g
anger:
1
2
3

Valj ett slumpmassigt h


orn
F
orflytta halvvags fr
an nuvarande punkt till hornet
Rita en punkt i h
ornets farg.

Input/Output

Lek med slumpen

Vi har en liksidig triangel med h


orn R (r
ott), G (gront) och B
(bl
att).
1
2

Borja vid R
Upprepa N g
anger:
1
2
3

Valj ett slumpmassigt h


orn
F
orflytta halvvags fr
an nuvarande punkt till hornet
Rita en punkt i h
ornets farg.

Input/Output

Lek med slumpen

Vi har en liksidig triangel med h


orn R (r
ott), G (gront) och B
(bl
att).
1
2

Borja vid R
Upprepa N g
anger:
1
2
3

Valj ett slumpmassigt h


orn
F
orflytta halvvags fr
an nuvarande punkt till hornet
Rita en punkt i h
ornets farg.

Input/Output

Lek med slumpen

Vi har en liksidig triangel med h


orn R (r
ott), G (gront) och B
(bl
att).
1
2

Borja vid R
Upprepa N g
anger:
1
2
3

Valj ett slumpmassigt h


orn
F
orflytta halvvags fr
an nuvarande punkt till hornet
Rita en punkt i h
ornets farg.

Input/Output

Lek med slumpen

Vi har en liksidig triangel med h


orn R (r
ott), G (gront) och B
(bl
att).
1
2

Borja vid R
Upprepa N g
anger:
1
2
3

Valj ett slumpmassigt h


orn
F
orflytta halvvags fr
an nuvarande punkt till hornet
Rita en punkt i h
ornets farg.

Input/Output

Lek med slumpen, efter n


agra drag

Input/Output

Lek med slumpen


public class Chaos {
public static void main(String[] cmdLn) {
int T = Integer.parseInt(cmdLn[0]);
double[] cx = { 0.000, 1.000, 0.500 };
double[] cy = { 0.000, 0.000, 0.866 };
double x = 0.0, y = 0.0;
int r;
for (int t = 0; t < T; t++) {
r = (int) (Math.random() * 3);
x = (x + cx[r]) / 2.0;
y = (y + cy[r]) / 2.0;
StdDraw.point(x, y);
}
}
}

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);
} }

You might also like