Presentation is loading. Please wait.

Presentation is loading. Please wait.

Prof. Harriet Fell Fall 2011 Lecture 9 – September 26, 2011

Similar presentations


Presentation on theme: "Prof. Harriet Fell Fall 2011 Lecture 9 – September 26, 2011"— Presentation transcript:

1 Prof. Harriet Fell Fall 2011 Lecture 9 – September 26, 2011
CS 4300 Computer Graphics Prof. Harriet Fell Fall 2011 Lecture 9 – September 26, 2011 January 1, 2019

2 Today’s Topics Fill: Flood Boundary Fill vs. Polygon Fill
See Photoshop for Flood Fill 2D Polygon Fill January 1, 2019

3 Simple 2D Polygon an ordered sequence of line segments such that
each edge gi = (si, ei) is the segment from a start vertex si to an end vertex ei ei-1 = si for 0 < i ≤ n-1 and en-1 = s0 non-adjacent edges do not intersect the only intersection of adjacent edges is at their shared vertex 1/1/2019

4 Scan Line Polygon Fill January 1, 2019

5 Parity Check Draw a horizontal half-line from P to the right.
Count the number of times the half-line crosses an edge. 1 in 4 out 7 in 7 in January 1, 2019

6 Polygon Data Structure
edges xmin ymax 1/m (9, 6) 1 6 8/4 xmin = x value at lowest y ymax = highest y Why 1/m? (1, 2) If y = mx + b, x = (y-b)/m. x at y+1 = (y+1-b)/m = (y-b)/m + 1/m. January 1, 2019

7 Polygon Data Structure
13 12 11 10  e6 9 8 7  e4  e5 6  e3  e7  e8 5 4 3 2 1  e2  e1  e11 0  e10  e9 Edge Table (ET) has a list of edges for each scan line. 13 e6 10 e5 e3 e7 e4 e8 5 e9 e2 e11 e10 e1

8 Preprocessing the edges
For a closed polygon, there should be an even number of crossings at each scan line. We fill between each successive pair. count twice, once for each edge delete horizontal edges chop lowest pixel to only count once January 1, 2019

9 Polygon Data Structure after preprocessing
13 12 11 10  e6 9 8 7  e4  e5 6  e3  e7  e8 5 4 3 2 1  e2  e1  e11 0  e10  e9 11  e6 10 Edge Table (ET) has a list of edges for each scan line. 13 7  e3  e4  e5 6  e7  e8 e6 10 e5 e3 e7 e4 e8 5 e9 e2 e11 e11 e10 e1

10 The Algorithm Start with smallest nonempty y value in ET.
Initialize SLB (Scan Line Bucket) to nil. While current y ≤ top y value: Merge y bucket from ET into SLB; sort on xmin. Fill pixels between rounded pairs of x values in SLB. Remove edges from SLB whose ytop = current y. Increment xmin by 1/m for edges in SLB. Increment y by 1. January 1, 2019

11 Running the Algorithm ET e6 e5 e3 e7 e4 e8 e9 e2 e11 e10 11  e6
13 12 11  e6 10 9 8 7  e3  e4  e5 6  e7 ve8 5 4 3 2 1  e2  e11 0  e10  e9 xmin ymax 1/m e /5 e3 1/ /3 e /5 e e6 6 2/ /3 e /2 e e /8 e /4 e /3 Running the Algorithm 13 e6 10 e5 e3 e7 e4 e8 5 e9 e2 e11 e10 5 10 15

12 Running the Algorithm y=0 SCB e10 e6 11 10 1/4 4 -3/4  e5 e3 e7 e9
13 e6 11 10 1/4 4 -3/4 10 e5 e3 e7 e9 e4 e8 11 3/8 11 8 3/8 5 e9 e2 e11 e10 5 10 15 January 1, 2019

13 Running the Algorithm y=1 SLB e2 e6 2 1 3/5 6 -2/5  e5 e3 e7 e11 e4
13 e6 2 1 3/5 6 -2/5 10 e5 e3 e7 e11 e4 e8 6 6 2/3 4 2/3 5 e9 e10 e2 e11 9 1/2 10 1/4 4 -3/4 e10 e9 5 10 15 11 6/8 11 3/8 8 3/8 January 1, 2019

