Processing 在处理过程中设置正弦波动画

Processing 在处理过程中设置正弦波动画,processing,Processing,在下面的代码中,如何设置正弦线的动画,使其沿y轴移动,使其看起来更像移动的水波 -如果你把速度和加速度代码拿出来,你会看到我想用的东西 float scaleVal=6.0; 浮动角度inc=0.19; 浮动速度=0.0; 浮子加速度=0.01; 无效设置(){ 规模(750750); 中风(255); } 作废提款(){ 背景(0); 浮动角度=0.0; 对于(int offset=-10;offset

在下面的代码中,如何设置正弦线的动画,使其沿y轴移动,使其看起来更像移动的水波

-如果你把速度和加速度代码拿出来,你会看到我想用的东西

float scaleVal=6.0;
浮动角度inc=0.19;
浮动速度=0.0;
浮子加速度=0.01;
无效设置(){
规模(750750);
中风(255);
}
作废提款(){
背景(0);
浮动角度=0.0;
对于(int offset=-10;offset对于(int y=1;y堆栈溢出并不是为一般的“我该怎么做”类型问题而设计的。它是为更具体的“我尝试了X,预期了y,但得到了Z”类型问题而设计的。尽管如此,我将尝试在一般意义上提供帮助

如果要设置某个对象上下移动的动画,则必须随时间修改其Y位置

一种方法是使用
sin()
cos()
函数得出一个在
-1
1
之间交替的值,然后将该值乘以一个高度并添加到一个中心:

void setup(){
大小(100200);
}
作废提款(){
背景(0);
浮动中心Y=高度/2;
浮动波高=75;
浮点输入=帧数/10.0;
浮球Y=centerY+sin(输入)*波高;
椭圆(宽度/2,贝利,10,10);
}
另一种方法是跟踪位置并自行加速。当位置达到最小值或最大值时,只需反转速度。类似如下:

float ballY = 100;
float ySpeed = 1;

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

void draw() {
  background (0);

  ballY += ySpeed;
  if(ballY < 0 || ballY > height){
    ySpeed *= -1;
  }

  ellipse(width/2, ballY, 10, 10);
}
float ballY=100;
浮动Y速度=1;
无效设置(){
大小(100200);
}
作废提款(){
背景(0);
贝利+=Y速度;
如果(球<0 | |球>高度){
y速度*=-1;
}
椭圆(宽度/2,贝利,10,10);
}
你也可以使用
lerp()
函数。关键是有一百万种不同的方法可以做到这一点。你能做的最好的事情是尝试一些方法,如果你卡住了,就发布一个。祝你好运。

尝试使用
sin()
来更改y位置,而不是x位置。 x位置可以简单地增加

数学可能令人畏惧,但一旦你掌握了窍门,它就会变得有趣。 想象在笛卡尔坐标系中绕半径为1.0的圆(0为中心,x和y向右和向下增加,向左和向上减少):

  • 假设从顶部开始,最高值,圆的长度半径(1.0)
  • 减小角度时,x会向左移动,但y会向中心移动(0.0)
  • 然后,当x接近圆心时,x将增大,y将下降到圆的底部(-1.0)
  • 然后x将继续增加,直到它到达圆的右边缘,y值将增加并到达垂直中心(0.0)
  • 最后,x将减小,直到到达水平中心,y将增大,并返回到圆的顶部(1.0)
这张图片很好地解释了这一点:

本质上,它就像一个转换器:插入一个0到360度的角度或两个弧度(sin使用弧度表示的角度),然后返回一个介于-1.0和1.0之间的值

如果要绘制正弦波,必须绘制多个点:

  • x位置将直接增加值
  • y位置将增加角度,但使用
    sin()
    函数的结果可获得上下移动的值
最后要做的事情是将
sin()
函数的结果乘以一个更大的数字,以基本上将正弦波(从-1.0到1.0)缩放到更适合屏幕的大小

下面是一个快速的评论演示,您可以使用鼠标位置进行播放:

函数设置(){
createCanvas(640100);
}
函数绘图(){
背景(255);
变量numberOfPoints=1+(mouseX/2);
//两个点的间隔是多久
var widthPerPoint=宽度/点数;
//从一点到另一点的角度变化有多大
var anglePerPoint=两个/numberOfPoints;
var波高=25;
对于(变量i=0;i

很抱歉,这是我第一次使用堆栈溢出,我真的处于为学校项目学习此程序的开始阶段。我确实尝试过合并速度和加速度代码,但我看到的只是沿y轴向下移动的点。你看到我的代码中我检查y值与最小值和最大值的位置了吗速度是多少?你加上它时发生了什么?我试过这个:line+=ySpeed;if(line<0 | | line>height){ySpeed*=-1;但罪恶线不是moving@AlexanderPark这没什么意义。代码中的
行是什么?为什么不从我提供的代码开始,试着画一条上下移动的直线作为起点?你能工作吗?我有堆叠的垂直贝塞尔线来上下移动(使用您提供的第一个代码集)