效果图
定期变化,16x8块随机二进制数
想法
这里我们只是想创建一个随机的二进制数块我们可以指定列的数量,行的数量,以及数字变化的频率
设计
尽管有很多方法可以完成这个任务,但 JavaScript 有一些内置工具可以让这个任务变得非常简单。我们设计的第一个关键是使用 JavaScript 的 toString() 方法。这个方便的方法最常见的用途是简单地将数字转换为字符串。然而,toString() 还有另一个函数,它使用了一个不太为人熟知的可选参数。事实证明,您可以指定用于转换的基(即数字采用什么进制)。你已经习惯看到以 10 为基数的数字,这是 toString() 的默认模式,所以如果放任不管的话(so left to its own devices),它会将你的数字转换为以 10 为基数的字符串。然而,它也很乐意把你的数字转换成任何其他的基数。我们将利用这个特性将随机数转换为二进制(以 2 为基数)。
你可以自己看看 toString() 是如何工作的,通过创建一个文本层,并为源文本(SourceText)输入这个表达式:
(127.9) .toString (2)
您会注意到结果字符串是 “1111111” ,这是 127 的二进制表示。你可以看到 toString(2) 将我们的数字四舍五入到最接近的整数(127),并将其转换为二进制。这对我们的目的很有用。
现在我们需要弄清楚如何产生一个随机数,当转换为二进制字符串时,每一列都有一个二进制数字。通常,当您使用 toString() 将一个数字转换为二进制时,它不会添加前导零(我们需要填充左边的空列)。让我们把事情缩小(具体)一点,以便我们能详细地检查这个问题。假设我们只需要四列。这意味着我们需要0(二进制 “0000” )和15(二进制 “1111” )之间的数字。使用像 random(16).tostring(2) 这样的方法是可行的,除了像 5 这样的数字最后会变成 “101” 而不是 “0101” 。因此,我们需要做的是生成一个介于 16 (二进制“10000”) 和 31 (二进制“11111”) 之间的随机数,然后只使用最后四位数字。当我们需要的时候,它会给我们前导零。
这就引出了我们将要使用的动态 JavaScript 字符串操作方法的另一半,即substr()。这是一个非常强大的方法,如果您认真对待表达式或脚本的话,您应该深入阅读您喜欢的 JavaScript 参考资料,了解它是如何工作的。在这里,我们将用最基本的方式来删除二进制字符串的第一个字符(数字)。我们将通过在数字字符串后面添加 .substr(1) 来实现这一点。这告诉 JavaScript 从字符串中提取以第二个字符开始并一直到字符串末尾的子字符串。这样做的最终结果是删除第一个字符。
表达式代码
rows = 8;
cols = 16;
freq = 5;
posterizeTime(freq);
randMin = Math.pow(2, cols);
randMax = randMin * 2;
s = "";
for (i = 0; i < rows; i++) {
s += random(randMin, randMax).toString(2).substr(1) + "\r";
}
s