本文已参与掘金创作者训练营第三期「高产更文」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力。
栗子9 —— 闪电
在这个例子中,我们将编写一个脚本来帮助我们画闪电。
如果你看看闪电的参考照片,你会发现闪电有一个大致的形状,有几个主要方向。在这些主要方向中有较小的缺陷,因为闪电在空中寻找到地面的路径。和前面的例子一样,我们将使用组合几个不同周期和振幅的波函数的方法。这一次,我们将使用 noise 函数而不是 cellNoise 。
seed = seed ? seed : rand()*10000;
offsetDist = d + seed; w1 = w1Amplitude * noise(offsetDist/w1Period);
w2 = w2Amplitude * noise(offsetDist/w2Period);
w3 = w3Amplitude * noise(offsetDist/w3Period);
offset = smoothStep(0, 20, abs(d)) * (w1+w2+w3);
ox = x + nx * offset; oy = y + ny * offset;
在这个脚本中,种子是随机生成的,因为我们通常希望每次绘制时都有不同的闪电。我们使用 smoothStep 函数逐渐淡出超过 20 像素的位置偏移,以避免在线的开始有偏移(我们希望闪电从我们笔实际的位置开始)。
你需要设置一个取值范围在 [0..200] 之间的 amplitude 参数,[1..150] 之间的 period 参数。下面是使用以下参数值生成的结果:
w1Amplitude = 46,
w2Amplitude = 25,
w3Amplitude = 4,
w1Period = 130,
w2Period = 57,
w3Period = 8
栗子10 —— 信号错误识别
为了保持敏捷和响应,你的平板电脑或鼠标驱动程序以固定的速率采样它的位置。这意味着如果你画得非常快,那么你线条的样本会比你画得慢些的时候的样本来得少。
LNP (Lazy Nezumi Pro)处理平板电脑和鼠标数据,之后才将其传递给艺术应用程序。它本身并没有画出线条。这意味着,如果您使用的脚本基于当前距离采样函数,如上述示例中使用的 wave 函数,如果您绘制得太快,将遇到一个名为 信号错误识别 的问题。这种情况发生在函数采样不足时,并将导致最终输出看起来不像完全采样的模式。解决这个问题的唯一方法是在使用这些脚本时放慢速度。
下面的图片用例 3 中的虚线脚本说明了这一点
栗子11 —— 调试
如果您的脚本没有执行您希望它执行的操作,您可以查看图形窗口,尝试确定在图形上出现了什么问题。但有时你需要看看变量的实际值来真正理解发生了什么。
为此,您可以使用特殊的调试函数 debugOut1 和 debugOut2 。作为参数,这些函数接受一个文本字符串和一个或两个变量。文本应该包含使用printf语法的格式说明符,它将被最后字符串中的变量值替换。这里有一个例子:
debugOut2("p: %f, d: %e", p, d);
这将以十进制格式输出输入的压力变量的值,并以科学记数格式输出距离变量的值。
要真正看到这个文本,你需要使用 DebugView 应用程序,你可以在这里下载。由于这个应用程序可以在 Windows 中监控大量的事件,我们建议使用 DebugOut 输入过滤器,只看到 LNP 脚本相关的文本。