我实施DDA(数字微分分析仪)算法的代码适用于绘制斜率小于45 o 的线条,但线条斜率超过45 < SUP> 0 。
它的行为类似于角度的虚线&gt; 45 0
代码
void dda(int x1,int y1,int x2,int y2)
{
float x,y,xinc,yinc,dx,dy;
int k,step;
dx = x2 - x1;
dy = y2 - y1;
step = abs(dx);
xinc = dx / step;
yinc = dy / step;
x = x1;
y = y1;
putpixel(x,y,63);
for(k=1;k<=step;k++)
{
x = x + xinc;
y = y + yinc;
putpixel(x,y,63);
}
}
这是DDA算法的缺点还是我的代码中有任何错误,请帮助我找出导致我的程序效率低下的原因。
感谢
答案 0 :(得分:2)
如果要绘制斜率为&gt;的行; 1,你必须迭代y值。这很自然,因为y方向上的步数多于x方向上的步数。
答案 1 :(得分:2)
考虑到具有正斜率的线,如果斜率小于或等于1,我们以x为单位进行采样......
...
对于斜率大于1的行,我们颠倒了x和y的作用......
所以,有你的答案。您需要有if
,检查斜率并将dx
或dy
修复为1.有关详细信息,请参阅上面的Wikipedia链接。
答案 2 :(得分:1)
不, DDA算法中没有这样的缺点,您应该使用以下代码,它一定会有效。
如果你使用 Bresenham的绘图算法会更好。
您仅使用dx 来计算算法的单位步长,因此它会绘制角度为&lt; 45 0 。
您没有在程序代码中使用dy作为斜率&gt; 45 o 这就是你的线路破裂的原因。附加此代码,您的代码将正常工作。
if(abs(dx)>abs(dy))
step=abs(dx);
else
step=abs(dy);