Алгоритм 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 ответа
dx=dx/step;
dy=dy/step;
Вы сделали step float, но dx и dy являются целыми числами. Таким образом, это деление даст вам 0 в одном из этих двух значений. У меня сложилось впечатление, что все подпрограммы DDA были целочисленными, поэтому наличие плавающего там вообще заставляет меня задуматься. Я посмотрю глубже на алгоритм и посмотрю, что еще я найду.
Вот процедура, которая использует float таким образом, чтобы не обнулять шаг.
и другой для окон.
Кажется, вы просто принимаете одно значение в
scanf("%f%f",&x1);
scanf("%f%f",&y1);
заявления. Попробуйте исправить это и запустить код еще раз.