Processing 振荡值

Processing 振荡值,processing,trigonometry,Processing,Trigonometry,我在做一些处理实验,我经常需要一个int或float在两个值之间振荡,比如从0到255,然后回到0,每次递增1个值。我通常会编写一些布尔切换方法来实现这一点,但我想知道是否有更简单的方法来实现这一点 比如,有没有一种方法可以: oscillate(0, 255, 1); 这和我上面描述的是一样的?如果你想具体控制你的振荡是如何完成和计算的,那么没有什么比为它编写你自己的函数更好的了。但是如果您正在寻找内置的东西,那么请查看sin()函数,它是数学函数的一个实现。事实上,即使在我自己的函数中,我

我在做一些处理实验,我经常需要一个int或float在两个值之间振荡,比如从0到255,然后回到0,每次递增1个值。我通常会编写一些布尔切换方法来实现这一点,但我想知道是否有更简单的方法来实现这一点

比如,有没有一种方法可以:

oscillate(0, 255, 1);

这和我上面描述的是一样的?

如果你想具体控制你的振荡是如何完成和计算的,那么没有什么比为它编写你自己的函数更好的了。但是如果您正在寻找内置的东西,那么请查看
sin()
函数,它是数学函数的一个实现。事实上,即使在我自己的函数中,我也使用处理提供的
sin
cos
函数。当函数的输出在-1和1之间振荡时,只需使用与之相乘的值即可。将其与特定数字相乘将得到所需的值。然后将其强制转换为
int
将得到整数值

可以看到此
sin()
函数起作用的示例。为便于参考,此处复制本页代码:

// Learning Processing
// Daniel Shiffman
// http://www.learningprocessing.com

// Example 13-6: Oscillation

float theta = 0.0;

void setup() {
  size(200,200);
  smooth();
}


void draw() {
  background(255);

  // The output of the sin() function oscillates smoothly between -1 and 1. 
  // By adding 1 we get values between 0 and 2. 
  // By multiplying by 100, we get values between 0 and 200 which can be used as the ellipse's x location.
  float x = (sin(theta) + 1) * width/2; 

  // We can also use Processing's "map()" function to achieve the same results
  // http://processing.org/reference/map_.html
  // float x = map(sin(theta),-1,1,0,width);

  // With each cycle, increment theta
  theta += 0.05;

  // Draw the ellipse at the value produced by sine
  fill(0);
  stroke(0);
  line(width/2,0,x,height/2);
  ellipse(x,height/2,16,16);
}

我喜欢波浪。。。我想这是一个三角波

试试这个:

intx;
无效设置(){
帧率(6);
}
作废提款(){
println(sawWave(x,4));
x++;
}
int锯齿波(int值,int最大值){
返回值(绝对值(绝对值%(最大值*2)-最大值)-最大值);
}
这里有更多的波浪你可以使用。单击草图以转到下一个草图

