数字微分分析仪方法DDA算法

数字微分分析仪方法是一种线段扫描转换算法。在一个坐标轴上以单位间隔对线段取样,从而确定

上最靠近线路径的对应整数值。

本质是对

y=mx+b

的计算

源码实现:

inline int round(const float a) { return int (a+0.5);} //浮点数 , 四舍五入取整

void LineDDA(int x0, int y0, int xEnd, int yEnd)

{

int dx = xEnd - x0, dy = yEnd - y0, steps, k;

float xIncrement, yIncrement, x = x0, y = y0;

if(fabs(dx) > fabs(dy)) //离散化,取可分的最大步数

steps = fabs(dx);

else

steps = fabs(dy);

xIncrement = float (dx)/float (steps); //计算x,y每步增量

yIncrement = float (dy)/float (steps);

setPixel(rount(x), round(y)); //设置对应像素位置

for(k=0; k<steps; k++){ //循环画点

x += xIncrement;

y += yIncrement;

setPixel(rount(x), round(y));

}

}

 

优点:比直接使用直线方程计算的更快,因为无乘除运算

缺点:在浮点增量的连续迭加中,取整误差的积累使得较长线段所计算的像素位置偏离实际线段。且该过程中的取整操作和浮点运算操作仍然非常耗时。

改进:通过将增量m和1/m分离成整数和小数部分,将所有的操作全部转化为整数运算从而提高性能。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值