14 Running the Algorithm y=2 SLB e2 e6 1 3/5 1 1/5 6 -2/5  e5 e3 e7 e11
13 e6 1 3/5 1 1/5 6 -2/5 10 e5 e3 e7 e11 e4 e8 6 2/3 7 1/3 4 2/3 5 e9 e10 e2 e11 9 1/2 8 3/4 4 -3/4 e10 e9 5 10 15 11 6/8 12 1/8 8 3/8 January 1, 2019

15 Running the Algorithm y=3 SLB e2 e6 4/5 1 1/5 6 -2/5  e5 e3 e7 e11
13 e6 4/5 1 1/5 6 -2/5 10 e5 e3 e7 e11 e4 e8 7 1/3 8 4 2/3 5 e9 e10 e2 e11 8 8 3/4 4 -3/4 e10 e9 5 10 15 12 1/8 12 4/8 8 3/8 January 1, 2019

16 Running the Algorithm y=4 SLB e2 e6 4/5 6 -2/5  e5 e3 e7 e11 e4 e8 8
13 e6 4/5 6 -2/5 10 e5 e3 e7 e11 e4 e8 8 4 2/3 5 e9 e10 e2 e11 8 4 -3/4 e10 e9 5 10 15 12 4/8 8 3/8 Remove these edges. January 1, 2019

17 Running the Algorithm y=4 SLB e2 e6 2/5 4/5 6 -2/5  e5 e3 e7 e9 e4
13 e6 2/5 4/5 6 -2/5 10 e5 e3 e7 e9 e4 e8 12 7/8 12 4/8 8 3/8 5 e9 e11 and e10 are removed. e2 e11 e10 5 10 15 January 1, 2019

18 Running the Algorithm y=5 SLB e2 e6 2/5 6 -2/5  e5 e3 e7 e9 e4 e8
13 e6 2/5 6 -2/5 10 e5 e3 e7 e9 e4 e8 13 2/8 12 7/8 8 3/8 5 e9 e2 e11 e10 5 10 15 January 1, 2019

19 Running the Algorithm Remove this edge. y=6 SLB e2 e6 6 -2/5  e5 e3
13 e6 6 -2/5 10 e5 e3 e7 e7 e4 e8 10 9 1/2 10 -1/2 5 e9 e8 e2 e11 10 12 8 2 e10 e9 5 10 15 13 2/8 13 5/8 8 3/8 January 1, 2019

20 Running the Algorithm Add these edges. e3 1/3 12 1/3  e4 4 12 -2/5 
13 e6 e5 10 e5 4 13 e3 e7 e4 e8 y=7 SLB e7 5 9 1/2 10 -1/2 e9 e2 e11 e8 e10 12 8 2 5 10 15 e9 13 5/8 8 3/8

21 Non-Simple Polygons 1/1/2019

22 Even-odd Rule construct a ray r in an arbitrary direction from the test point p count number of intersections of r with the polygon. p is defined to be inside the poly if the intersection count is odd. 1/1/2019

23 Reasoning each time an edge is crossed, either switch from inside to outside or outside to inside but since poly is closed, know that ray r must end up outside this is the method we just applied 1/1/2019

24 Nonzero Rule construct a ray r as before
compute all intersections of r with the poly edges gi, but this time keep track of whether the edge crossed from left to right (i.e. si on left side of r and ei on right side of r) or right to left count +1 for left-to-right and –1 for right-to-left p is defined to be inside the poly if and only if (iff) final count is nonzero 1/1/2019

25 Reasoning consider sweeping a point q along the perimeter of the poly
take the integral of the orientation angle of the line segment from p to q turns out that, for one complete sweep of the polygon, the integrated winding angle will be an integer multiple of cover it) 1/1/2019

26 Intuition intuition: reasonable definition of inside-ness is to check if the poly “circled around” p in CCW direction different number times than in CW direction nonzero intersection test turns out to be a shortcut to compute (proof is a little subtle and we will not cover it) 1/1/2019

27 The Results Can be Different
1/1/2019


Download ppt "Prof. Harriet Fell Fall 2011 Lecture 9 – September 26, 2011"

Similar presentations


Ads by Google