数值微分画线算法

 

线的生成——DDA算法|数值微分画线算法  

2010-06-11 21:25:35|  分类: 默认分类 |  标签: |字号 订阅

DDA称为数值微分画线算法,是直线生成算法中最简单的一种。原理相当简单,就是最直观的根据斜率的偏移程度,决定是以x为步进方向还是以y为步进方向。然后在相应的步进方向上,步进变量每次增加一个像素,而另一个相关坐标变量则为Y=kx+m(以x为步进变量为例,m为斜率).当斜率在-1到1之间是让X增长值为1,Y的增长值为K。当斜率大于1时。让Y增长值为1,X的增量为1/K。这样做的目的是让每次变化的值不能大于1。这样可以让像素点更加整齐。
这个程序对于我的意义在于:可以在VC中利用GDI的画点函数--- SetPixel来实现它

先根据两个坐标点~求出直线的斜率

 CPoint p1,p2; 
 p1.x=0;
 p1.y=0;
 p2.x=300;
 p2.y=400;//坐标点初始化
 double dx,dy,k,y,x;
 COLORREF rgg=RGB(0,0,0);  //黑色
 dx=p2.x -p1.x;
 dy=p2.y-p1.y;
 k=dy/dx;//求斜率
 if(fabs(k)<1)//当斜率在-1到1之间的时候
 {
  y=p1.y;
  for(x=p1.x;x<=p2.x;x++)//以x为增量
  {
   pDC->SetPixel(x,int(y+0.5),rgg);
   y=y+k;
  }
 }
 else//斜率大于1的时候
 {
  x=p1.x;
  for(y=p1.y;y<=p2.y;y++)//以Y为增量  //X的增量为1/K
  { 
      pDC->SetPixel(int(x+0.5),y,rgg); 

     x=x+1.0/k;
  }
 }  

  评论这张
转发至微博
转发至微博
1   分享到:         
阅读(906) | 评论(0) | 转载 (0) | 举报
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值