James FrithによるBresenhamのアルゴリズムにはバリエーションがあり、乗算を完全に排除するため、さらに高速になります。これを実現するためにルックアップテーブルは必要ありませんが、半径が一定のままであれば、結果をテーブルに保存できます。ブレゼンハムとフリスのアルゴリズムはどちらも8重対称を使用するため、このルックアップテーブルは比較的短くなります。
// FCircle.c - Draws a circle using Frith's algorithm.
// Copyright (c) 1996 James E. Frith - All Rights Reserved.
// Email: jfrith@compumedia.com
typedef unsigned char uchar;
typedef unsigned int uint;
extern void SetPixel(uint x, uint y, uchar color);
// FCircle --------------------------------------------
// Draws a circle using Frith's Algorithm.
void FCircle(int x, int y, int radius, uchar color)
{
int balance, xoff, yoff;
xoff = 0;
yoff = radius;
balance = -radius;
do {
SetPixel(x+xoff, y+yoff, color);
SetPixel(x-xoff, y+yoff, color);
SetPixel(x-xoff, y-yoff, color);
SetPixel(x+xoff, y-yoff, color);
SetPixel(x+yoff, y+xoff, color);
SetPixel(x-yoff, y+xoff, color);
SetPixel(x-yoff, y-xoff, color);
SetPixel(x+yoff, y-xoff, color);
balance += xoff++;
if ((balance += xoff) >= 0)
balance -= --yoff * 2;
} while (xoff <= yoff);
} // FCircle //