| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 856 人关注过本帖
标题:求高手帮忙把DDA算法在VC下实现
只看楼主 加入收藏
yuye851029
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-9-18
收藏
 问题点数:0 回复次数:2 
求高手帮忙把DDA算法在VC下实现
直线地算法:
DDA算法:
       数值微分法即DDA法(Digital Differerntial Analyzer),这是一种基于直线的微分方程来生成直线地方法。
设(x1,y1)和(x2,y2)分别为所求直线的端点坐标,由直线的微分方程得:
dy/dx=直线地斜率   即△y/△x=(y2-y1)/(x2-x1)                       (1)
可通过计算由x方向的增量△x引起y的改变来生成直线。
由y(i+1)=y(i)+△y  (y(i)为直线上某步的初值)
    y(i+1)=y(i)+(y2-y1)/(x2-x1)*△x                              (2)
若设x(i+1)=x(i)+△x则由式(1)可得:
x(i+1)=x(i)+(x2-x1)/(y2-y1)*△ y                                   (3)
本算法的基本思想是:选定x2-x1和y2-y1中较大者作为步进方向(假设x2-x1较大),取该方向上的△x为一个像素单位步长,即x每次递增一个像素,然后利用(2)式计算相应的y值,把每次计算出的(x(i+1),y(i+1)经取整后顺序输出到显示器,则得到光栅化后的直线。
DDA-line (x1,y1,x2,y2)
Int x1,y1,x2,y2;
{                                    
real increx,increy,x,y;                        
int length,i;
if(abs(x2-x1)>abs(y2-y1))
length=abs(x2-x1);
else
length=abs(y2-y1);
increx=(x2-x1)/length;
inchs=(y2-y1)/length;
x=x1;
y=y1;
for(i=1;i<=length;i++)
{
Putpixel(round(x),round(y),1);
x=x+increx;
y=y+increy;
}
}
搜索更多相关主题的帖子: DDA 算法 
2008-05-15 08:04
lixuanalex
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2008-4-23
收藏
得分:0 
你不是已经实现了吗?
2008-05-15 10:38
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
楼主的编程思想只能实现求导后一阶导数是常数的情况吧。如果一阶导数不是常数,那么x(i),y(i)所绘制出来的线必不是直线。虽然不是直线,但这种想法可以画出一阶导数的曲线。不错不错。收藏啦。

我用VC++6我怕谁?
2008-05-15 10:52
快速回复:求高手帮忙把DDA算法在VC下实现
数据加载中...
 
   



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

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