Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Book_Sidenko.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
6.28 Mб
Скачать

Восьмисторонняя симметрия

Процесс преобразования окружностей в растровую форму можно улучшить, если полнее использовать симметричную окружности. Поэтому удобно вычислить значения окружности на дуге в 450, а потом симметрично отобразить их.

Алгоритм Брезенхэма для окружностей

Брезенхэм разработал пошаговый генератор дуг, который более эффективен, чем рассмотренные ранее. Необходимо сгенерировать только 1\8 часть окружности. Остальные части получаются путем отображения:

  • 1-ой октант – отражение относительно y=x 1-го октанта;

  • 2-ой квадрант – отражение относительно x=0 1-го квадранта;

  • нижняя полуокружность – отражение относительно y=0 верхней полуокружности .

Рис. 3.8

Рассмотрим 1-ую четверть окружности с центром в начале координат. Начнем работу в т. x=0, y=R, окружность генерируется по часовой стрелке, y – монотонно убывающая функция аргумента x до т. .

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

А лгоритм выбирает , для которого минимален квадрат расстояния между одним из этих пикселов и окружностью.

Рис. 3.9

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

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

Рис. 3.10

Если , то ближе к окружности, чем .

Если , то ближе к окружности.

Введем упрощающую переменную :

.

Если

.

Для случаев 1,2: ( - внутри окружности)

( - внутри окружности)

.

Для случая 3: ( - внутри)

( - снаружи)

Для случаев 4,5: ( - снаружи)

( - снаружи)

.

После некоторых математических выводов было получено:

.

если ( ) если ( )

3.5 Растровая развертка эллипсов Простой метод

Эллипс — это сплюснутая или расплюснутая окружность.

Эллипс имеет 2 фокуса, сумма расстояния от любой т. эллипса до каждого фокуса = const.

Окружность — это вырожденный случай эллипса, когда фокусы совпадают.

Рис. 3.11

Эллипс имеет 2 радиуса – А и В.

Для окружности: А=В

Для эллипса:

Используя симметрию, достаточно сгенерировать 1\4 элемента. Вначале основная ось – X, X изменяется от 0 до т. Р, в которой наклон касательной к эллипсу = 450.

Рис. 3.12

После этого основная ось – Y.

Вначале x=0, y=B, x=1, y=y1,

где

.

При x=1, и т.д. до тех пор, пока . Далее y изменяется на 1 и вычисляется x.

Инкрементивный метод

Уравнение элемента можно переписать:

Решим приведенное уравнение для x=0 и y=B-0,5, что позволит оценить, как далеко x от того значения, при котором y=B-0,5 (B-0,5 – это т. перехода на следующий по оси Y). Потом пересчитывается уравнение для x+1 и т.д.

Когда результат станет положительным, пора декрементировать y.

Итак, установим , y=B-0,5

Значит, начальная ошибка накопления:

Если проигнорировать, то останется целочисленная арифметика. Вычисленную вначале ошибку накопления надо корректировать с каждым шагом по оси X, пока она не станет положительной, указывая изменить y. Это делается так. Для текущей точки = . Для следующей т. = .

уже содержится в текущей ошибке, поэтому добавляется к x при каждом шаге (все вычисляется в целых числах).

Когда ошибка , делается шаг по оси Y и пересчитывается ошибка для следующего шага. Для этого вместо y в уравнение эллипса подставляется y-1:

Т.к. уже есть, то инкрементивная часть =

.

Рисование прекращается по достижению наклона касательной 450, что определяется тем, что приращение по неосновной оси приращению по основной оси.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]