我正在寻找一种聪明的方法来增加然后减少计数器变量。我希望计数器变量以较低的值开始,并朝较高的值递增。一旦达到较高的值,计数器就会递减,直到回到较低的值。一旦达到较低的值,计数器将再次增加至较高的值...我想您已经明白了。
我正在一个画布动画上工作,我想在不使用if
或进行其他条件测试的情况下运用一些技巧:
这是处理计数器变量的条件逻辑:
incrementing = true
foo = ->
length += 1 if incrementing
length -= 1 if not incrementing
incrementing = false if length > 100
incrementing = true if length < 1
最初,我认为我可以使用模数。但是,模除法只会将计数器重置为较低的值-计数器达到最大值后不会递减。
0 % 10 = 0
1 % 10 = 1
2 % 10 = 2
3 % 10 = 3
4 % 10 = 4
5 % 10 = 5
6 % 10 = 6
7 % 10 = 7
8 % 10 = 8
9 % 10 = 9
10 % 10 = 0
11 % 10 = 1
12 % 10 = 2
13 % 10 = 3
我确定必须有一种方法,而无需使用条件测试。假设最低值为0,最高值为10,则该方法应输出以下内容。
? = 0
? = 1
? = 2
? = 3
? = 4
? = 5
? = 6
? = 7
? = 8
? = 9
? = 8
? = 7
? = 6
? = 5
首先,让我们看一些浪潮!
你好波浪!
您能确定一个满足您需求的产品吗?
如果您猜到了三角波,那是对的!
三角波以均匀的斜率振荡,直到达到最小值或最大值,然后将斜率反转。
这里有两件事要解决:
x
到-x
我们想从开始输出,0
只包含正值
function triangle(t, a) {
return Math.abs(((t + a/2) % a) - a/2);
}
让我们尝试一下
for (var i=0; i<20; i++) {
console.log(i, triangle(i, 10));
}
输出
0 0
1 1
2 2
3 3
4 4
5 5
6 4
7 3
8 2
9 1
10 0
11 1
12 2
13 3
14 4
15 5
16 4
17 3
18 2
19 1
所以,当我们调用triangle(i, 10)
的10
是“月经”。这告诉我们在重复功能之前我们要在功能中执行多少步骤。
一段6
会给我们6个值,0, 1, 2, 3, 2, 1
的一段时间4
会给我们4个值,0, 1, 2, 1
依此类推
如果您要出发0-9
,则需要一段20
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句