Цифровой дифференциальный алгоритм (DDA) и алгоритм Брезенхамса являются алгоритмами рисования цифровых линий и используются в компьютерной графике для рисования изображений. Ранее мы использовали аналитические анализаторы для вычисления пикселей, и, таким образом, стало возможным рисование линий. Но эти аналитические методы не так точны, как цифровые методы, что с использованием этих цифровых алгоритмов сейчас, как и в любой области, мы изобретаем более качественные методы и в компьютерной графике. Изобретение этих алгоритмов является прекрасным примером. Прежде чем мы продолжим, давайте посмотрим на концепцию этих алгоритмов. Хотя это выходит за рамки нашего обсуждения, важно указать на основные различия между ними. Если вы действительно знакомы с алгоритмами, вы можете перейти к фактическим различиям, расположенным в конце этой страницы..
DDA в основном используется для рисования линий в компьютерной графике и использует реальные значения при прогнозировании значений следующих пикселей. Предположим, что начальное значение пикселя равно (X0, Y0) (X0, Y0), а значение целевого пикселя - (X1, Y1) (X1, Y1). Мы узнаем, как рассчитать значения пикселей назначения из известного значения пикселей (X0, Y0) (X0, Y0), как показано ниже.
Шаг 1: Здесь у нас есть вход (X0, Y0) (X0, Y0), и мы должны определить, идет ли линия параллельно оси x или оси y. Чтобы найти это, давайте теперь посчитаем разницу между начальным и конечным значениями пикселей.
дх = х1 - х0
dy = Y1 - Y0
Шаг 2: Теперь мы определили разницу, и мы должны нарисовать линию вдоль оси x, если «dx» равно нулю, в противном случае мы должны нарисовать линию, параллельную оси y. Вот фактическое вычисление с точки зрения компьютерного языка.
if (absolute (dx)> absolute (dy))
Шаги = абсолютные (дх);
еще
Шаги = абсолютные (dy);
Шаг 3: Теперь пришло время определить действительные координаты «x» или значения пикселей координаты «y», чтобы нарисовать линию..
Инкремент X = dx / (float) шагов;
Приращение Y = dy / (с плавающей точкой) шагов;
Шаг 4: Это должно быть вычислено, пока мы не достигнем конечного пикселя. Алгоритм DDA округляет значение пикселя до ближайшего целочисленного значения при выполнении вычисления. Вот пример кода того, что мы обсуждали сейчас.
Для (int v = 0; v < Steps; v++)
х = х + х приращение;
y = y + Y приращение;
putpixel (Round (x), Round (y));
Мы закончили с проведением линии с использованием DDA и теперь давайте перейдем к Брезенхэму!
Это также цифровой алгоритм рисования линий, который был изобретен Брезенхэмом в 1962 году, и поэтому он получил то же название. Этот алгоритм является более точным и использует вычитание и сложение для вычисления значения пикселя при рисовании линии. Точность алгоритма Брезенхэма надежна при рисовании кривых и кругов. Давайте посмотрим, как работает этот алгоритм.
Шаг 1: Алгоритмы Брезенхэма принимают начальную пиксельную координату как (ха + 1, Y).
Шаг 2: Он автоматически вычисляет значение следующего пикселя как (ха + 1, Yа + 1), Здесь «a» - это инкрементное значение, и алгоритм вычисляет его, складывая или вычитая уравнения, которые он сформировал.
Этот алгоритм вычисляет точные значения без округления и выглядит проще!
Теперь рассмотрим точки (0,0) и (-8, -4) и проведем линию между этими точками, используя алгоритм Брезенхэма..
Данные даны, (x1, y1) = (0, 0) и (x2, y2) = (-8, -4).
Давайте теперь вычислим дифференциальные значения, как показано ниже.
? X = x2-x1 = -8-0 = 8
Следовательно, значение приращения для x = ∆x / x2 = 8 / -8 = -1.
Δy = y2-y1 = -4-0 = 4
Следовательно, значение приращения для y = ∆y / y2 = 4 / -4 = -1.
Переменная решения = e = 2 * (∆y) - (∆x)
Следовательно, е = 2 * (4) - (8) = 8-8 = 0
С помощью приведенного выше вычисления давайте сведем в таблицу полученные значения. Значения y-координаты корректируются на основе переменной решения, и мы просто игнорируем ее вычисление здесь.
пиксель | Икс | Y | Переменная решения |
(0,0) | 0 | 0 | 0 |
(-1,0) | -1 | 0 | Ценность |
(-2, -1) | -2 | -1 | 0 |
(-3, -1) | -3 | -1 | Ценность |
(-4, -2) | -4 | -2 | 0 |
(-5, -2) | -5 | -2 | Ценность |
(-6, -3) | -6 | -3 | 0 |
(-7, -3) | -7 | -3 | Ценность |
(-8, -4) | -8 | -4 | 0 |
DDA использует реальные значения в своих вычислениях с использованием чисел с плавающей запятой. Следующие значения пикселей или точек определяются с помощью дифференциальных уравнений
Шаг приращения = dx / (float) шагов
Y увеличение = dy / (с плавающей точкой) шагов
Здесь не используются фиксированные константы, но в алгоритме Брезенхэма фиксированные точки используются в арифметических вычислениях. Алгоритм Брезенхэма использует целочисленную арифметику, в отличие от DDA.
DDA решает дифференциальные уравнения с операциями умножения и деления. Вы можете заметить то же самое здесь, X increment = dx / (float) шагов. Алгоритм Брезенхэма использует операции сложения и вычитания, и вы можете заметить то же самое здесь в следующем уравнении вычисления значения пикселя (xа + 1, Yа + 1). Арифметика в Брезенхэме проще по сравнению с DDA.
Как мы уже говорили ранее, алгоритм Брезенхэма использует более простую арифметику, чем DDA, и это приводит к эффективным результатам.
Шаг приращения = dx / (float) шагов
Вы могли заметить 'float', и поэтому он не округляет значения, тогда как алгоритм Брезенхема округляет значения до ближайшего целого числа. Таким образом, используемые значения проще в алгоритме Брезенхэма.
DDA способен рисовать круги и кривые отдельно от рисования линий. Алгоритм Брезенхэма также способен отрисовывать все перечисленные выше, и его точность действительно выше, чем у DDA. Точно так же алгоритм Брезенхэма может дать более эффективные кривые, чем те, которые получены DDA. Оба алгоритма могут также рисовать треугольники и многоугольники.
Поскольку DDA также включает округление, это дороже, чем использование алгоритма Брезенхэма.
Из приведенного выше обсуждения очень ясно, что алгоритм Брезенхема является оптимизированным с точки зрения скорости, стоимости и использования операций..
Давайте посмотрим на различия в табличной форме.
S.No | Отличия в | Цифровой дифференциальный алгоритм | Алгоритм Брезенхема |
1. | Почему имя? | Просто потому, что это была цифровая реализация уравнений, она получила название. | Он был изобретен Дж. Э. Брезенхамом в 1962 году и отсюда и название. |
2. | Расчеты | Это включает в себя более сложные вычисления. | Используемые вычисления действительно проще. |
3. | Типы используемых операций | Он использовал умножения и деления. Используемые здесь примеры дифференциальных уравнений представляют собой шаги Xincrement = dx / (float), Инкремент = dy / (плавающие) шаги.
| Он использует сложения и вычитания. Пример расчета здесь можно обозначить как (ха + 1, Yа + 1). |
4. | Арифметические вычисления значений | Он использует значения с плавающей запятой. | Он использует только целочисленные значения. |
5. | КПД | Комплексная арифметика приводит к меньшей эффективности. | Более простая арифметика приводит к большей эффективности. |
6. | скорость | Использование операций умножения и деления занимает много времени для его вычислительных процессов.. | Использование операций сложения и вычитания занимает меньше времени, чем DDA. |
7. | точность | Меньше точности. | Это точнее. |
8. | Округление | Он использует реальные значения и никогда не округляет значения. | Округляет значения до ближайших целых. |
9. | Возможность рисования | Он способен рисовать линии, круги и кривые, но с меньшей точностью. С помощью этого алгоритма мы можем даже нарисовать треугольники и многоугольники. | Он способен рисовать линии, круги и кривые с большей эффективностью. Треугольники и многоугольники также можно нарисовать с помощью этого алгоритма. |
10. | Стоимость вычислений | Это дорого, так как требует округления. | Использование алгоритма Брезенхэма дешевле, чем DDA. |
11. | Оптимизированный алгоритм | Это не оптимизированный алгоритм | Это оптимизированный алгоритм. |
Мы рассмотрели все возможные различия между DDA и алгоритмом Брезенхэма. Это может даже показаться повторяющимся, но есть веская причина для повторного упоминания этих моментов, и вы узнаете, когда полностью это поймете. Если вы все еще чувствуете, что существует двусмысленность, пожалуйста, оставьте нам комментарий. Давайте учиться вместе, делясь соответствующими знаниями!