3

我正在阅读这篇关于使用 JavaScript 生成玫瑰图像的有趣文章。但是,我有点困惑,因为这篇文章声称作者使用了蒙特卡罗方法来减少代码大小。

据我了解,作者正在使用蒙特卡罗方法来执行诸如 GIF 隔行扫描之类的操作,以便图像加载速度更快。我错过了什么吗?

4

2 回答 2

4

作者使用的 Monte-Carlo (MC) 方法与生成的图像文件类型无关,它首先与图像的生成方式有关。由于 JS1K 的重点是编写紧凑的代码,因此作者通过数学形式定义了玫瑰,这些形式将通过基本渲染填充小点(因此它们看起来像实心图像)。

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

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

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

于 2012-02-06T21:48:09.000 回答
1

作者在文章中写道,他使用蒙特卡洛采样来克服基于间隔的采样的局限性,因为后者“需要为每个表面设置适当的间隔。如果间隔很大,则渲染速度很快,但可能会以孔结尾“ 我相信 WebMonkey 文章的结论是:代码大小不正确。

于 2012-02-06T21:40:07.757 回答