Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Алгоритм Люка(растровая графика)

Ответить
Настройки темы
.NET - Алгоритм Люка(растровая графика)

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте! Хотел бы разобраться в логике работы алгоритма Люка, имеется в методичке псевдокод, отображающий его работу. и описано краткое описание: Генерация отрезка производится в первом октанте. На каждом шаге выполняется перемещение вдоль оси Х, оценивается возникающая ошибка по ординате 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); 
                }
         }
Перевел этот алгоритм в 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);
                    }
                }
            }



        }
private void button1_Click(object sender, EventArgs e)
        {
            Graphics g = pictureBox1.CreateGraphics();
            LukLine(g, Color.Black, 80, 200, 245, 100);
            
        }

Подскажите,пожалуйста,возможно я неверно использую алгоритм,что неверно?

Отправлено: 11:37, 28-12-2019

 

Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата vladis3494:
Генерация отрезка производится в первом октанте. »
фэйспалм: октанты в трёхмерном пространстве, а алгоритм двумерный

Цитата vladis3494:
ошибок не выдает, но он не работает... »
вместо/вместе с PutPixel сделайте вывод значений X и Y в файл или на консоль

Отправлено: 12:40, 28-12-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата vladis3494:
Вот сам псевдокод алгоритма: »
«Псевдокод» сильно напоминает обычный C.

Отправлено: 13:59, 28-12-2019 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Алгоритм Люка(растровая графика)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интегрированная графика Метла Процесcоры 2 25-03-2014 23:59
2010 - Автоматическое изменение графика при переносе данных, формулы и графика на другой лис Invincible Microsoft Office (Word, Excel, Outlook и т.д.) 2 07-06-2013 22:13
Драйвер - Тормозит графика.... djsova Microsoft Windows 2000/XP 6 20-11-2007 10:09
Алгоритм pauluss Программирование и базы данных 1 06-10-2006 10:53
Графика в С++ mask Программирование и базы данных 15 04-06-2003 19:51




 
Переход