【互动媒体创意编程1&2】万千星河都涌向你:向量、速度、力与加速度

这篇博客探讨了如何使用Processing编程语言,结合向量、速度、力和加速度,创建出粒子系统的动态效果。内容包括随机游走、粒子群向鼠标位置加速追赶以及粒子被吸引后的运动。通过代码示例,详细解释了粒子状态的切换、速度和加速度的计算方法,展示了创意编程的魅力。
摘要由CSDN通过智能技术生成

【互动媒体创意编程1&2】万千星河都涌向你——向量、速度、力与加速度

这个代码把第一章和第二章融合到一起了。在这个程序里,我赋予了一群粒子三个不同的运动状态。
本来其实并没有把这两个试验写成一个的打算,只是写着写着突然发现他们需要被集合在一起。不仅它们需要在代码中被放到一起,而且我还需要在一起讲。
这个程序的效果是一开始我并没有能够预料到的。起初只是想要实现向量的计算,没想到在里面发现了一些力和噪声的成分。
首先放上效果图。
1.状态1:噪声实现的平凡随机游走
在这里插入图片描述
2.状态2:被吸引向鼠标位置加速运动。
在这里插入图片描述
3.状态3:粒子被吸向鼠标之后继续运动
在这里插入图片描述
4.状态4:粒子按照原有速度方向保持运动
在这里插入图片描述

1.随机游走

我们首先需要一个粒子系统作为运动的载体。
粒子系统在第四章讲,现在略过。
创建一个粒子系统:

  balls = new ArrayList<Ball>();
  for (int i = 0; i< 200; i++){
   
    Ball b = new Ball();
    balls.add(b);
  }

接下来只要为每一个粒子添加速度,让它随机游走就可。

    for (Ball b : balls){
   
      b.walk();
    }

Particle.walk()函数:


  public void walk(){
   
    time1 += 0.01; time2 += 0.01;
    PVector offset = new PVector(sin(noise(time1) * 10),cos(noise(time2) * 10));
    position.x += offset.x;
    position.y += offset.y;
    boundaryDetect();
    ellipse(position.x, position.y, mass, mass);
  }

其中有定义

    time1 = random(0, 10);time2 = random(0,10000);

time1和time2将作为构成规定随机游走的偏移量的noise()函数的参数、把time2设置地远大于time1是为了使offsetx和offsety尽量少有相关性,否则粒子将会有向固定方向偏移的趋势。

2.粒子群向鼠标位置加速追赶

我们需要表示这样的一个运动的趋势,即距离鼠标中心最远的粒子所受到的中心的吸引力越小。而这个吸引力我们希望它只作用一次,来为粒子施加一个加速度,给粒子一个运动的方向。这样,粒子在运动的过程中速度就会逐渐增大,直到到达鼠标的位置。
这里需要注意的

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值