PGraphics[]pg=新的PGraphics[4];
int w_dim=1000;
字体;
ArrayList points=新的ArrayList();
浮动[]f;
浮点数x,res=1;
字符串表达式=”;
int expr=0;
浮动有效输入;
无效设置(){
//黄金比率:P
尺寸(宽尺寸,内部尺寸(宽尺寸/1.6180));
光滑的();
背景(255);
pg[0]=createGraphics(宽度、高度、JAVA2D);
font=loadFont(“STHeitiSC-Medium-48.vlw”);
//画图形线
pg[0].beginDraw();
pg[0].行程(240);
pg[0]。行(0,高度/2,宽度,高度/2);
pg[0]。行(0,高度/2-112,宽度,高度/2-112);
pg[0]。行(0,高度/2+112,宽度,高度/2+112);
pg[0].endDraw();
}
作废提款(){
frame.setTitle(nf(帧率,2,2));
/*XXXXXX*/
背景(255);
x+=res;
浮动xR=弧度(x);
交换机(expr){
案例0:
valInput=sin(xR);
表达式=“y=sin(x)”;
打破
案例1:
valInput=sin(tan(xR)*pow(sin(xR),10));
表达式=“y=sin(tan(x)*sin(x)ˆ10”;
打破
案例2:
有效输入=功率(sin(xR*PI),12);
表达式=“y=(sin(x*PI))ˆ12”;
打破
案例3:
valInput=cos(sin(xR*3)+xR*3);
expression=“cos(sin(x*3)+x*3”;
打破
案例4:
有效输入=x%100/100;
表达式=“(x%100/100)”;
打破
案例5:
valInput=sin(tan(cos(xR)*1.2));
表达式=“sin(tan(cos(x)*1.2”;
打破
案例6:
有效输入=cos(xR)*sin(xR);
表达式=“cos(x)*sin(x)”;
打破
案例7:
valInput=sin(xR)*sin(xR*1.5);
表达式=“cos(x)*sin(x*1.5)”;
打破
案例8:
valInput=sin(tan(xR)*0.05);
表达式=“sin(tan(x)*0.05”;
打破
案例9:
valInput=cos(sin(xR*3))*sin(xR*0.2);
expression=“cos(sin(x*3))*sin(x*2)”;
打破
案例10:
valInput=sin(pow(8,sin(xR));
表达式=“sin(8ˆsin(x))”;
打破
案例11:
valInput=sin(exp(cos(xR*0.8))*2);
表达式=“sin(eˆcos(x*0.8)*2”;
打破
案例12:
valInput=sin(xR PI*tan(xR)*0.01);
表达式=“sin(x-PI*tan(x)*0.01”;
打破
案例13:
有效输入=功率(sin(xR*PI),12);
表达式=“sin(x*PI)ˆ12”;
打破
案例14:
valInput=cos(sin(xR)*tan(xR*PI)*PI/8);
表达式=“cos(sin(x)*tan(x*PI)*PI/8”;
打破
案例15:
valInput=cos(sin(xR*3)+xR*3);
expression=“cos(sin(x*3))+x*3”;
打破
案例16:
valInput=pow(abs(sin(xR*2))*0.6,sin(xR*2))*0.5;
表达式=“|(sin(x*2)*0.6)ˆsin(x*2)*0.5|”;
打破
案例17:
valInput=abs(xR%(2)-1);
表达式=“|x%2-1 |”;
打破
案例18:
valInput=sin(xR)*tan(xR)*0.1;
表达式=“sin(x)*tan(x)*0.1”;
打破
案例19:
valInput=sin(tan(xR));
表达式=“sin(tan(x))”;
打破
案例20:
有效输入=(cos(xR)*sin(xR*30))*0.3;
表达式=“(cos(x)*sin(x*30))*0.3”;
打破
案例21:
valInput=cos(xR*(xR*0.5));
expression=“cos(x*(x*0.5))”;
打破
案例22:
有效输入=cos(xR)*(tan(xR*0.5)*0.1);
expression=“cos(x)*tan(x*0.5)*0.1”;
打破
案例23:
valInput=sqrt(abs(sin(xR));
表达式=“平方根(| sin(x)|”)”;
打破
案例24:
valInput=sqrt(abs(sin(xR)*sin(xR*2));
表达式=“平方根(| sin(x)*sin(x*2)|”);
打破
案例25:
valInput=sqrt(abs(sin(xR)*sin(xR*10));
表达式=“平方根(| sin(x)*sin(x*10)|”);
打破
案例26:
valInput=tan(sin(xR)*cos(xR*3));
表达式=“tan(sin(x)*cox(x)”;
打破
案例27:
valInput=sin(tan(cos(xR));
表达式=“sin(tan(cos(x))”;
打破
}
//浮动值=
//浮动值=
//浮动值=
//浮动值=
//浮动值
//浮动值
//println(值);
//抽屉表达式(0,0,宽度,高度,值,“”);
图像(pg[0],0,0);
抽屉表达式(0,0,宽度,高度,有效输入,x,表达式);
}
void mouseereleased(){
//背景(255);
pg[0].beginDraw();
pg[0]。背景(255);
pg[0].行程(240);
pg[0]。冲程重量(1);
pg[0]。行(0,高度/2,宽度,高度/2);
pg[0]。行(0,高度/2-112,宽度,高度/2-112);
pg[0]。行(0,高度/2+112,宽度,高度/2+112);
pg[0].endDraw();
x=0;
expr=(expr+1)%29;
println(expr);
}
void抽屉表达式(float _x,float y,float w,float h,float value _y,float value _x,String _表达式)
{
浮动v_中心=h/2;
浮动h_中心=w/2;
浮动位置x=\ux+值x;
浮动位置y=(v_中心+(-val
aniA = new Ani(this, 1.5, "x", 255);
aniA.setPlayMode(Ani.YOYO);
aniA.repeat();