为什么这个球和弹簧系统的动画效果不好?

时间:2018-04-02 14:14:26

标签: java processing

我想在Processing中为弹簧上的N个球系统设置动画。系统在N = 3时看起来像这样:This

球的运动可用以下系统微分方程描述:
Equation
其中m是球的质量,k是弹簧的“强度”,u_n是第n个球从其平衡位移。并且还有第0和第N + 1球,其中u_0 = 0且u_(N + 1)= 0。

我认为这是我的代码中最重要的部分:

  tempu = u;
  tempv = v;
  for(int i = 1; i <= N; i++){
    a[i] = (k/m)*(u[i-1]+u[i+1]-2*u[i]);
    tempv[i] += a[i];
    tempv[i] += a[i];
    tempu[i] += tempv[i];
    tempu[i] += tempv[i];
  }
  u = tempu;
  v = tempv;
  for(int i = 1; i <= N; i++) {
    ellipse(original[i] + u[i], d, 10, 10);
  }

首先,我在开头填写u,v和a为0,然后修改1 u让系统移动。 (这一切都发生在设置中)。它在N = 1时工作得很好,但是对于更高的N,它会超出控制范围并且非常快地移出屏幕。我用低fps检查N = 2情况,并且2个球没有对称移动。

问题:为什么效果不好?

1 个答案:

答案 0 :(得分:1)

您似乎希望temputempv保留原始uv数组的副本。但是,仅使用tempu = u;为数组分配不同的变量不会复制数组;由于数组是对象,因此该赋值仅在tempu中对同一数组进行另一个引用。

要复制数组,请使用:

tempu = u.clone();
tempv = v.clone();