标题:请高手指点一下DDA直线算法
只看楼主
yuye851029
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-9-18
 问题点数:0 回复次数:3 
请高手指点一下DDA直线算法
小弟刚学,请高手指点一下以的DDA算法有没有错误,是否适合任意斜率以及在VC下怎么实现,谢谢!
DDA算法:
             Void dda(int x1,int y1,int x2,int y2)//直线DDA
              {
                   int k,I;
                   float x,y,dx,dy;
                   k=abs(x2-x1);
                   if(abs(y2-y1)>k) k=abs(y2-y1);
                   dx=float(x2-x1)/k;
                   dy=float(y2-y1)/k;
                   x=float(x1);
                   y=float(y1);
                   for(i=0;i<k;i++)
                   gl_Point(int (x+0.5),int(y+0.5));
                   x=x+dx;
                   y=y+dy;
                   }
搜索更多相关主题的帖子: DDA 算法 float 直线 int 
2008-05-01 09:37
风之舞鹤
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-6-2
得分:0 
任意斜率不可能这么简单!~~

2008-05-01 11:57
风之舞鹤
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2007-6-2
得分:0 
int drawline(int x0,int y0,int x1,int y1)
{
   
     int dx,dy,e,e1,e2,x,y;
     int m=0,m1,m2,temp;
    dx=abs(x1-x0);
    dy=abs(y1-y0);
    if(dy>dx)
    {
    temp=dx;
    dx=dy;
    dy=temp;
    }
    e=2*dy-dx;
    e1=2*dy;
    e2=2*(dy-dx);
    m1=(x1>=x0)?1:0;
    m2=(y1>=y0)?1:0;
    x=x0;
    y=y0;
    do
    {
     SetPixel(hDC, x, y, RGB(255, 0, 0));
    m?(m2?y++:y--):(m1?x++:x--);
    if(e<0)
    e+=e1;
    else
    {
    e+=e2;
    m?(m1?x++:x--):(m2?y++:y--);
    }
    }
    while(x<=x1);
    return 0;
这个是我们老师给的代码,要实现任意斜率,要判断x和y哪个是主变量,使主变量每次加1......

2008-05-01 12:00
yuye851029
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-9-18
得分:0 
谢谢
非常感谢
2008-05-01 12:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-211861-1-1.html




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

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