首页 > 解决方案 > 快速嵌套用于在矩阵中绘制圆

问题描述

假设我有一个 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)

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

有没有更聪明的方法?

标签: algorithmmathoptimizationgeometry

解决方案


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

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

对于和弦的长度,只需使用此处的公式(9) 。


推荐阅读