midpoint algorithm

Give 2 points p1(x,y) and p2(x,y), find all pixels between 2 points for draw a line on the screen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
void (int x1, int y1, int x2, int y2)
{
if (x1 > x2)
{
swap(x1, x2);
swap(y1, y2);
}
int dx = x2 - x1, dy = y2 - y1;
int yi = 1;
if(dy<0)
{
yi = -1;
dy = -dy;
}
int d = 2 * dy - dx;
int y = y1;

for (int x = x1;x<= x2;++x)
{
FillCell(x, y);
if (d > 0)
{
y += yi;
d -= 2*dx;
}
d += 2*dy;
}
}
void DrawMPHigh(int x1, int y1, int x2, int y2)
{
if (y1 > y2)
{
swap(x1, x2);
swap(y1, y2);
}
int dx = x2 - x1, dy = y2 - y1;
int xi = 1;
if(dx<0)
{
xi = -1;
dx = -dx;
}
int d = 2 * dx - dy;
int x = x1;

for (int y = y1; y <= y2;++y)
{
FillCell(x, y);
if (d > 0)
{
x += xi;
d -= 2 * dy;
}
d += 2 * dx;
}
}
void DrawMidPoint(int x1, int y1, int x2, int y2)
{
if (abs(y2 - y1) < abs(x2 - x1))
DrawMPLow(x1, y1, x2, y2);
else
DrawMPHigh(x1, y1, x2, y2);
}