如何先递增后递减

How to make an increment followed by a decrement continuously?

本文关键字:何先递      更新时间:2023-10-16

我试图获得一个从0上升到n,然后从n-1下降到0的增量,并一遍又一遍地重复这个循环。

在Processing中编写的这个例子中,我希望背景从黑色(I=0)逐渐变为白色(I=255),然后从白色逐渐变为黑色,以此类推。现在我只让它从黑色变成白色,然后突然又变成黑色。

int i = 0;
void setup(){
size(640, 360);
frameRate(60);
}
void draw(){
  background(i);
  i++;
  if(i==256){i=0;}
}

Try-

 int change = 1;
 void draw(){
  background(i);
  i = i + change;
  if(i==256){change = -1;}
  if(i==0){change = 1;}
}

看待这个问题的另一种方法是:"我如何绘制三角波?"。我喜欢这种方式,因为它不需要"如果"。这样的事情就可以了。

triangleWave = maxNumber - abs(incrementedVar % (2*maxNumber) - maxNumber);

科尔,不是吗?

我有一个使用这个的旧代码,它不是画波浪,而是用它来确定尺寸和填充颜色。还有一个正弦波可供比较。看看:

float zigZag, toIncrement, speed =1, maxNumber = 255;
float sine, x = 270, speed2 = 1;
void setup() {
  size(800, 400);
  background(255);
}
void draw() {
  background(255);
  //triangle wave
  toIncrement+=speed;
  zigZag = maxNumber - abs(toIncrement % (2*maxNumber) - maxNumber);
  fill(zigZag);
  noStroke();
  ellipse( 150, height/2+100, 50, 50);
  strokeWeight(zigZag);
  stroke(0);
  line(100, height/2-100, 200, height/2-100);
  text("triangle = " + int(zigZag), 100, height-30);
  println("triangle wave value = " + zigZag);

  //sine wave
  x+=speed2;
  sine = (1+sin(radians(x)))*(maxNumber/2);
  fill(sine);
  noStroke();
  ellipse( 650, height/2+100, 50, 50);
  strokeWeight(sine);
  stroke(0);
  line(600, height/2-100, 700, height/2-100);
  fill(80);
  text("sine = " + int(sine), 600, height-30);
}