问题描述
假设我有一个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)。