II. Изображение эллипсов и других кривых второго порядка.
Рис. 5. Изображение эллипса.
Прежде всего, отметим, что у эллипса, в отличие от окружности, всего 2 оси симметрии, поэтому по точкам придется строить уже 2 октанта. (см. Рис. 5)
1) Будем рассуждать подобно алгоритму, который мы применяли для изображения окружностей.
Неявная функция, задающая эллипс, имеет вид:
, a>b Û b2*x2 + a2*y2 - a2*b2 =0
Введем f(x,y)= b2*x2 + a2*y2 - a2*b2
Аналогично алгоритму для окружности можно сравнивать fдля двух возможных вариантов Þ приходим к аналогичному алгоритму, но у него будет уже большая размерность вычислений, чем у алгоритма для окружности.
2) Воспользуемся тем, что эллипс с параметрами a,b; a > b получается из окружности радиуса aсжатием по оси y в a/b раз. Построим алгоритм, который является некой комбинацией алгоритмов Брезенхема для окружности и для отрезка.
Рис. 6. Построение эллипса путем сжатия окружности. | Начнем из точки (a,0) на окружности и из точки (0,0) на отрезке. Будем строить эллипс точно также как окружность, но смещать текущую точку по y только в том случае, когда такое смещение происходит в текущем шаге уже для отрезка, т.е. построение отрезка как раз и является реализацией сжатия в a/b раз (точнее, его дискретной аппроксимацией). Этот алгоритм тоже имеет недостаток: возможная смешанная связность полученной линии (Рис. 7). Рис. 7. Смешанная связность. |