Здравствуйте, форумчане, прошу вас помощь мне разобраться с алгоритмом Люка. Есть Алгоритм Люка,про него в методичке сказано, что Генерация отрезка производится в первом октанте. На каждом шаге выполняется перемещение вдоль оси Х, оценивается возникающая ошибка по ординате Y, которая накапливается. Для ее минимизации модифицируется у (добавляется 1), когда ошибка достигнет или превысит единицу.
Есть псевдокод, описывающий данный метод:
Перекодировал алгоритм в С#, но он не работает...
Вот код С#:
Есть псевдокод, описывающий данный метод:
C:
#define Xd 80
#define Yd 245
#define Xf 200
#define Yf 100
int Dx,Dy,Cumul;
int Xinc,Yinc,X,Y;
int col;
{
int Dx,Dy,Cumul;
int Xinc,Yinc,X,Y;
int col;
int i;
X = Xd; Y = Yd; col = 4;
putpixel(X,Y,col);
if (Xd < Xf) Xinc = 1; else Xinc = -1;
if (Yd < Yf) Yinc = 1; else Yinc = -1;
Dx = abs (Xd - Xf);
Dy = abs (Yd - Yf);
if (Dx > Dy)
{
Cumul = Dx/2;
for (i=0; i < Dx; i++)
{
X = X + Xinc;
Cumul = Cumul + Dy;
if ( Cumul >= Dx)
{
Cumul = Cumul - Dx;
Y = Y + Yinc;
}
putpixel(X,Y,col);
}
}
else
{
Cumul = Dy/2;
for (i=0; i < Dy; i++)
{
Y = Y + Yinc;
Cumul = Cumul + Dx;
if ( Cumul >= Dy)
{
Cumul = Cumul - Dy;
X = X + Xinc;
putpixel(X,Y,col);
}
}
Перекодировал алгоритм в С#, но он не работает...
Вот код С#:
C#:
static public void LukLine(Graphics g, Color clr, int Xd, int Xf, int Yd, int Yf)
{
int Dx, Dy, Cumul;
int Xinc, Yinc, X, Y;
int col;
int i;
//int Xd = 80; int Yd = 245; int Xf = 200; int Yf = 100;
X = Xd; Y = Yd; col = 4;
PutPixel(g, clr, X, Y, col);
if (Xd < Xf) Xinc = 1; else Xinc = -1;
if (Yd < Yf) Yinc = 1; else Yinc = -1;
Dx = Math.Abs(Xd - Xf);
Dy = Math.Abs(Yd - Yf);
if (Dx > Dy)
{
Cumul = Dx / 2;
for (i = 0; i < Dx; i++)
{
X = X + Xinc;
Cumul = Cumul + Dy;
if (Cumul >= Dx)
{
Cumul = Cumul - Dx;
Y = Y + Yinc;
}
PutPixel(g, clr, X, Y, col);
}
}
else
{
Cumul = Dy / 2;
for (i = 0; i < Dy; i++)
{
Y = Y + Yinc;
Cumul = Cumul + Dx;
if (Cumul >= Dy)
{
Cumul = Cumul - Dy;
X = X + Xinc;
PutPixel(g, clr, X, Y, col);
}
}
}
LukLine(g, Color.Black, 80, 200, 245, 100);