Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11642
Последний выпуск: 19.06.2015

Вывод линий, алгоритм Брезенкема, алгоритм ЦДА

На этой странице приведены основные алгоритмы, использующиеся в компьютерной графике. Думаю, что это будет интересно не только специалистам в этой области (они всё это и так знают :)) ), но и обычному любителю программировать. Ведь интересно же знать как поступает компилятор, когда ему встречается, например, такая строчка

line(-10,-10,100,100);

Кстати, здесь и далее будут приведены тексты программ, написанные на Паскале.

Итак, основные алгоритмы :

Растровая развёртка отрезка (Алгоритм Брезенхема)

procedure lineBres(x1, y1, x2, y2 : integer);
var 
    x, y, xend, yend, s, dx, dy, d, inc1, inc2 : integer;
begin
   dx := abs(x2-x1); dy := abs(y2-y1);
   if dx > dy then begin {почти горизонтальна}
        inc1 := 2*dy; inc2 := 2*(dy - dx); d := 2*dy - dx;
        if x1 < x2 then begin
            x := x1; y := y1; xend := x2;
            if y1 < y2 then s := 1
            else s := -1;
        end
        else begin
            x := x2; y := y2; xend := x1;
            if y1 > y2 then s := 1
            else s := -1;
        end;
        putpixel(x, y, cc); {ставим точку цветом СС}
        while x < xend do begin
           inc(x);
           if d > 0 then begin
               inc(y, s);
               inc(d, inc2);
           end
           else inc(d, inc1);
           putpixel(x, y, cc);
        end
   end
   else...{совершенно аналогично}             

Растровая развёртка отрезка (Алгоритм ЦДА)

procedure lineBres(x1, y1, x2, y2 : integer);
var 
  x, y, xend, yend, dx, dy : integer;
    k, xf, yf : float; {тип float - один из вещественных типов}
begin
  dx := abs(x2-x1); dy := abs(y2-y1);
   if dx > dy then begin {почти горизонтальна}
       k := (y2 - y1)/(x2 - x1);
       if x1 < x2 then begin
           yf := y1; x := x1; xend := x2;
       end
       else begin 
           x := x2; xend := x1; yf := y2;
       end;
       repeat
           putpixel(x, round(yf),cc){ставим точку цветом СС}
           inc(x); inc(yf, k);
       until x > xend;
    end
    else if dy = 0  then putpixel(x1, y1, cc)
    else ... {совершенно аналогично}

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
19K
12 июня 2006 года
Taras55
0 / / 12.06.2006
Мне нравитсяМне не нравится
12 июня 2006, 21:40:26
не понимаю смысла публикации последнего очень медленного алгоритма
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог