2012-03-25 11 views
0

我正在用SDL编写程序。我将屏幕设置为600x600。然后我在窗户上画一个圆圈。我用点随机拍摄整个屏幕,并最终计算圆中有多少个点,这可以用来估计圆的面积。但是我发现,如果我初始化窗口较大(如1024 * 768),那么同样的方法会降低面积计算的精确度(虽然很小,但仍然不会那么小)。我想知道增加窗口的分辨率并不能帮助提高这个问题的解决方案吗?那么我怎样才能利用更大的分辨率呢?关于SDL的分辨率和准确性

+3

也许是因为1024x768不是正方形,所以圆外有更多点? – Kos 2012-03-25 08:54:29

+0

只是出于兴趣,你不能通过找到它的半径和评估'pi * r^2'来计算圆的面积吗?或者我错过了什么? – 2012-03-25 08:56:30

+1

另外你如何生成你的随机数字?如果你想做数值,'rand()'不够随机。包括''并使用'std :: mt19937',检查是否有帮助 – Kos 2012-03-25 08:57:17

回答

0

然后我在窗户上画一个圆圈。我用点随机拍摄整个屏幕,并最终计算圆中有多少个点,这可以用来估计圆的面积。

圆面积等于pi*(r^2)。其中“r”是圆半径。

但我发现,如果我初始化窗口做大

你的方法不会产生可靠的结果,除非随机数发生器是完美这意味着它必须产生点的绝对完美的均匀分布,这不会发生。你也需要知道一个“打”的区域,这将是一个大问题。

如果你坚持重新发明轮子(并避免使用pi*(r^2)不明原因),然后,而不是“拍摄随机点”。只需逐行扫描图像,并计算圆内的点数。它也可能比尝试滥用伪随机数生成器快得多。你可以加速这个过程(通过失去精度),而不是检查每个像素,检查每个第2个像素(和行),每个第3个,每个第4个等等(完美的均匀分布)。它会比您的PRNG滥用更可靠和可预测。