Advertisement

计算机图形学学习(一) DDA算法讲解及matlab实现

阅读量:

文章目录

      • DDA算法
      • matlab小知识
      • matlab实现
      • 最后

DDA算法

我们都知道两点确定一条直线,所以假设(x1,y1),(x2,y2)为需要生成直线的两点,

分别求出x方向上的增量和y方向上的增量,记做dx和dy,即dx=x2-x1,dy=y2-y1

同时我们还知道直线的斜率k=(y2-y1)/(x2-x1),即k=dy/dx

我们可以发现得到dx、dy、k 之后直线上每一点的坐标都可由前一个点坐标推算出来。

如已知直线y=2x上的点(1,2),dx=0.1,求(1,2)的下一个点
∵ y=kx,即y=2x
且x=1+dx=1.1
∴ x为1.1的纵坐标为2.2,即该点为(1.1,2.2)

另外,我们求出dx和dy的最大值,作为前进方向,按上述方法把所有求出的点取整后画出
,最终生成的图案就是一条直线

matlab小知识

复制代码
    scatter(2,3,'.')
    
    
      
    

画一个点
在这里插入图片描述

复制代码
    grid on
    
    
      
    

生成背景图中的网格

复制代码
    grid minor
    
    
      
    

生成背景图中的小网格
在这里插入图片描述

复制代码
    round(x)
    
    
      
    

对x四舍五入取整

复制代码
    hold on
    
    
      
    

维持之前画的图像不消失(因为我们是一个一个点画上去的,要保留之前的图像才行)

复制代码
    hold off
    
    
      
    

在这之后就不保留图像了,如果这之后还有图像就只显示这之后的(与end类似)

matlab实现

复制代码
    function DDA(x1,y1,x2,y2,color)
    
    dx=(x2-x1);
    dy=(y2-y1);
    
    step=max(abs(dx),abs(dy));
    
    deltax=dx/step;
    deltay=dy/step;
    
    x=x1;
    y=y1;
    hold on
    for i=1:step
    scatter(round(x),round(y),'.',color)
    x=x+deltax;
    y=y+deltay;
    end
    plot([x1-20,x2-20],[y1-20,y2-20])
    grid minor
    hold off
    end
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

上方为直接绘出图像,下方为DDA生成的直线
在这里插入图片描述

最后

可以关注一下我的公众号,最近开始写公众号,我会在上面分享一些资源和发布一些上发布不了的干货
在这里插入图片描述

点个关注是对博主最大的支持

全部评论 (0)

还没有任何评论哟~