Line and Curve Drawing Algorithms - PowerPoint PPT Presentation

About This Presentation
Title:

Line and Curve Drawing Algorithms

Description:

Line and Curve Drawing Algorithms. Line Drawing. y = m . x b. m ... Calculate next points and plot in each octant. */ while (circPt.x circPt.y) { circPt.x ... – PowerPoint PPT presentation

Number of Views:236
Avg rating:3.0/5.0
Slides: 25
Provided by: ICS73
Category:

less

Transcript and Presenter's Notes

Title: Line and Curve Drawing Algorithms


1
Line and Curve Drawing Algorithms
2
Line Drawing
mlt1
  • y m . x b
  • m (yend y0) / (xend x0)
  • b y0 m . x0

yend
y0
x0
xend
3
Line Drawing
mgt1
  • x (y b)/m
  • m (yend y0) / (xend x0)
  • b y0 m . x0

yend
y0
x0
xend
4
DDA Algorithm
  • if mlt1
  • xk1 xk 1
  • yk1 yk m
  • if mgt1
  • yk1 yk 1
  • xk1 xk 1/m

yend
y0
x0
xend
yend
y0
x0
xend
5
DDA Algorithm
  • include ltstdlib.hgt
  • include ltmath.hgt
  • inline int round (const float a) return int
    (a 0.5)
  • void lineDDA (int x0, int y0, int xEnd, int
    yEnd)
  • int dx xEnd - x0, dy yEnd - y0,
    steps, k
  • float xIncrement, yIncrement, x x0, y
    y0
  • if (fabs (dx) gt fabs (dy))
  • steps fabs (dx) / mlt1 /
  • else
  • steps fabs (dy) / mgt1 /
  • xIncrement float (dx) / float (steps)
  • yIncrement float (dy) / float (steps)
  • setPixel (round (x), round (y))
  • for (k 0 k lt steps k)

6
Bresenhams Line Algorithm
yk1
yk
xk
xk1
yk1
du
y
dl
yk
xk
xk1
7
Bresenhams Line Algorithm
  • include ltstdlib.hgt
  • include ltmath.hgt
  • / Bresenham line-drawing procedure for mlt1.0
    /
  • void lineBres (int x0, int y0, int xEnd, int
    yEnd)
  • int dx fabs(xEnd - x0),
  • dy fabs(yEnd - y0)
  • int p 2 dy - dx
  • int twoDy 2 dy,
  • twoDyMinusDx 2 (dy - dx)
  • int x, y
  • / Determine which endpoint to use as start
    position. /
  • if (x0 gt xEnd)
  • x xEnd
  • y yEnd
  • xEnd x0

else x x0 y y0
setPixel (x, y) while (x lt
xEnd) x if (p lt 0)
p twoDy else y
p twoDyMinusDx
setPixel (x, y)
8
Circle Drawing
  • Pythagorean Theorem
  • x2 y2 r2
  • (x-xc)2 (y-yc)2 r2
  • (xc-r) x (xcr)
  • y yc vr2 - (x-xc)2

(x, y)
r
yc
xc
9
Circle Drawing
change x
change y
10
Circle Drawing using polar coordinates
  • x xc r . cos ?
  • y yc r . sin ?
  • change ? with step size 1/r

(x, y)
r
?
(xc, yc)
11
Circle Drawing using polar coordinates
  • x xc r . cos ?
  • y yc r . sin ?
  • change ? with step size 1/r
  • use symmetry if ?gt450

(x, y)
r
?
(xc, yc)
(y, x)
(y, -x)
(x, y)
(-x, y)
450
(xc, yc)
12
Midpoint Circle Algorithm
  • f(x,y) x2 y2 - r2
  • lt0 if (x,y) is inside circle
  • f(x,y) 0 if (x,y) is on the circle
  • gt0 if (x,y) is outside circle
  • use symmetry if xgty

yk
yk-1/2
yk-1
xk
xk1
13
Midpoint Circle Algorithm
  • include ltGL/glut.hgt
  • class scrPt
  • public
  • GLint x, y
  • void setPixel (GLint x, GLint y)
  • glBegin (GL_POINTS)
  • glVertex2i (x, y)
  • glEnd ( )
  • void circleMidpoint (scrPt circCtr, GLint
    radius)
  • scrPt circPt
  • GLint p 1 - radius

/ Calculate next points and plot in each octant.
/ while (circPt.x lt circPt.y)
circPt.x if (p lt 0) p 2
circPt.x 1 else circPt.y--
p 2 (circPt.x - circPt.y) 1
circlePlotPoints (circCtr, circPt)
void circlePlotPoints (scrPt circCtr, scrPt
circPt) setPixel (circCtr.x circPt.x,
circCtr.y circPt.y) setPixel (circCtr.x -
circPt.x, circCtr.y circPt.y) setPixel
(circCtr.x circPt.x, circCtr.y - circPt.y)
setPixel (circCtr.x - circPt.x, circCtr.y -
circPt.y) setPixel (circCtr.x circPt.y,
circCtr.y circPt.x) setPixel (circCtr.x -
circPt.y, circCtr.y circPt.x) setPixel
(circCtr.x circPt.y, circCtr.y - circPt.x)
setPixel (circCtr.x - circPt.y, circCtr.y -
circPt.x)
14
OpenGL
  • include ltGL/glut.hgt // (or others,
    depending on the system in use)
  • void init (void)
  • glClearColor (1.0, 1.0, 1.0, 0.0) // Set
    display-window color to white.
  • glMatrixMode (GL_PROJECTION) // Set
    projection parameters.
  • gluOrtho2D (0.0, 200.0, 0.0, 150.0)
  • void lineSegment (void)
  • glClear (GL_COLOR_BUFFER_BIT) // Clear
    display window.
  • glColor3f (0.0, 0.0, 1.0) // Set line
    segment color to blue.
  • glBegin (GL_LINES)
  • glVertex2i (180, 15) // Specify
    line-segment geometry.
  • glVertex2i (10, 145)
  • glEnd ( )

