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

问题描述

假设我有一个NxN矩阵,其中每个像元是一个1x1的白色正方形。

假设我的位置为P,半径为R。我想绘制以R为中心的半径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)。