Московский государственный университет имени М.В.Ломоносова
Опубликован: 23.04.2007 | Доступ: свободный | Студентов: 3280 / 442 | Оценка: 4.18 / 3.71 | Длительность: 17:54:00
ISBN: 978-5-9556-0098-7
Специальности: Программист
Лекция 3:

Алгоритмы растеризации отрезков, окружностей и эллипсов

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >

3.5. Изображение эллипсов

Прежде всего отметим, что у эллипса, в отличие от окружности, всего 2 оси симметрии, поэтому по точкам придется строить уже 2 октанта (см. рис. 3.11).

Изображение эллипса.

Рис. 3.11. Изображение эллипса.

Построение по неявной функции

Будем рассуждать подобно алгоритму Брезенхема для окружностей.

Неявная функция, задающая эллипс, имеет вид

{{\left( \frac{x}{a} \right)}^2 + {\left( \frac{y}{b} \right)}^2 -1 = 0, a > b}\\ {b^2x^2 + a^2y^2 - a^2b^2 =0}

Введем f(x, y) = b2x2 + a2y2 - a2b2.

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

Построение путем сжатия окружности

Воспользуемся тем, что эллипс с параметрами a, b (пусть a > b ) получается из окружности радиуса a сжатием по оси y в a/b раз. Построим алгоритм, который является некой комбинацией алгоритмов Брезенхема для окружности и для отрезка (см. рис. 3.12).

Построение эллипса путем сжатия окружности.

Рис. 3.12. Построение эллипса путем сжатия окружности.
Смешанная связность.

Рис. 3.13. Смешанная связность.

Начнем из точки (a, 0) на окружности и из точки (0, 0) на отрезке. Будем строить эллипс точно так же, как окружность, но смещать текущую точку по y только в том случае, когда такое смещение происходит в текущем шаге уже для отрезка, т.е. построение отрезка как раз и является реализацией сжатия в a/b раз (точнее, его дискретной аппроксимацией). Этот алгоритм тоже имеет недостаток: возможная смешанная связность полученной линии (см. рис. 3.13).

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >