Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2019, 10:27   #1
vladis222
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 24
По умолчанию Алгоритм Люка(растровая графика)

Здравствуйте, форумчане, прошу вас помощь мне разобраться с алгоритмом Люка. Есть Алгоритм Люка,про него в методичке сказано, что Генерация отрезка производится в первом октанте. На каждом шаге выполняется перемещение вдоль оси Х, оценивается возникающая ошибка по ординате Y, которая накапливается. Для ее минимизации модифицируется у (добавляется 1), когда ошибка достигнет или превысит единицу.
Есть псевдокод, описывающий данный метод:
Код:
#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); 
                }
         }
Честно говоря, не очень понятно что за константы в методе, для чего они нужны...
Перекодировал в С#, ошибок нет но метод банально не работает:
Код:
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);
vladis222 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм Люка и Брезенхема vladis222 Общие вопросы по программированию, компьютерный форум 0 11.12.2019 16:06
Программа тестирования произвольных чисел Мерсенна (2^p-1) метода Люка-Лемера Виктор Смирнов Софт 11 21.04.2012 20:13
Алгоритм построения графика функции... serg_yl Qt и кроссплатформенное программирование С/С++ 0 08.03.2011 19:57
Графика :: алгоритм порядкового сканирования Timon4ik-84 Общие вопросы C/C++ 1 23.12.2010 19:30