当前位置:C++技术网 > 资讯 > mfc中用dda算法画线代码

mfc中用dda算法画线代码

更新时间:2016-09-23 22:36:41浏览次数:1+次

mfc中用dda算法画线,怎么样可以实现两个点的输入

C++技术网解答:

请参考文章:浅谈DDA算法,中点算法的实现过程

文章有源码可以参考,就不在此粘贴了。

以下从网上搜集到的可供参考的DDA算法的原理解释:

数值微分法即DDA法(Digital Differential Analyzer),是一种基于直线的微分方程来生成直线的方法。

一、直线DDA算法描述:

设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程得
1.dy/dx=(y2-y1)/(x2-x1)=△y/△x = m =直线的斜率

可通过计算由x方向的增量△x引起y的改变来生成直线:
2.xi+1=xi+△x
3.yi+1=yi+△y=yi+△x·m

也可通过计算由y方向的增量△y引起x的改变来生成直线:
4.yi+1=yi+△y
5.xi+1=xi+△x=xi+△y/m

2-5是递推的。

二、直线DDA算法思想:

    选定x2-x1和y2-y1中较大者作为步进方向(假设x2-x1较大),取该方向上的增量为一个象素单位(△x=1),然后利用式(2-1)计算另一个方向的增量(△y=△x·m=m)。通过递推公式(2-2)至(2-5),把每次计算出的(xi+1,yi+1)经取整后送到显示器输出,则得到扫描转换后的直线。
    之所以取x2-x1和y2-y1中较大者作为步进方向,是考虑沿着线段分布的象素应均匀,这在下图中可看出。
    另外,算法实现中还应注意直线的生成方向,以决定Δx及Δy是取正值还是负值。
mfc中用dda算法画线,怎么样可以实现两个点的输入
三、直线DDA算法实现:

1、已知直线的两端点坐标:(x1,y1),(x2,y2)
2、已知画线的颜色:color
3、计算两个方向的变化量:
dx=x2-x1
dy=y2-y1
4、求出两个方向最大变化量的绝对值:
steps=max(|dx|,|dy|)
5、计算两个方向的增量(考虑了生成方向):
xin=dx/steps
yin=dy/steps
6、设置初始象素坐标:x=x1,y=y1
7、用循环实现直线的绘制:
for(i=1;i<=steps;i++)
{
    putpixel(x,y,color);/*在(x,y)处,以color色画点*/
    x=x+xin;
    y=y+yin;
}