| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 349 人关注过本帖, 1 人收藏
标题:求助各位客官,DDA画直线程序?
只看楼主 加入收藏
世纪末的伦敦
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-3-10
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:1 
求助各位客官,DDA画直线程序?
请哪位大神给我一个DDA画直线程序,不胜感激!!!
搜索更多相关主题的帖子: 不胜感激 
2013-03-10 18:32
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:20 
百度了下,原来dda就是步进方法画函数下一点,由于在电脑中像素点是以+1或-1步进的,所以只要判断函数结果和当前结果差的绝对值是否大于1,大于则y=y+dy,否则x=x+dx,具体画直线的程序如下:
Private Type PointApi
  x As Long
  y As Long
End Type

Private Function GetLineNextPoint(startP As PointApi, endP As PointApi, curP As PointApi) As PointApi
  '已知直线的起点坐标startP,终点坐标endP,当前点坐标curP,计算下一点坐标,未做curP坐标不再线段上的判断
  Dim k As Single, b As Single, x As Long, y As Long
  'k用于存储斜率,b是坐标调整(直线方程为y=kx+b)
  Dim dx As Single, dy As Single    '用于存储步进方向(DDA中所说的微分)
  dx = endP.x - startP.x
  dy = endP.y - startP.y
  x = curP.x
  y = curP.y
  If dx <> 0 Then
    '有斜率的情况处理(斜率无穷大则另行处理)
    k = dy / dx    '计算斜率
    b = startP.y - k * startP.x '计算纵坐标调整值
    dx = dx / Abs(dx)
    If dy <> 0 Then
      dy = dy / Abs(dy)
    Else
      dy = 0
    End If
    '上述代码获取x、y坐标的步进方向(+1则坐标点前进,-1则坐标点后退)
    If Abs(y - (k * (x + dx) + b)) < 1 Then
      GetLineNextPoint.x = x + dx
      GetLineNextPoint.y = y
    Else
      GetLineNextPoint.x = x
      GetLineNextPoint.y = y + dy
    End If
    '上述判断代码得到下一点的坐标值
  Else
    '斜率为无穷大的情况,则下一点的坐标为y坐标加dy
    If dy <> 0 Then
      dy = dy / Abs(dy)
    Else
      dy = 0
    End If
    GetLineNextPoint.x = x
    GetLineNextPoint.y = y + dy
  End If
End Function

[ 本帖最后由 lowxiong 于 2013-3-11 16:27 编辑 ]
2013-03-11 16:24
快速回复:求助各位客官,DDA画直线程序?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018321 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved