我的代码适用于slope=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();
}

最佳答案

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

您已经将步骤设为浮点,但dx和dy是整数。因此,这个除法将在这两个值中给你一个0在我的印象中,DDA例程都是整数,所以在其中使用浮点值让我感到奇怪我会更深入地研究算法,看看还有什么发现。
Here's一个使用浮动的例程,其方式不会使步骤归零。
对于windows,another

关于c - DDA算法不是为某些坐标绘制线吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17977479/

10-11 23:00