Bresenham畫線算法。
[初級版]
?1
void
?Bresenham_line(HDC
&
?hdc)
?2
{
?3
?????
char
?a[
20
];
?4
?????
double
?dx,dy;
?5
?????dx
=
abs(B.x
-
A.x);?dy
=
abs(B.y
-
A.y);
?6
?????
int
?tx
=
(B.x
-
A.x)
>=
0
?
?
?
1
:?
-
1
;
?7
?????
int
?ty
=
(B.y
-
A.y)
>=
0
?
?
?
1
:?
-
1
;
?8
?????
int
?tag
=
0
;
?9
?????
if
(dx?
<
?dy)
10
?????
{
11
??????????tag
=
1
;
12
??????????
double
?temp
=
A.x;?
//
x1,y1互換
13
??????????A.x
=
A.y;
14
??????????A.y
=
temp;
15
??????????temp
=
B.x;?
//
x2,y2互換
16
??????????B.x
=
B.y;
17
??????????B.y
=
temp;
18
??????????temp
=
dx;?
//
dx,dy互換
19
??????????dx
=
dy;
20
??????????dy
=
temp;
21
??????????temp
=
tx;?
//
tx,ty互換
22
??????????tx
=
ty;
23
??????????ty
=
temp;
24
?????}
25
?????
int
?curx
=
A.x;
26
?????
int
?cury
=
A.y;
27
?????
if
(tag)
28
?????
{
29
??????????SetPixel(hdc,cury,
600
-
curx,RGB(
0
,
0
,
0
));
30
??????????sprintf(a,
"
A(%d,%d)
"
,cury,curx);
31
??????????TextOut(hdc,cury,
600
-
curx,a,strlen(a));
32
?????}
33
?????
else
34
?????
{
35
??????????SetPixel(hdc,curx,
600
-
cury,RGB(
0
,
0
,
0
));
36
??????????sprintf(a,
"
A(%d,%d)
"
,curx,cury);
37
??????????TextOut(hdc,curx,
600
-
cury,a,strlen(a));
38
?????}
39
?????
double
?d
=
2
*
dy
-
dx;
40
?????
while
(cury
<=
B.y?
&&
?curx
<=
B.x)
41
????
{
42
?????????
if
(d
>=
0
)
43
?????????
{
44
??????????????d
=
d
+
2
*
(dy
-
dx);
45
??????????????cury
+=
ty;
46
?????????}
47
?????????
else
48
??????????????d
=
d
+
2
*
dy;
49
??????????????curx
+=
tx;
50
?????????
if
(tag)
51
??????????????SetPixel(hdc,cury,
600
-
curx,RGB(
0
,
0
,
0
));
52
?????????
else
53
??????????????SetPixel(hdc,curx,
600
-
cury,RGB(
0
,
0
,
0
));
54
????}
55
????
if
(tag)
56
????
{
57
????????SetPixel(hdc,cury,
600
-
curx,RGB(
0
,
0
,
0
));
58
????????sprintf(a,
"
B(%d,%d)
"
,cury,curx);
59
????????TextOut(hdc,cury,
600
-
curx,a,strlen(a));
60
????}
61
????
else
62
????
{
63
????????SetPixel(hdc,curx,
600
-
cury,RGB(
0
,
0
,
0
));
64
????????sprintf(a,
"
B(%d,%d)
"
,curx,cury);
65
????????TextOut(hdc,curx,
600
-
cury,a,strlen(a));
66
????}
67
}

?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

64

65

66

67
