Алгоритм Ву

Алгоритм Ву
Распределение интенсивности пикселя в зависимости от расстояния до идеальной линии

Алгоритм Ву — это алгоритм разложения отрезка в растр со сглаживанием. Был предложен У Сяолинем (Xiaolin Wu, отсюда устоявшееся в русском языке название алгоритма) в статье, опубликованной журналом Computer Graphics в июле 1991 года. Алгоритм сочетает высококачественное устранение ступенчатости и скорость, близкую к скорости алгоритма Брезенхема без сглаживания.

Алгоритм

Горизонтальные и вертикальные линии не требуют никакого сглаживания, поэтому их рисование выполняется отдельно. Для остальных линий алгоритм Ву проходит их вдоль основной оси, подбирая координаты по неосновной оси аналогично алгоритму Брезенхема. Отличие состоит в том, что в алгоритме Ву на каждом шаге устанавливается не одна, а две точки. Например, если основной осью является Х, то рассматриваются точки с координатами (х, у) и (х, у+1). В зависимости от величины ошибки, которая показывает как далеко ушли пиксели от идеальной линии по неосновной оси, распределяется интенсивность между этими двумя точками. Чем больше удалена точка от идеальной линии, тем меньше ее интенсивность. Значения интенсивности двух пикселей всегда дают в сумме единицу, то есть это интенсивность одного пикселя, в точности попавшего на идеальную линию. Такое распределение придаст линии одинаковую интенсивность на всем ее протяжении, создавая при этом иллюзию, что точки расположены вдоль линии не по две, а по одной.

Результат работы алгоритма

Реализация в псевдокоде (только для линии по x):

function plot(x, y, c) is
    // рисует точку с координатами (x, y)
    // и яркостью c (где 0 ≤ c ≤ 1)

function ipart(x) is
    return целая часть от x

function round(x) is
    return ipart(x + 0.5) // округление до ближайшего целого

function fpart(x) is
    return дробная часть x

function draw_line(x1,y1,x2,y2) is
   if x2 < x1 then
       swap(x1, x2)
       swap(y1, y2)
   end if
  
   dx := x2 - x1
   dy := y2 - y1
   gradient := dy ÷ dx
  
   // обработать начальную точку
   xend := round(x1) 
   yend := y1 + gradient × (xend - x1)
   xgap := 1 - fpart(x1 + 0.5)
   xpxl1 := xend  // будет использоваться в основном цикле
   ypxl1 := ipart(yend)
   plot(xpxl1, ypxl1, 1 - fpart(yend) × xgap)
   plot(xpxl1, ypxl1 + 1, fpart(yend) × xgap)
   intery := yend + gradient // первое y-пересечение для цикла
        
   // обработать конечную точку
   xend := round(x2)
   yend := y2 + gradient × (xend - x2)
   xgap := fpart(x2 + 0.5)
   xpxl2 := xend  // будет использоваться в основном цикле
   ypxl2 := ipart(yend)
   plot(xpxl2, ypxl2, 1 - fpart(yend) × xgap)
   plot(xpxl2, ypxl2 + 1, fpart(yend) × xgap)
     
   // основной цикл
   for x from xpxl1 + 1 to xpxl2 - 1 do
           plot(x, ipart(intery), 1 - fpart(intery))
           plot(x, ipart(intery) + 1, fpart(intery))
           intery := intery + gradient
   repeat
end function

Литература

См. также


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Полезное


Смотреть что такое "Алгоритм Ву" в других словарях:

  • Алгоритм Ли — Алгоритм Ли  волновой алгоритм поиска пути на карте, алгоритм трассировки. С его помощью можно построить путь, или трассу, между двумя любыми элементами в лабиринте. Из начального элемента распространяется в четырёх направлениях волна. Тот… …   Википедия

  • АЛГОРИТМ —         [от algorithm!; algorismus, первоначально лат. транслитерация имени ср. азиат. учёного 9 в. Хорезми (Мухаммед бен Муса аль Хорезми)], программа, определяющая способ поведения (вычисления); система правил (предписаний) для эффективного… …   Философская энциклопедия

  • алгоритм — Конечный набор предписаний для получения решения задачи посредством конечного количества операций. [ГОСТ 34.003 90] алгоритм Конечное упорядоченное множество точно определенных правил для решения конкретной задачи. [ИСО/МЭК 2382 1] [ГОСТ Р 52292… …   Справочник технического переводчика

  • алгоритм — предписание, задающее на базе системы правил последовательность операций, точное выполнение коих позволяет решать задачи определенного класса. Понятие, ключевое для математики и логики математической. В психологии применяется не в строгом… …   Большая психологическая энциклопедия

  • АЛГОРИТМ — [лат. algorithmus < арабск. Algorithmi имя собств.] 1) мат. однозначно определенная процедура для схематического решения класса задач; 2) инф. понятное и точное предписание исполнителю совершить последовательность действий, направленных на… …   Словарь иностранных слов русского языка

  • алгоритм — алгорифм Словарь русских синонимов. алгоритм сущ., кол во синонимов: 3 • алгорифм (1) • …   Словарь синонимов

  • алгоритм — а, м. algorithme m. 1230 algorisme. Лексис.1. В математике общепонятное предписание, определяющее детерминированный вычислительный процесс, ведущий от исходных данных к искомому результату. БАС 2. Алгебра логика математики; алгоритм ее… …   Исторический словарь галлицизмов русского языка

  • Алгоритм — (algorithm) Последовательность четко определенных действий для решения проблемы, выраженная в конечном числе шагов. Алгоритмы широко применяются в компьютерной области. Шаги алгоритма переводятся в последовательность команд, понимаемых… …   Словарь бизнес-терминов

  • АЛГОРИТМ — (алгорифм) (от algorithmi, algorismus, первоначально латинская транслитерация имени математика аль Хорезми), способ (программа) решения вычислительных и других задач, точно предписывающий, как и в какой последовательности получить результат,… …   Современная энциклопедия

  • АЛГОРИТМ — (алгорифм) (от algorithmi algorismus, первоначально лат. транслитерация имени математика аль Хорезми), способ (программа) решения вычислительных и др. задач, точно предписывающий, как и в какой последовательности получить результат, однозначно… …   Большой Энциклопедический словарь

  • АЛГОРИТМ — (от лат. формы имени среднеазиатского математика аль Хорезми) правило действий, последовательность проведения вычислительных операций, способ нахождения искомого результата. В экономических задачах, решаемых с использованием математических… …   Экономический словарь


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»