ЦДА

ЦДА

Алгоритм DDA-линии растеризует отрезок прямой между двумя заданными точками, используя вычисления с вещественными числами. Аббревиатура DDA в названии этого алгоритма машинной графики происходит от англ. Digital Differential Analyzer (цифровой дифференциальный анализатор) — вычислительное устройство, применявшееся ранее для генерации векторов.

Алгоритм

Пусть отрезок задан вещественными координатами концов (x1,y1); (x2,y2). Растровыми (целочисленными) координатами концевых точек становятся округлённые значения исходных координат: xstart = round(x1), ystart = round(y1); xend = round(x2), yend = round(y2)[1].

Большее из двух чисел — (xendxstart) или (yendystart) — по абсолютной величине принимается за количество шагов L цикла растеризации, увеличенное на 1.

В начале цикла вспомогательным вещественным переменным x и y присваиваются исходные координаты начала отрезка: x = x1; y = y1. На каждом шаге цикла эти вещественные переменные получают приращения (xendxstart) / L; (yendystart) / L. Растровые же координаты, продуцируемые на каждом шаге, являются результатом округления соответствующих вещественных значений x и y.

Применение вычислений с вещественными числами и лишь однократное использование округления для окончательного получения значения растровой координаты обусловливают высокую точность и низкое быстродействие алгоритма.

Далее представлен программный код реализации алгоритма DDA-линии. Значения вспомогательных переменных x и y здесь сохраняются в виде массивов.

void dda_line (float x1, float y1, float x2, float y2)
{
 int i, L, xstart, ystart, xend, yend;
 float dX, dY, x[1000], y[1000];    
 xstart = roundf(x1);
 ystart = roundf(y1);
 xend = roundf(x2);
 yend = roundf(y2);
 L = max(abs(xend-xstart), abs(yend-ystart));
 dX = (x2-x1) / L;
 dY = (y2-y1) / L;
 i = 0;
 x[i] = x1;
 y[i] = y1;
 i++;
 while (i < L)
 {
  x[i] = x[i-1] + dX;
  y[i] = y[i-1] + dY;
  i++;
 }
 x[i] = x2;
 y[i] = y2;
/* Output: -----------------------*/
 i = 0;
 while (i <= L)
 {
  plot (roundf(x[i]), roundf(y[i])); /* Draws a point. */
  i++;
 }
/* -------------------------------*/
}

оптимизированный алгоритм, вместо деления использует побитовое смещение. sx,sy - начало линии tx,ty - конец линии. Применяется в случае если использование переменных с плавающей запятой (float,double и т.п.) невозможно в виду каких либо ограничений.

       int l,dx,dy;
       int xr=Math.abs(tx-sx);
       int yr=Math.abs(ty-sy);
       if(xr>yr){l=xr;}else{l=yr;}
       int px=(sx<<12)+(1<<11);     //  1<<11 аналогично 0.5 у float
       int py=(sy<<12)+(1<<11);
       int ex=(tx<<12)+(1<<11);
       int ey=(ty<<12)+(1<<11);
       if(l!=0){
           dx = (ex-px) / l;
           dy = (ey-py) / l;
       } else {
           dx = 0;
           dy = 0;
       }
       for(int i=0;i<=l;i++){
           drawpoint(px>>12, py>>12);
           px+=dx;
           py+=dy;
       }

Модифицированный алгоритм DDA-линии применяется для растеризации окружностей.

Примечания

  1. Вообще говоря, если вещественные координаты концов отрезка заданы в некоторой логической системе координат, то соответствующие им растровые координаты определяются на основании правил пересчёта, установленных для конкретной пары систем координат: логической и экранной.

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


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

  • ЦДА — Центральный дом архитектора Словарь: С. Фадеев. Словарь сокращений современного русского языка. С. Пб.: Политехника, 1997. 527 с. ЦДА ЦЦА цифровой дифференциальный анализатор ЦДА Словарь: С. Фадеев. Словарь сокращений современного русского языка …   Словарь сокращений и аббревиатур

  • ЦДА — Центральный дом актера Центральный дом архитектора цифровой дифференциальный анализатор …   Словарь сокращений русского языка

  • Центральный дом архитектора (ЦДА) — (Гранатный переулок, 7—9), творческий работников архитектуры и строительства. Основан в 1932, работает под руководством Президиума Союза московских архитекторов. В ЦДА проводятся конференции, научно методические семинары, конференции по… …   Москва (энциклопедия)

  • Алгоритм ЦДА — …   Википедия

  • Алгоритм ЦДА-линии — …   Википедия

  • Центральный дом архитектора — ЦДА (Гранатный переулок, 7 9), творческий клуб работников архитектуры и строительства. Основан в 1932, работает под руководством Президиума Союза московских архитекторов. В ЦДА проводятся конференции, научно методические семинары, конференции по… …   Москва (энциклопедия)

  • ЦЦА — ЦДА ЦЦА цифровой дифференциальный анализатор ЦДА Словарь: С. Фадеев. Словарь сокращений современного русского языка. С. Пб.: Политехника, 1997. 527 с …   Словарь сокращений и аббревиатур

  • Дом архитектора —         Центральный (ЦДА), творческий клуб работников архитектуры и строительства. Основан в 1932. Находится в Москве. Работает под руководством Президиума Московского отделения Союза архитекторов СССР. Задачи ЦДА: повышение идейно политического… …   Большая советская энциклопедия

  • Центральный Дом актёра имени А.А. Яблочкиной — «Центральный Дом актера имени А.А. Яблочкиной» (ЦДА) Официальный адрес: 119002, Москва, ул.Арбат, д.35 тел. +7 (499) 248 18 05 Центральный творческий клуб театральных деятелей открылся в Москве 14 февраля 1937 года. «Пушкинским вечером» Дом… …   Википедия

  • Центральный Дом актёра имени А. А. Яблочкиной — Эта статья должна быть полностью переписана. На странице обсуждения могут быть пояснения. «Центральный Дом актера имени А.А. Яблочкиной» (ЦДА) Официальный ад …   Википедия


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

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