图形中的蒙特卡罗方法

时间:2012-02-06 21:33:44

标签: javascript graphics random montecarlo

我正在阅读this interesting post关于使用JavaScript生成玫瑰图像的内容。但是,我有点困惑,因为this article声称作者使用蒙特卡罗方法来减少代码大小。

据我所知,作者使用蒙特卡罗方法做了类似GIF隔行扫描的事情,因此图像看起来加载速度更快。我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

作者使用的蒙特卡罗(MC)方法与生成的图像文件类型无关,它首先与图像的生成方式有关。由于JS1K的目的是编写 compact 代码,因此作者通过数学形式定义玫瑰,这些形式将通过基本渲染填充小点(因此它们看起来像一个实心图像)。 / p>

你如何填写这些表格?一种方法是对表面均匀进行采样,即在设定的时间间隔内放置一个点。正如@Jordan引用的那样,当且仅当间隔设置正确时,它才会起作用。把它缩小到需要很长时间;使它变大,图像拼凑而成。但是,您可以通过随机采样随机来绕过整个问题。这就是MC方法的用武之地。

之前我已经看到过对MC的混淆,因为它通常被认为是数值模拟的工具。虽然这样广泛使用,但核心思想是随机采样一个带有偏差的区间,相应地对每个步骤进行加权(取决于问题)。例如,物理模拟可能具有e ^( - E / kT)的权重,而数值积分器可能使用与采样点处的导数成比例的权重。 wikipeida entry(以及其中的参考文献)是一个更详细的良好起点。

您可以将完整的玫瑰视为完全计算的函数。当MC算法运行时,它会在收敛到正确答案时对此函数进行采样。

答案 1 :(得分:1)

作者在文章中写道,他使用蒙特卡罗采样来克服基于区间的采样的局限性,因为后者“需要为每个表面设置适当的间隔。如果间隔很大,它会快速渲染,但它可以结束时表面上的孔没有被填充。另一方面,如果间隔太小,渲染增量的时间就会达到令人望而却步的数量。“我相信WebMonkey文章的结论是:代码大小不正确。