Учебники

Алгоритм генерации линии

Линия соединяет две точки. Это основной элемент в графике. Чтобы нарисовать линию, вам нужно две точки, между которыми вы можете нарисовать линию. В следующих трех алгоритмах мы обозначаем одну точку линии как X0,Y0, а вторую точку линии как X1,Y1.

Алгоритм DDA

Алгоритм цифрового дифференциального анализатора (DDA) — это простой алгоритм генерации линий, который объясняется здесь шаг за шагом.

Шаг 1 — Получить ввод двух конечных точек (X0,Y0) и (X1,Y1).

Шаг 2 — Рассчитайте разницу между двумя конечными точками.

dx = X 1 - X 0
dy = Y 1 - Y 0

Шаг 3 — Исходя из рассчитанной разницы в шаге 2, вам нужно определить количество шагов для помещения пикселя. Если dx> dy, то вам нужно больше шагов в координате x; в противном случае по координате у.

if (absolute(dx) > absolute(dy))
   Steps = absolute(dx);
else
   Steps = absolute(dy);

Шаг 4 — Рассчитать приращение по координате х и координате у.

Xincrement = dx / (float) steps;
Yincrement = dy / (float) steps;

Шаг 5 — Поместите пиксель, успешно увеличивая координаты x и y соответственно, и завершите рисование линии.

for(int v=0; v < Steps; v++)
{
   x = x + Xincrement;
   y = y + Yincrement;
   putpixel(Round(x), Round(y));
}

Линия Брезенхэма

Алгоритм Брезенхэма — это еще один алгоритм преобразования инкрементного сканирования. Большим преимуществом этого алгоритма является то, что он использует только целочисленные вычисления. Перемещаясь по оси x в единичных интервалах и на каждом шаге выбирайте между двумя разными координатами y.

Например, как показано на следующем рисунке, из позиции (2, 3) необходимо выбрать между (3, 3) и (3, 4). Вам бы хотелось, чтобы точка была ближе к исходной линии.

Линия поколения Брезенхэма

В позиции выборки Xk+1, вертикальное отделение от математической линии обозначено как dupper и dlower.

дуппер и пуховик

На приведенном выше рисунке координата y на математической линии в xk+1 равна —

Y = m (Xk + 1) + b

Итак, dupper и dlower определяются следующим образом:

dlower=yyk

=m(Xk+1)+bYk

а также

dupper=(yk+1)y

=Yk+1m(Xk+1)b

Вы можете использовать их, чтобы принять простое решение о том, какой пиксель ближе к математической линии. Это простое решение основано на разнице между двумя позициями пикселей.

dнижнийdверхний=2м(xk+1)2yk+2b1

Заменим m на dy / dx, где dx и dy — различия между конечными точками.

dx(dнижнийdверхний)=dx(2 frac mathrmdy mathrmdx(xk+1)2yk+2b1)

=2dy.xk2dx.yk+2dy+2dx(2b1)

=2dy.xk2dx.yk+C

Таким образом, параметр решения Pk для k- го шага вдоль линии определяется как —

pk=dx(dнижнийdверхний)

=2dy.xk2dx.yk+C

Знак параметра решения Pk совпадает со знаком dlowerdupper.

Если pk отрицательно, выберите нижний пиксель, в противном случае выберите верхний пиксель.

Помните, что изменения координат происходят вдоль оси x с шагом в единицу, поэтому вы можете делать все с помощью целочисленных вычислений. На этапе k + 1 параметр решения задается как —

pk+1=2dy.xk+12dx.yk+1+C

Вычитая из этого pk, мы получаем —

pk+1pk=2dy(xk+1xk)2dx(yk+1yk)

Но xk+1 — это то же самое, что и (xk)+1. Итак —

pk+1=pk+2dy2dx(yk+1yk)

Где Yk+1Yk равно 0 или 1, в зависимости от знака Pk.

Первый параметр решения p0 оценивается как (x0,y0) и определяется как —

p0=2dydx

Теперь, имея в виду все вышеперечисленные моменты и расчеты, вот алгоритм Брезенхема для наклона m <1 —

Шаг 1 — Введите две конечные точки линии, сохраняя левую конечную точку в (x0,y0).

Шаг 2 — Постройте точку (x0,y0).

Шаг 3 — Рассчитайте константы dx, dy, 2dy и (2dy — 2dx) и получите первое значение для параметра решения как —

p0=2dydx

Шаг 4 — На каждом Xk вдоль линии, начиная с k = 0, выполните следующий тест —

Если pk <0, следующая точка на графике — это (xk+1,yk) и

pk+1=pk+2dy В противном случае,

(xk,yk+1)

pk+1=pk+2dy2dx

Шаг 5 — Повторите шаг 4 (дх — 1) раз.

При m> 1 выясните, нужно ли увеличивать x при каждом увеличении y.

После решения уравнение для параметра решения Pk будет очень похожим, только x и y в уравнении меняются местами.

Алгоритм средней точки

Алгоритм средней точки обусловлен Брезенхэмом, который был изменен Питтуэем и Ван Акеном. Предположим, что вы уже поместили точку P в координату (x, y), а наклон линии равен 0 ≤ k ≤ 1, как показано на следующем рисунке.

Теперь вам нужно решить, поставить ли следующую точку в точке E или N. Это можно выбрать путем определения точки пересечения Q, ближайшей к точке N или E. Если точка пересечения Q находится ближе всего к точке N, то N рассматривается как следующий пункт; в противном случае Е.

Алгоритм средней точки

Чтобы определить это, сначала вычислите среднюю точку M (x + 1, y + ½). Если точка пересечения Q линии с вертикальной линией, соединяющей Е и N, находится ниже М, то возьмите Е в качестве следующей точки; в противном случае возьмите N в качестве следующего пункта.

Чтобы проверить это, нам нужно рассмотреть неявное уравнение —

F (x, y) = mx + b — y

Для положительного m в любом данном X,