15
OpenGL
  • Point Functions
  • glVertex( )
  • 2, 3, 4
  • i (integer)
  • s (short)
  • f (float)
  • d (double)
  • Ex
  • glBegin(GL_POINTS)
  • glVertex2i(50, 100)
  • glEnd()
  • int p1 50, 100
  • glBegin(GL_POINTS)
  • glVertex2iv(p1)
  • glEnd()

16
OpenGL
  • Line Functions
  • GL_LINES
  • GL_LINE_STRIP
  • GL_LINE_LOOP
  • Ex
  • glBegin(GL_LINES)
  • glVertex2iv(p1)
  • glVertex2iv(p2)
  • glEnd()

17
OpenGL
  • glBegin(GL_LINES) GL_LINES GL_LINE_STRIP
  • glVertex2iv(p1)
  • glVertex2iv(p2)
  • glVertex2iv(p3)
  • glVertex2iv(p4)
  • glVertex2iv(p5)
  • glEnd()
  • GL_LINE_LOOP

p3
p3
p5
p1
p1
p2
p2
p4
p4
p3
p1
p5
p2
p4
18
Antialiasing
No Antialiasing
Ideal
With Antialiasing
19
Antialiasing
No Antialiasing
With Antialiasing
20
Antialiasing
  • Supersampling

Count the number of subpixels that overlap the
line path. Set the intensity proportional to
this count.
21
Antialiasing
  • Supersampling

1
1
2
3x3 Virtual Pixels
(255, 159, 159)
2
2
4
1
1
2
Actual Screen Pixels
Example
22
Antialiasing
  • Area Sampling

Line is treated as a rectangle. Calculate the
overlap areas for pixels. Set intensity
proportional to the overlap areas.
80
25
23
Antialiasing
  • Pixel Sampling

Micropositioning Electron beam is shifted
1/2, 1/4, 3/4 of a pixel diameter.
24
Line Intensity differences
  • Change the line drawing algorithm
  • For horizontal and vertical lines use the lowest
    intensity
  • For 45o lines use the highest intensity
Write a Comment
User Comments (0)
About PowerShow.com