|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Алгоритм Люка(растровая графика) |
|
.NET - Алгоритм Люка(растровая графика)
|
Новый участник Сообщения: 6 |
Профиль | Отправить 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); } } 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
|
Профиль | Отправить PM | Цитировать |
Отправлено: 12:40, 28-12-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата vladis3494:
|
|
Отправлено: 13:59, 28-12-2019 | #3 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интегрированная графика | Метла | Процес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 |
|