DDA直线的生成算法:
[初级版]
1
POINT A
=
{
100
,
100
}
, B
=
{
200
,
200
}
;
2
void
dda_line(HDC
&
hdc)
3
{
4
double
length;
5
double
dx,dy;
6
double
x,y;
7
char
a[
20
];
8
9
if
(abs(B.x
-
A.x)
>=
abs(B.y
-
A.y))
10
length
=
abs(B.x
-
A.x);
11
else
12
length
=
abs(B.y
-
A.y);
13
14
dx
=
((B.x
-
A.x)
/
length);
15
dy
=
((B.y
-
A.y)
/
length);
16
17
x
=
A.x
+
0.5
;
18
y
=
A.y
+
0.5
;
19
sprintf(a,
"
A(%d,%d)
"
,
int
(x),
int
(y));
20
TextOut(hdc,
int
(x),
int
(y),a,
10
);
21
int
i
=
1
;
22
while
(i
<=
length)
23
{
24
SetPixel(hdc,
int
(x),
int
(y),RGB(
0
,
0
,
0
));
25
x
=
x
+
dx;
26
y
=
y
+
dy;
27
i
++
;
28
}
29
sprintf(a,
"
B(%d,%d)
"
,
int
(x),
int
(y));
30
TextOut(hdc,
int
(x),
int
(y),a,
10
);
31
return
;
32
}
33
看书上出来的一段DDA算法。实践出来了,拿上来记忆~~
[修改版]
1
void
dda_line(HDC
&
hdc, POINT A, POINT B,
int
color)
2
{
3
double
length;
4
double
dx,dy;
5
double
x,y;
6
if
(abs(B.x
-
A.x)
>=
abs(B.y
-
A.y))
7
length
=
abs(B.x
-
A.x);
8
else
9
length
=
abs(B.y
-
A.y);
10
11
dx
=
((B.x
-
A.x)
/
length);
12
dy
=
((B.y
-
A.y)
/
length);
13
14
x
=
A.x
+
0.5
;
15
y
=
A.y
+
0.5
;
16
int
i
=
1
;
17
while
(i
<=
length)
18
{
19
SetPixel(hdc,
int
(x),
int
(y), color);
20
x
=
x
+
dx;
21
y
=
y
+
dy;
22
i
++
;
23
}
24
return
;
25
}
26
为使算法更适用于各种编程方法,加入A和B的点参数,更加入颜色值color。在我的实际应用中,color被用来清除上一条画线结果的。