确定圆圈使用的网格

时间:2015-12-30 12:09:45

标签: javascript math geometry

我想确定一个(或多个)圆占据的网格单元的比例。因此,例如,下面的左上方网格单元将具有较小的值(~0.1),并且中心网格单元格(7,7)将具有值1,因为它完全被圆圈占据。

problem view

目前我正在使用canvas.context2d.getImageData,通过对单元格内容进行采样来确定存在的内容。这可行,但方式太慢。这是这个方法:

Microsoft.Azure.WebJobs.WebJobsShutdownWatcher().Token

getImageData调用是问题的根源 - 它太慢了。

鉴于我有一个圆圈阵列,每个圆圈都有x,y和半径,我该如何计算?如果可能的话,我希望每个值都是小数(0到1之间)。

网格是静态的,但圆圈可能在其中移动。我很乐意对这个值进行粗略估计,它不需要100%准确。

2 个答案:

答案 0 :(得分:2)

您可以使用蒙特卡罗方法来获得近似解决方案。它是一种基于概率的方法,您可以在其中生成随机样本以估计某些值。在这种情况下,给定圆心的坐标,圆半径和网格单元的边界,您可以通过生成 K 随机样本来估计圆占据的网格单元的比例(全部包含在网格单元格内部,并验证同样在圆圈内的样本的比例。您生成的样本越多,结果就越准确。

请记住:要验证给定样本 P 是否在中心 C 和半径 R 的圆圈内,您所要做的就是检查等式 sqrt((Px-Cx)^ 2 +(Py-Cy)^ 2)< = R 是否为真

答案 1 :(得分:1)

您只需要调用getImageData一次,即可获得整个画布。

获得图像数据后,您可以访问偏移4 * (celly * width + cellx)处的字节以获取RGB(A)数据。

这应该大大加快,因为它只调用一次图形硬件而不是数千次。