Stacks and Queues

Download Report

Transcript Stacks and Queues

Point & Line Generation
Introduction
Computer Graphics & Its application
Types of computer graphics
Graphic display : random Scan & Raster Scan display
Frame buffer and video Controller
Points & Lines , line Drawing Algorithm
Circle Generation algorithm
Mid point circle generation algorithm
Parallel version of these algorithm
Line
Based on slope-intercept
algorithm from algebra:
y = mx + b
Simple approach:
increment x, solve for y
Floating point arithmetic
required
DDA algorithm
• DDA = Digital Differential Analyser
– finite differences
• Treat line as parametric equation in t :
Start point - ( x1 , y1 )
End point - ( x2 , y2 )
x(t )  x1  t ( x2  x1 )
y(t )  y1  t ( y2  y1 )
DDA Algorithm
• Start at t = 0
x(t )  x1  t ( x2  x1 )
y(t )  y1  t ( y2  y1 )
dx
dt
dy

dt
• At each step, increment t by dt
xnew  xold 
• Choose appropriate value for dt
ynew  yold
• Ensure no pixels are missed:
– Implies:
dy
dx
1
 1 and
dt
dt
• Set dt to maximum of dx and dy
DDA algorithm
line(int x1, int y1, int x2, int y2)
{
float x,y;
int dx = x2-x1, dy = y2-y1;
int n = max(abs(dx),abs(dy));
float dt = n, dxdt = dx/dt, dydt = dy/dt;
x = x1;
y = y1;
while( n-- ) {
point(round(x),round(y));
x += dxdt;
y += dydt;
}
}
DDA algo.
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Start.
Declare variables x,y,x1,y1,x2,y2,k,dx,dy,s,xi,yi and also declare
gdriver=DETECT,gmode.
Initialise the graphic mode with the path location in TC folder.
Input the two line end-points and store the left end-points in (x1,y1).
Load (x1,y1) into the frame buffer;that is,plot the first point.put x=x1,y=y1.
Calculate dx=x2-x1 and dy=y2-y1.
If abs(dx) > abs(dy), do s=abs(dx).
Otherwise s= abs(dy).
Then xi=dx/s and yi=dy/s.
Start from k=0 and continuing till k<s,the points will be
x=x+xi.
y=y+yi.
Place pixels using putpixel at points (x,y) in specified colour.
Close Graph.
Stop.
Bresenham’s line drawing algorithm
Bresenham’s line drawing algorithm
– Line drawing algorithm comparisons
– Circle drawing algorithms
• A simple technique
• The mid-point circle algorithm
J a c k
B r e s e n h a m
Concept
• Move across the x axis in unit intervals and at each step
choose between two different y coordinates
• For example, from position
(2, 3) we have to choose
between (3, 3) and (3, 4)
• We would like the point that
is closer to the original line
5
(xk+1, yk+1)
4
(xk, yk)
3
(xk+1, yk)
2
2
3
4
5
Concept: The Bresenham Line
Algorithm
• At sample position xk+1 the vertical separations from the
mathematical line are labelled dupper and dlower
yk+1
y
yk
dupp
er
dlower
xk+1
• The y coordinate on the mathematical line at xk+1 is:
y  m( xk  1)  b
Deriving The Bresenham Line
Algorithm (cont…)
• So, dupper and dlower are given as follows:
•
dlower  y  yk
 m( xk  1)  b  yk
and:
dupper  ( yk  1)  y
 yk  1  m( xk  1)  b
• We can use these to make a simple decision about which pixel is closer
to the mathematical line
Deriving The Bresenham Line
Algorithm (cont…)
• This simple decision is based on the difference between
the two pixel positions:
dlower  dupper  2m( xk  1)  2 yk  2b 1
• Let’s substitute m with ∆y/∆x where ∆x and
∆y are the differences between the end-points:
y
x(d lower  d upper )  x(2
( xk  1)  2 yk  2b  1)
x
 2y  xk  2x  yk  2y  x(2b 1)
 2y  xk  2x  yk  c
Deriving Algorithm (cont…)
• So, a decision parameter pk for the kth step along a
line is given by:
pk  x(dlower  dupper )
 2y  xk  2x  yk  c
• The sign of the decision parameter pk is the same as
that of
dlower – dupper
• If pk is negative, then we choose the lower pixel,
otherwise we choose the upper pixel
Deriving The Bresenham Line
Algorithm (cont…)
• Remember coordinate changes occur
along the x axis in unit steps so we can do
everything with integer calculations
• At step k+1 the decision parameter is given
as:
pk 1  2y  xk 1  2x  yk 1  c
• Subtracting pk from this we get:
pk 1  pk  2y( xk 1  xk )  2x( yk 1  yk )
Deriving The Bresenham
Line Algorithm (cont…)
• But, xk+1 is the same as xk+1 so:
pk 1  pk  2y  2x( yk 1  yk )
• where yk+1 - yk is either 0 or 1 depending
on the sign of pk
• The first decision parameter p0 is
evaluated at (x0, y0) is given as:
p0  2y  x
The Bresenham Line Algorithm
•
1.
BRESENHAM’S LINE DRAWING ALGORITHM
(for |m| < 1.0)
Input the two line end-points, storing the left end-point
in (x0, y0)
2.
Plot the point (x0, y0)
3.
Calculate the constants Δx, Δy, 2Δy, and (2Δy - 2Δx)
and get the first value for the decision parameter as:
p0  2y  x
4.
At each xk along the line, starting at k = 0, perform the
following test. If pk < 0, the next point to plot is
(xk+1, yk) and:
pk 1  pk  2y
The Bresenham Line Algorithm
(cont…)
•
Otherwise, the next point to plot is (xk+1, yk+1) and:
pk 1  pk  2y  2x
5.
Repeat step 4 (Δx – 1) times
• The algorithm and derivation above assumes slopes are
less than 1. for other slopes we need to adjust the
algorithm slightly
Example
• Let’s have a go at this
• Let’s plot the line from (20, 10) to (30, 18)
• First off calculate all of the constants:
– Δx: 10
– Δy: 8
– 2Δy: 16
– 2Δy - 2Δx: -4
• Calculate the initial decision parameter p0:
– p0 = 2Δy – Δx = 6
Bresenham Example (cont…)
18
k
17
0
16
1
15
2
14
3
4
13
5
12
6
11
7
10
8
20
21
22
23 24
25
26
27
28
29
30
9
pk
(xk+1,yk+1)