【问题标题】:How does a perlin noise field work?柏林噪声场如何工作?
【发布时间】:2011-04-22 16:26:32
【问题描述】:

我特别看这个例子:

http://www.airtightinteractive.com/demos/processing_js/noisefield08.html

这是它的代码:

http://www.airtightinteractive.com/demos/processing_js/noisefield08.pjs

我想我需要解释一下这些行在粒子类中的作用:

d=(noise(id,x/mouseY,y/mouseY)-0.5)*mouseX;  
x+=cos(radians(d))*s;
y+=sin(radians(d))*s;

我知道噪声会根据给定的坐标计算一个值,但我不明白将粒子的 x pos 除以 mouseY 或 y pos 除以 mouseY 的逻辑。我也不明白“id”是什么,它似乎是一个计数器代表什么,或者接下来的两行完成了什么。

谢谢

【问题讨论】:

    标签: processing perlin-noise


    【解决方案1】:

    移动鼠标改变粒子运动。

    d 似乎是运动的方向。通过将 mouseY 和 mouseX 放入d 的计算中,它允许底层字段依赖于鼠标位置。如果没有更好地了解函数本身,我无法准确告诉您 mouseY 和 mouseX 在场上的影响。

    通过运行 cos(radians(d)) 和 sin(radians(d)),代码将角度 (d) 转换为单位向量。例如,如果 d 为 1 弧度,则 cos(radians(d)) 将为 -1,而 sin(radians(d)) 将为 0,因此它将角度 1 弧度转换为单位向量 (-1,0)。

    因此,似乎有一些潜在的运动场决定了粒子的移动方向。运动场由噪声函数表示,并采用粒子的当前位置、粒子 id(可能给每个粒子独立的运动,或者可能记住粒子运动的历史并将未来的运动基于该历史)和鼠标的当前位置。

    粒子实际移动的距离为 s,随机确定在 2 到 7 个像素之间。

    【讨论】:

      【解决方案2】:

      通过运行 cos(radians(d)) 和 sin(radians(d)),代码将角度 (d) 转换为单位向量。例如,如果 d 为 1 弧度,则 cos(radians(d)) 将为 -1,而 sin(radians(d)) 将为 0,因此它将角度 1 弧度转换为单位向量 (-1,0)。

      轻微修正:即旋转 pi 弧度(180 度),而不是 1 弧度(大约 57 度)。

      【讨论】:

        猜你喜欢
        • 2021-04-29
        • 2012-01-29
        • 2017-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多