TanZek's 技术空间

勇往直前,专注于技术...

首页 新随笔 联系 聚合 管理
  7 Posts :: 19 Stories :: 13 Comments :: 0 Trackbacks

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 }
posted on 2006-10-07 06:40 TanZek 阅读(1282) 评论(1)  编辑 收藏 引用 所属分类: Subject-Study

评论

# re: 计算机图形学---Bresenham画线算法 2008-07-05 17:12 好哥
ujhlk 】





  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理