exam04 - MiAneko24/bmstu-cg GitHub Wiki
04. Требования, предъявляемые к алгоритмам вычерчивания отрезков. Пошаговый алгоритм разложения отрезка в растр. Разложение в растр по методу цифрового дифференциального анализатора.
Разложение отрезка в растр - процесс определения пикселей, наилучшим образом аппроксимирующих положение отрезка.
Требования к алгоритмам
1. Отрезок должен выглядить как отрезок прямой (отрезок должен быть определенной длины). В силу дискретной природы растрового дисплея выполнено всегда быть не может, однако чтобы визуально отрезок казался отрезком одной прямой, зачастую прибегают к методам устраненения ступенчатости.
2. Отрезок должен заканчиваться и начинаться в заданных точках.
3. Яркость или интенсивность не должна зависить от длины, угла наклона. Должна быть постоянной в промежутке отрезка. Данное требование не может быть выполнено всегда в силу дискретной природы дисплея. Так, например, вертикальные и горизонтальные отрезки будут выглядеть более яркими, нежели отрезок в 45 градусов, в связи с меньшим расстоянием между пикселями.
4. Алгоритмы должны работать быстро. Для этого стараются избегать операций в вещественных числах, а также заменять умножение и деление сложением и вычитанием
Пошаговый алгоритм (из материалов Курова)
Базовые алгоритмы могут использовать численные и инкрементные (пошаговые) методы. В численных методах построения кривых и отрезков используется уравнение кривой (отрезка) и частные производные. Обычно исследуются точки пересечения кривой с горизонтальными линиями (y = n, где n-константа). В пошаговых методах на каждом шаге вычисляется направление элементарного движения от текущей точки к следующей. При этом удается использовать целочисленную арифметику и избежать выполнения операций умножения и деления.
ЦДА
Прямая линия на плоскости описывается уравнением Ax + By + C, отсюда dy / dx = const.
Δy / Δx = (ук - yн) / (хк - хн).
Подставляем и получаем:
y(i+1) = yi + Δy
y(i+1) = yi + (ук - yн) / (хк - хн) * Δx
- Единицей растра выбирается большее из приращений (Δx или Δy)
Псевдокод ЦДА
1. Ввод (xн, ун), (хк, ук)
2. dx = xк - хн, dy = ук - ун
3. Δx = |dx|, Δy = |dy|
4. Если Δx > Δy, то l = Δx, иначе l = Δy
5. dx = dx / l, dy = dy / l
6. x = хн, у = ун (х, у вещественные)
7. Цикл построения отрезка (по i от 1 до i + 1)
7.1. Высветить точку (округление(x), округлуние(у))
7.2. x = x + dx, y = y + dy
7.3 Конец цикла
8. Конец.
Алгоритм медленный из-за округления.
Следующий вопрос: 05. Алгоритмы Брезенхема разложения отрезков в растр. Простой алгоритм Брезенхема. Целочисленный алгоритм Брезенхема. Общий алгоритм Брезенхема.
Предыдущий вопрос: 03. Построение плоских кривых. Выбор шага изменения аргумента. Алгоритм построения эллипса и окружности по методу средней точки.