首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 等级考试 > 复习指导 >

二级C++实例

2009-02-13 
八个方向的画直线代码

    void CcircleDlg::Line(int x0, int y0, int x1,int y1, int color)
  {
  CDC *dc=GetDC();
  int dx = abs(x1 -x0);
  int dy =abs(y1-y0);
  int ix0=x0,iy0=y0,ix1=x1,iy1=y1,jx0=x0,jy0=y0,jx1=x1,jy1=y1;
  int dx2 = dx << 1;
  int dy2 = dy << 1;
  int e = dy2 - dx; // 决策量
  int half = (dx+1) >> 1;
  if(y1<y0)
  y1=2*y0-y1;//转化到第三象限
  if(x1<x0)
  x1=2*x0-x1;
  for (int i=0; i<=half; i++)
  {
  if(iy1<iy0)
  {
  jy0=2*iy0-y0;//再次转化回来
  jy1=2*iy0-y1;
  }
  else
  {
  jy1=y1;
  jy0=y0;
  }
  if(ix1<ix0)
  {
  jx0=2*ix0-x0;//再次转化回来
  jx1=2*ix0-x1;
  }
  else
  {
  jx0=x0;
  jx1=x1;
  }
  dc->SetPixel(jx0, jy0, color);
  dc->SetPixel(jx1, jy1, color);
  if (e > 0) // 当e>0时,始端y向加1,末端y向减1
  {
  y0++;
  y1--;
  e -= dx2;
  }
  //始端x向加1,末端x向减1
  x0++;
  x1--;
  e += dy2;
  }
  }

 

3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/

热点排行