Алгоритм Брезенхема
Будем рассуждать подобно алгоритму Брезенхема для отрезков (с соответствующими поправками на 4-й октант) [17]. Из двух возможных пикселов в 4-м октанте (соответствующих вертикальному и диагональному смещениям, которые обозначаются аналогично прежним s и d, см. рис. 4.10) будем выбирать тот, расстояние от окружности до которого меньше. Рис. 4.8. Расстояния до окружности. Для того чтобы выбрать один из двух возможных пикселей, будем сравнивать расстояния от них до окружности: где расстояние меньше - тот пиксел и будет искомым. В примере на рис. 4.8 сравниваются расстояния от точек S(xs, ys) и D(xd, yd) до окружности с радиусом R. Из евклидовой метрики получаем: Но вычисление квадратного корня - вычислительно трудоемкая операция, поэтому при достаточно больших R мы будем заменять сравнение расстояний сравнением приближенных значений их квадратов (см. рис. 4.9): Рис. 4.9. Приближенное сравнение расстояний. Уменьшим два слагаемых на приблизительно одинаковые величины:
получим Таким образом, приближенно
Рис. 4.10. Алгоритм Брезенхема для окружности Пусть (x, y) - текущий пиксель. Обозначим Тогда из двух возможных смещений d и s выберем.
d: Переходим в (x + 1, y + 1) и придаем соответствующие приращения F, ΔF(s), ΔF(d): F = F +ΔF(d); ΔF(s) = ΔF(s)+4; ΔF(d) = ΔF(d)+8.
s: Переходим в (x, y + 1) и придаем соответствующие приращения F, ΔF(s), ΔF(d): F = F +ΔF(s); ΔF(s) = ΔF(s)+4; ΔF(d) = ΔF(d)+4.Если мы начинаем из (-R, 0), то начальные значения будут следующими: Легко видеть, что в алгоритме все величины, связанные с F, кроме F начального, будут кратны 2. Но, если мы поделим все эти величины на 2 (в дальнейшем значения всех величин уже понимаются в этом смысле), то Листинг 4.5. Алгоритм Брезенхема для окружности Размерность вычислений этого алгоритма (т.е. отношение максимальных модулей значений величин, с которыми он оперирует к модулям исходных данных (в данном случае R)) равна 2.
|