Вы можете сделать намного лучше, чем использовать тригонометрические функции (которые стоят дорого) или использовать уравнение окружности, что в конечном итоге потребует принятия дорогого квадратного корня.
Здесь есть страница, посвященная этой теме:
http://www.cs.unc.edu/~mcmillan/comp136/Lecture7/circle.html
По сути, ответ заключается в том, что вы хотите выяснить, какие начальные и конечные точки круга находятся в каждой строке вашего массива. Для этого вычисляют «смещение» от предыдущей строки, то есть «отличие» от начальной точки предыдущей строки (и аналогично для конечной точки).
Эта разница может быть вычислена математически с использованием производной. Уточнение заключается в том, чтобы вычислять разницу между последовательными различиями с использованием двойной производной.
Во всяком случае, эта абстрактная математическая идея приводит к алгоритму окружности средней точки, который иногда называют алгоритмом окружности Брезенехана. См. Википедию для более подробной информации о самом алгоритме:
http://en.wikipedia.org/wiki/Midpoint_circle_algorithm