<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />杰士林,附在下面,做了一些修改来制作这个视频。观看时最好。专为全屏设计。灵感来自基板屏保。
https://www.youtube.com/watch?v=WP1moAuUKXo
这是所附 JSL 中的典型图片。

感谢您的快速回复。 我在生成具有不同曲率和颜色组合的图像时获得了很多乐趣。
谢谢! 发帖太兴奋了,好像忘记写评论了!
该程序使用名为 stack 的 JSL 列表(名称错误,但请忽略它。) Stack 保存了活动道路的列表。 堆栈中的每个元素都是一个列表
- 最后一行,道路中像素的坐标位置
- 道路的最后一个角度
- 绘制每个像素时道路转动的增量角度
还有一个 veclen,我相信它总是 0.7,接近 0.707。
接近尾声时,驱动程序循环调用 doodle 函数 N 次,并使用堆栈中最前面的 N 个项目的索引。 doodle 为每条道路绘制一个像素,因此看起来 N 条道路是同时修建的。 看doodle前面的代码,你会看到实现转弯的代码:
1 {row, col, angle, deltaangle, veclen} = stack[istack];
2 {newrow, newcol, angle} = Eval List( {row + veclen * Sin( angle ), col + veclen * Cos( angle ), angle + deltaangle} );
3 If( newrow >= 1 & newrow <= rowsiz & newcol >= 1 & newcol <= colsiz,
4 stack[istack] = Eval List( {newrow, newcol, angle, deltaangle, veclen} );第 1 行获取第 n(istack)路的状态。 第 2 行计算下一个像素的行和列以及新的角度(用于下一次)。第 3 行正在测试行、列是否仍在屏幕上,如果是,则第 4 行将道路信息更新回堆栈。
如果您仍在关注源代码,您将看到在行、列处设置了一个黑色像素,或者如果在屏幕外,您将看到堆栈元素被删除......这将在堆栈的更下方形成一条新道路,下次开始画。
您还将看到以直角生成新道路的代码(通过将 +/- pi/2 添加到当前角度),以及以直角喷射浅色沙子的代码。
催生新道路的代码
// new doodle at right angle
stack[N Items( stack ) + 1] = Eval List({newrow, newcol, angle + If( Random Integer( 0, 1 ), Pi() / 2, -Pi() / 2 ), Random Normal( 0, .0001 ), .7});是您问题的答案:大多数情况下,随机法线会生成非常接近于零的增量角。 将 0.0001 的阴影调大一些,更多的线条就会有更大的曲率。
感谢您对代码的困惑,并再次询问缺少注释是否是一个问题。
很棒的剧本! 我没有看到代码中的何处生成曲线。 有没有办法生成更多曲线?
我是 JSL 的新手。
谢谢。
哇 Craige,您刚刚将 JMP 变成了屏幕保护程序。 下一步是什么 - 飞行烤面包机?