寻找一种优雅的方法来获得±1序列的处理

时间:2012-01-27 20:46:19

标签: processing

我需要一个替代序列,如1,-1,1,-1 ... asf。首先我使用了if语句,但它很愚蠢。然后我尝试了类似的东西:

int n = 1;
...
do{
   n = 0 + ( n * (-1));
} while(blabla)

没关系,但是我必须将迭代中的n值存储到迭代中。这不是那么漂亮。如何从控制变量计算该序列,如 frameCount

抱歉,我不仅学习编码,还学习英语。

5 个答案:

答案 0 :(得分:2)

它不是很易读,但是如果你正在寻找纯粹“优雅”的东西,我想你可以这样做:

int n = 1 - ((frameCount % 2) * 2);

如果你在偶数帧上你将减去(1 - 0),如果你在奇数帧上你将减去(1 - 2)。

答案 1 :(得分:1)

为了便于阅读,我建议:

int n = (frameCount & 1) == 1 ? 1 : -1;

int n = -1;
if ((frameCount & 1) == 1) {
    n = 1;
}

(请注意x & 1提取x中的最低位,就像x % 2一样。)

答案 2 :(得分:1)

你为什么不这样做

float n = 1 ;

void setup() {
....
}

void draw() { 
....
n =-n;
....
} 

答案 3 :(得分:1)

我最近看到了另一种使用异或魔法创建这样一个序列的有趣方法。

int n = -1, t = 1 ^ -1;
...
do{
   n ^= t;
}while(blabla);

见于 Algorithms for programmers,第 5 页。

答案 4 :(得分:0)

一种可能是

npm link comp1

在偶数帧上,framecount & 1 将产生 0,然后结果将为 -1。在奇数帧上,framecount & 1 将产生 1,结果将为 1。

或者,在某些架构上不太直接但可能更快,

((framecount & 1)<<1) -1;

frameCount 为奇数时,frameCount^1 等于 frameCount-1,结果为 1。如果 frameCount 为偶数,frameCount^1 等于 frameCount+1,得到-1。