nestedloops-part41 nested loops – part 4 barb ericson georgia institute of technology nov 2009

21
NestedLoops-part4 1 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

Upload: gwenda-goodwin

Post on 05-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 1

Nested Loops – part 4

Barb Ericson

Georgia Institute of Technology

Nov 2009

Page 2: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 2

Learning Goals

• Understand at a conceptual and practical level– How to copy one picture to another so that the

first picture is rotated 90 degrees left or right– How to simplify a problem – How to come up with an algorithm to solve a

problem– How to test the algorithm– How can you make a picture smaller or larger

Page 3: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 3

Left Rotation

• How can you copy one picture onto another so that the first picture is rotated to the left 90 degrees?

Page 4: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 4

Left Rotation

• First simplify the problem by thinking about how to copy when each pixel has just a number at it

• Can you come up with an algorithm for this?

1 2 3

4 5 6

3 6

2 5

1 4

0 1 2

0

1

0

0

1

1

2

Page 5: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 5

Left Rotation

• Try out your algorithm on another example– Does it work?

• Can you translate it into code?

5 6 7 8

1 2 3 4

0 1 2

0

1

0

0

1

1

2

3

3

Page 6: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 6

Left Rotation

• To rotate an image left 90 degrees still copy all the pixels– But they go to different

locations in the target• Column values become

row values• target x = source y• target y = source width

-1 – source x

1 2 3

4 5 6

3 6

2 5

1 4

0 1 2

0

1

0

0

1

1

2

Page 7: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 7

Left Rotation Algorithm

• Create the target picture object • Invoke the method on the target picture

– Create the source picture object– Loop through the source x

• Loop through the source y – Get the source pixel at the x and y values– Get the target pixel with the x equal the source y value

and the y equal the source picture width – 1 minus the source x

– Copy the color from the source pixel to the target pixel

Page 8: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 8

Left Rotation Methodpublic void copyKatieLeftRotation() { String sourceFile = FileChooser.getMediaPath("KatieFancy.jpg"); Picture sourcePicture = new Picture(sourceFile); Pixel sourcePixel = null; Pixel targetPixel = null; int targetX, targetY = 0; // loop through the columns for (int sourceX = 0; sourceX < sourcePicture.getWidth(); sourceX++) {

Page 9: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 9

Copy Katie Left Rotation // loop through the rows for (int sourceY = 0; sourceY < sourcePicture.getHeight(); sourceY++) { // set the target pixel color to the source pixel color sourcePixel = sourcePicture.getPixel(sourceX,sourceY); targetX = sourceY; targetY = sourcePicture.getWidth() – 1 – sourceX; targetPixel = this.getPixel(targetX,targetY); targetPixel.setColor(sourcePixel.getColor()); } } }

Page 10: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 10

Testing Left Rotation

String file = FileChooser.getMediaPath(

“7inX95in.jpg”);

Picture p = new Picture(file);

p.show();

p.copyKatieLeftRotation();

p.repaint();

Page 11: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 11

Challenge

• Create a general left rotation method that – Works on any picture

• Call the method on the picture to be rotated left

– Returns a new picture that is just the right size to hold the rotated picture

• Make the new picture's width the same as the old picture's height and the new picture's height the same as the old picture's width

Page 12: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 12

Scaling

• You can make a picture smaller– Faster to download on the web

• Increment the source x and y by a number larger than 1

– Don’t use all the source pixels in the target picture

• You can make a picture larger– Show more detail

• Copy the same source x and y to more than one target x and y

– Use source pixels more than once in target

Page 13: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 13

Scaling Down a Picture

• passionFlower.jpg is 640pixels wide and 480 pixels high

• If we copy every other pixel we will have a new picture with width (640 / 2 = 320) and height (480 / 2 = 240)

0 1 2 3

4 5 6 7

8 9 10 11

12 13 14 15

0 2

8 10

Page 14: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 14

Scaling Down Algorithm

• Create the target picture• Invoke the method on the target picture

– Create the source picture– Loop with source x starting at 0 and target x

starting at 0 as long as < source width• Increment the source x by 2 each time through the

loop, increment the target x by 1• Loop with source y starting at 0 and target y

starting at 0 as long as < source height– Increment the source y by 2 each time through the loop,

increment the target y by 1» Copy the color from the source to target pixel

Page 15: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 15

Scaling Down Methodpublic void copyFlowerSmaller() { Picture flowerPicture = new Picture( FileChooser.getMediaPath(“passionFlower.jpg")); Pixel sourcePixel = null; Pixel targetPixel = null;

// loop through the columns for (int sourceX = 0, targetX=0; sourceX < flowerPicture.getWidth(); sourceX+=2, targetX++) {

Page 16: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 16

Scaling Down Method - Continued // loop through the rows for (int sourceY=0, targetY=0; sourceY < flowerPicture.getHeight(); sourceY+=2, targetY++) { sourcePixel = flowerPicture.getPixel(sourceX,sourceY); targetPixel = this.getPixel(targetX,targetY); targetPixel.setColor(sourcePixel.getColor()); } } }

Page 17: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 17

Trying Copy Flower Smaller

• Create a new picture half the size of the original picture (+ 1 if odd size)– Picture p1 = new Picture(320,240);

• Copy the flower to the new picture – p1.copyFlowerSmaller();

• Show the result– p1.show();

Page 18: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 18

Thinking Through Scaling Up

• Copy each pixel in the source multiple times to the target– Source (0,0) Target (0,0)– Source (0,0) Target(1,0)– Source (1,0) Target(2,0)– Source (1,0) Target(3,0)– Source (2,0) Target(4,0)– Source (2,0) Target(5,0)– Source (0,0) Target(0,1)– Source (0,0) Target(1,1)

1 1 2 2 3 3

1 1 2 2 3 3

4 4 5 5 6 6

4 4 5 5 6 6

1 2 3

4 5 6

0

0

1

1 2

0

0

1

1

2

2

3

3

4 5

Page 19: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 19

Scaling Up Algorithm

• Create the target picture• Invoke the method on the target picture

– Create the source picture– Loop with source x starting at 0 and target x

starting at 0 as long as < source width• Increment the source x by 0.5 each time through

the loop, increment the target x by 1• Loop with source y starting at 0 and target y

starting at 0 as long as < source height– Increment the source y by 0.5 each time through the

loop, increment the target y by 1» Copy the color from the source to target pixel

Page 20: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 20

Scaling Up Exercise

• Write a method copyFlowerBigger to scale up the picture flower1.jpg when you copy it to 640x480.jpg

• Save the result to a file using– pictureObj.write(“file”);

Page 21: NestedLoops-part41 Nested Loops – part 4 Barb Ericson Georgia Institute of Technology Nov 2009

NestedLoops-part4 21

Summary

• To copy one picture to another with the first picture rotated – You need to change the targetX and targetY

• You should simplify a problem– And try to solve it by hand– Then come up with an algorithm for solving it– And then try it on another example

• To scale a picture down use every other pixel– To scale a picture up use every pixel more than once