1

私のコードは、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();
}
4

2 に答える 2

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

step を float にしましたが、dx と dy は整数です。したがって、この除算により、これら 2 つの値のいずれかが 0 になります。私は、DDA ルーチンはすべて整数であるという印象を受けていたので、そこに float があると不思議に思いました。アルゴリズムをさらに詳しく調べて、他に何が見つかるかを見ていきます。

ステップをゼロにしない方法でフロートを使用するルーチンを次に示します。

もう 1 つは Windows 用です。

于 2013-07-31T18:07:22.587 に答える
1

あなたはただ一つの値を受け入れているようです

scanf("%f%f",&x1);
scanf("%f%f",&y1);

ステートメント。それを修正して、もう一度コードを実行してみてください。

于 2013-07-31T18:10:35.030 に答える