3

我特别看这个例子:

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”是什么,它似乎是一个计数器代表什么,或者接下来的两行完成了什么。

谢谢

4

2 回答 2

2

移动鼠标改变粒子运动。

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 个像素之间。

于 2011-04-22T18:30:41.177 回答
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 度)。

于 2012-11-06T11:37:48.073 回答