我通过this interesting post阅读了有关使用JavaScript生成玫瑰图像的信息。然而,我有点困惑,因为this article声称作者使用蒙特卡洛方法来减少代码大小。
据我所知,作者使用蒙特卡洛方法来做一些类似于GIF交错的事情,以便图像看起来加载得更快。我错过了什么吗?
发布于 2012-02-07 05:48:09
作者使用的蒙特卡洛(MC)方法与生成的图像文件类型无关,它与图像最初是如何生成的有关。由于JS1K的重点是编写紧凑的代码,因此作者通过数学形式定义了玫瑰,这些数学形式将通过基本的渲染用小点填充(使它们看起来像实心图像)。
你如何填写这些表格?一种方法是对表面进行均匀采样,即在设定的间隔内放置一个点。正如@Jordan引用的那样,如果且仅当间隔设置正确时,它才会起作用。使它变小需要很长时间;使它变大,图像是拼凑而成的。但是,您可以通过在曲面上随机采样来绕过整个问题。这就是MC方法发挥作用的地方。
我以前看到过这种关于MC的困惑,因为它通常被认为是一种数值模拟工具。虽然被广泛使用,但其核心思想是随机采样一个区间,并对每个步骤进行相应的加权(取决于问题)。例如,物理模拟的权重可能为e^(-E/kT),而数值积分器可能使用与采样点的导数成比例的权重。wikipeida entry (和参考文献)其中)是更多细节的一个很好的起点。
你可以把完整的看作是一个完全计算的函数。当MC算法运行时,它会对此函数进行采样,同时收敛到正确的答案。
发布于 2012-02-07 05:40:08
作者在文章中写道,他使用蒙特卡洛采样来克服基于间隔的采样的局限性,因为后者“需要为每个表面设置适当的间隔。如果间隔很大,渲染速度会很快,但可能会以尚未填充的表面上的空洞结束。另一方面,如果间隔太小,渲染增量的时间会增加到令人望而却步的程度。”我相信WebMonkey文章的结论是:代码大小是不正确的。
https://stackoverflow.com/questions/9167586
复制相似问题