快速嵌套以在矩阵中绘制圆

fast nested for to draw circle in matrix

假设我有一个 NxN 矩阵,其中每个单元格都是一个 1x1 的白色方块。

假设我有一个位置 P 和一个半径 R。我想绘制以 P 为中心的半径 R 的圆的所有单元格。

我当然可以这样做:

for(int i = P.x - R; i < P.x + R; i++)
    for(int j = P.y - R; j < P.y + R; j++)
        if (distance from P to (i,j) < R)
            Paint(i,j)

但是正如我 运行 着色器上将执行每一帧的这段代码,我想知道一种更快的方法来找到正确的单元格而不是询问每个单元格的距离,这是慢。

有没有更聪明的方法?

您可以为圆的每个给定高度计算其线段宽度并完全填充它。

你将从 y = P - R 到 P + R 填充和弦(圆弧段)中的所有点。

和弦的长度只需使用here中的公式(9)即可。