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被用來清除上一條畫線結果的。