DDA算法不是某些坐标的绘图线?

时间:2013-07-31 17:53:32

标签: c algorithm graphics line-drawing dda

我的代码适用于斜率= 1但不适用于其他斜率。它绘制的水平或垂直线适用于除1以外的斜坡。此代码有什么问题。任何帮助都将受到赞赏。

#include <graphics.h>
#include <stdio.h>
#include <math.h>

int main( )
{
int x,y,x1,y1,x2,y2,dx,dy;
float step;

int i,gd,gm;

printf("Enter the value of x1,y1: ");
scanf("%f%f",&x1,&y1);
printf("Enter the value of x2,y2 : ");
scanf("%f%f",&x2,&y2);


detectgraph(&gd,&gm);
initgraph(&gd,&gm,"");

dx=abs(x2-x1);
dy=abs(y2-y1);

if(dx>=dy)
step=dx;
else
step=dy;

dx=dx/step;
dy=dy/step;

x=x1;
y=y1;

i=1;
while(i<=step)
{
      putpixel(x,y,1);
      x=x+dx;
      y=y+dy;
      i=i+1;
      delay(100);
}
getch();
}

2 个答案:

答案 0 :(得分:1)

dx=dx/step;
dy=dy/step;

你已经使一步浮动,但是dx和dy是整数。因此,这种差异将使这两个值中的一个为0。我的印象是DDA例程都是整数,所以浮动在那里让我很奇怪。我会更深入地研究算法并看看我还能找到什么。

Here's一个以不会使步骤归零的方式使用浮点数的例程。

Windows的

another

答案 1 :(得分:1)

您似乎只是接受了

中的一个值
scanf("%f%f",&x1);
scanf("%f%f",&y1);

语句。尝试更正并再次运行代码。