2012-02-06 110 views
3

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

这是我的理解,笔者利用蒙特卡罗方法做一些像GIF交错,使图像似乎更快地加载。我错过了什么吗?

回答

4

作者使用的蒙特卡洛(MC)方法无关生成的图像文件类型,它的一切做的图像是如何在第一时间产生的。由于JS1K的目的是编写紧凑的代码,因此作者通过数学形式定义了玫瑰,这些数学形式将通过基本渲染使用小点填充(因此它们看起来像一个实心图像)。

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

我已经看到了这样的困惑在MC之前,因为它通常被认为是进行数值模拟的工具。虽然广泛使用,但其核心思想是随机抽样一个区间,并给出相应的权重(取决于问题)。例如,物理模拟可能具有e ^( - E/kT)的权重,而数字积分器可能使用与采样点处的导数成比例的权重。 wikipeida entry(及其中的参考文献)是更详细的一个很好的起点。

你可以把完整的上涨,充分计算的功能。随着MC算法的运行,它在收敛到正确答案的同时对这个函数进行采样。

+0

因此,代码很小的真正原因是图像是以函数的形式出现的。随机性只是为了解决间隔问题。 – pepsi 2012-02-06 22:00:51

+0

@pepsi正确。 MC(虽然在这里使用得很好)只是达到目的的一种手段。如果他不使用它,他将不得不为每个表格定义采样间隔,浪费空间。 – Hooked 2012-02-06 22:02:31

+0

谢谢,这是有道理的。我仍然认为Wired/WebMonkey的文章是误导性的:) – pepsi 2012-02-06 22:22:29

1

作者写道,他用蒙特卡罗抽样克服基于间隔采样的局限性,因为后者“要求每个表面的适当间隔设置的文章。如果间隔较大,它呈现速度快,但它可以在没有被填充的表面上留下孔洞,另一方面,如果间隔太小,渲染时间会增加到禁止数量。“我相信WebMonkey文章的结论是:代码大小不正确。

+0

这就是我的想法。然而,在作者文章的顶部,他写到关于蒙特卡罗方法,“在玫瑰的情况下,它对代码大小优化非常有用。” – pepsi 2012-02-06 21:44:17